为什么从复杂的机器学习模型开始并不是一个好主意

2020-12-14 15:23:35 浏览数 (1)

当我开始研究数据科学时,我着迷于神经网络及其在如此复杂的应用中的强大功能。例如,在计算机视觉和自然语言处理(NLP)中有应用。由于它们的强大功能,我只是想在每个问题中开始使用它们。但是我必须冷静下来!有时,简单的模型可以取得良好的成绩。

在这篇文章中,我将指导您以初学者的经验来应对我的第一个数据科学挑战,以及它如何帮助我成长为一名学生。我永远不会忘记简单的线性回归模型的强大功能!

挑战

Condenation是一个有时会组织挑战的网站,作为在不同领域加速发展的第一步,其中之一是关于数据科学。数据科学领域的最后一项挑战是如何预测ENEM(进入公立大学的巴西考试)学生的数学成绩。我开始很兴奋!但是我之所以失明只是因为我没有尝试任何其他模型,除非随机森林神经网络可以预测数学得分。我进行了预处理以替换一些NaN值,并选择了一些具有高相关性的特征。之后,我对RandomizedSearchCV进行了艰苦的工作,以选择最佳参数。尽管我做了很多辛苦的工作,但仍无法达到90%并加入Codenation。所以我感到沮丧,我放弃了我。

因祸得福..

最近,我在Kaggle遇到了相同的数据库。自从接受挑战以来已经有一段时间了,所以我再次尝试了。正如您在下面阅读的,我将展示一种应对挑战的新方法,以及如何甚至不使用简单模型就将其判断为弱模型。这是一个很大的错误,也是一个很好的学习经验。

一种新方法

在这里,我不会描述我所做的一切,例如与数据预处理有关。但是,如果您想查看我的笔记本,可以在kaggle中访问它。

首先,我检查了数据库,看是否已使用了一些NaN值。这些值被替换为0,因为当学生退学时,我不得不处理它。之后,我意识到这些功能之间存在一定的关联。我的想法是获得最高的功能并使用它们来预测数学分数。下面的热图使用皮尔森系数显示了这些相关性。

如我们所见,它们具有高度相关性。因此,我决定将它们用作简单的线性回归模型中的预测器功能,如下所示。

代码语言:javascript复制
X = df_train_filled.drop(columns=['NU_NOTA_COMP5', 'NU_NOTA_MT'])
y = df_train_filled['NU_NOTA_MT']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)

lr = LinearRegression(normalize=True)
lr.fit(X_train, y_train)

lr.score(X_test, y_test)

使用简单的训练和测试拆分,我们可以达到90%的准确性。该准确性优于随机森林和神经网络模型。但是,也许您会感到奇怪:“您只是使用了数据库的一部分吗?为了全面理解,需要使用交叉验证!”。好吧好吧..你是对的!正如您在下面看到的,我也是这样做的。

代码语言:javascript复制
# making scores
mae = make_scorer(mean_absolute_error)
r2 = make_scorer(r2_score) 

cvs = cross_validate(estimator=LinearRegression(normalize=True), X=X, y=y, cv=10, verbose=10, scoring={'mae': mae, 'r2':r2})

我用平均绝对误差 R ^ 2R2 分来评估模型。平均分数分别为50.027和0.902。也许该模型可以用测试数据库分数的90%预测数学分数。因此,我可以很乐意尝试提交!不,不..

不幸的是,不可能在Kaggle或原始网站上进行提交。规范联盟很久以前关闭了,所以我必须等待未来的新机会。

但是,我们可以从中学到什么呢?

重要的是要注意,即使使用随机森林和神经网络模型,我也可以进行更好的预处理或选择其他功能并获得良好的成绩。是的,它是正确的!但是这种经历对我很重要,因为我可以学习并成为一名更好的数据科学家。

即使您认为该模型对完成艰巨的任务是如此简单,您也应该给它一个机会。也许无法获得高分或结果。但是,它可以成为验证其他模型是否在帮助您改善得分手的起点。

0 人点赞