sklearn-搭建神经网络分类模型

举报
Yin-Manny 发表于 2021/11/22 23:51:39 2021/11/22
【摘要】 使用MLPclassification搭建神经网络分类模型,分析如下: (1)描述所使用的神经网络模型; (2)描述训练模型所使用的算法; (3)描述模型超参数(如神经网络模型结构对应的参数)确定的过程,分析模型训练结果,包括五次5折交叉验证及其结果、模型训练过程相应误差的变化情况等; (4)总结模型训练过程中的收获。
  • 神经网络分类模型:
    • 描述所使用的神经网络模型:

与神经网络回归模型相似,神经网络分类模型一样使用多层感知机(MLP)来构建神经网络。对于多层感知机和顺序APISequential API)的介绍和使用不再赘述。

经过分析和对比,我们小组选择了一层隐藏层八个神经元的神经网络模型,并且也一样选用了relu函数作为激活函数。

对于上述使用的函数,在神经网络回归模型的报告中都已经给出详细的解释,这里不再赘述。

同时注意到,在给出的dataset中,y的值有三种情况:012。因此这是一个多分类的问题,对此我们采用one vs rest的方法。

1.png2.png

3.png4.png

  • 描述训练模型使用的算法:

由于在神经网络回归模型中,我们使用的Adam优化器效果非常出色,所以我们小组一开始也是使用了Adam算法作为分类模型的优化器。但之后我们测试了不同的优化器对结果的影响,包括AdamSGD等。


5.png

6.png

7.png

从上面的三个结果,我们可以得到,在分类模型中,SGD的优化效果是最好的,所以我们选用了SGD作为优化器。

  • 模型超参数的确定过程:

我们通过对一些超参数——隐藏层的神经元个数( hidden_layer_sizes )、激活函数、权重优化的求解器等进行随机取值调试,发现对这一个神经网络分类模型影响较大的参数有隐藏层的神经元个数、激活函数和权重优化的求解器。

  • 隐藏层的神经元个数:

8.png 

如图,我们根据这一理论选出了一些待选数据。由于对这一超参数进行手动调参耗费的精力过大,我们小组选择使用Sklearn库中的GridSearchCV( )函数进行调参(相关代码如下)。

9.png 

在使用GridSearchCV( )函数的同时,我们对数据集进行了五次五折交叉验证,以获得较好、较准确的超参数。分类模型的隐藏层层数分别设置为一层、两层和三层,通过三次运行我们分别得到了一层、两层和三层隐藏层所对应的最佳模型。在通过比较正确率accuracy后,我们发现accuracy最高的模型为一层隐藏层和八个神经元。

  • 激活函数:

激活函数一共含有4种,分别为:‘identity’,‘logistic’,‘tanh’,‘relu’。根据上一点中确定的隐藏层层数,我们将MLPClassifier( )模型中的隐藏层设置为一层和八个神经元,然后再通过手动调参,设置不同的激活函数来建立分类模型。

将四个分类模型的正确率accuracy进行对比可以发现,‘relu’这一激活函数得到的分类模型的accuracy最高。

  • 权重优化的求解器:

10.png

12.png

11.png 

权重优化的求解器一共含有3种,分别为:‘lbfgs’,‘sgd’,‘adam’。根据前两点将隐藏层层数设置为一层和八个神经元,将激活函数设置为‘relu’。通过手动调参,设置不同的求解器以建立分类模型。

如上三幅图分别为‘sgd’,‘lbfgs’和‘adam’对应的分类模型所得到的正确率,显然‘sgd’在这一分类模型中起到的效果更佳。

  • 分析模型训练结果:
  • 五次5折交叉验证及其结果:

13.png 

根据上述分析,我们将对模型正确率影响较大的超参数都设置为最佳状态,对分类模型进行搭建。利用该分类模型对数据集中的测试集进行预测,我们得到了较高的准确率0.9875

  • 模型训练过程相应误差的变化情况:

14.png 

上图为我们所得到的最佳分类模型对应的loss变化情况图,其横坐标为迭代次数,纵坐标为loss。由于模型MLPClassification( )有早停的功能,在将近840次迭代处loss值的减少几乎不变,因此此时表示该分类模型已经训练完成。

根据图像我们明显可以知道,在前面的200次迭代中,模型的每一次优化效果都很不错,其相应的loss值减小的速度较快。在400次迭代以后,由于分类模型的精确度逐渐提高,其相应的loss值减小的速度逐渐减小直至趋近于零。

  • 感想:

在实现分类模型的代码时,我们小组本以为和神经网络回归模型一模一样,只需要稍加改变就能完成,但在实际操作时却发现有很大的不同。首先,对于分类模型,在神经网络的搭建、优化器的选取上,都不能直接照抄回归模型的选择,而是需要重新对每个选择进行评估,再选取效果最好的函数。换言之,神经网络的搭建并不是一成不变的,对于每一个不同的题目,同一个神经网络模型进行拟合的效果可能是天差地别。其次,在查看给出的dataset时,我们注意到了y有三种取值,因此问题变成了多分类的问题,与传统的二分类问题有着很大的区别,我们小组在查阅了资料后才将多分类模型的问题解决。

在本次作业,我们小组成员一同讨论,在分出任务后能较好的完成。从一开始尝试学习keraspytorch等库,然后学习GridSreachCV函数的参数和使用,搭建神经网络,调节神经元的个数,调节超参数,使用优化算法,降误差...在这个过程中,我们小组逐步从对神经网络一知半解的状态学习到了能够使用神经网络来解决基本的回归、分类问题。我们小组在本次的作业中都认识到了通过搭建神经网络来解决问题的强大之处,也认识到我们现在了解、使用的神经网络还只是皮毛,还有很多复杂的模型等待我们去探索!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。