sklearn-搭建神经网络分类模型
- 神经网络分类模型:
- 描述所使用的神经网络模型:
与神经网络回归模型相似,神经网络分类模型一样使用多层感知机(MLP)来构建神经网络。对于多层感知机和顺序API(Sequential API)的介绍和使用不再赘述。
经过分析和对比,我们小组选择了一层隐藏层八个神经元的神经网络模型,并且也一样选用了relu函数作为激活函数。
对于上述使用的函数,在神经网络回归模型的报告中都已经给出详细的解释,这里不再赘述。
同时注意到,在给出的dataset中,y的值有三种情况:0,1,2。因此这是一个多分类的问题,对此我们采用one vs rest的方法。
- 描述训练模型使用的算法:
由于在神经网络回归模型中,我们使用的Adam优化器效果非常出色,所以我们小组一开始也是使用了Adam算法作为分类模型的优化器。但之后我们测试了不同的优化器对结果的影响,包括Adam,SGD等。
从上面的三个结果,我们可以得到,在分类模型中,SGD的优化效果是最好的,所以我们选用了SGD作为优化器。
- 模型超参数的确定过程:
我们通过对一些超参数——隐藏层的神经元个数( hidden_layer_sizes )、激活函数、权重优化的求解器等进行随机取值调试,发现对这一个神经网络分类模型影响较大的参数有隐藏层的神经元个数、激活函数和权重优化的求解器。
- 隐藏层的神经元个数:
如图,我们根据这一理论选出了一些待选数据。由于对这一超参数进行手动调参耗费的精力过大,我们小组选择使用Sklearn库中的GridSearchCV( )函数进行调参(相关代码如下)。
在使用GridSearchCV( )函数的同时,我们对数据集进行了五次五折交叉验证,以获得较好、较准确的超参数。分类模型的隐藏层层数分别设置为一层、两层和三层,通过三次运行我们分别得到了一层、两层和三层隐藏层所对应的最佳模型。在通过比较正确率accuracy后,我们发现accuracy最高的模型为一层隐藏层和八个神经元。
- 激活函数:
激活函数一共含有4种,分别为:‘identity’,‘logistic’,‘tanh’,‘relu’。根据上一点中确定的隐藏层层数,我们将MLPClassifier( )模型中的隐藏层设置为一层和八个神经元,然后再通过手动调参,设置不同的激活函数来建立分类模型。
将四个分类模型的正确率accuracy进行对比可以发现,‘relu’这一激活函数得到的分类模型的accuracy最高。
- 权重优化的求解器:
权重优化的求解器一共含有3种,分别为:‘lbfgs’,‘sgd’,‘adam’。根据前两点将隐藏层层数设置为一层和八个神经元,将激活函数设置为‘relu’。通过手动调参,设置不同的求解器以建立分类模型。
如上三幅图分别为‘sgd’,‘lbfgs’和‘adam’对应的分类模型所得到的正确率,显然‘sgd’在这一分类模型中起到的效果更佳。
- 分析模型训练结果:
- 五次5折交叉验证及其结果:
根据上述分析,我们将对模型正确率影响较大的超参数都设置为最佳状态,对分类模型进行搭建。利用该分类模型对数据集中的测试集进行预测,我们得到了较高的准确率0.9875。
- 模型训练过程相应误差的变化情况:
上图为我们所得到的最佳分类模型对应的loss变化情况图,其横坐标为迭代次数,纵坐标为loss。由于模型MLPClassification( )有早停的功能,在将近840次迭代处loss值的减少几乎不变,因此此时表示该分类模型已经训练完成。
根据图像我们明显可以知道,在前面的200次迭代中,模型的每一次优化效果都很不错,其相应的loss值减小的速度较快。在400次迭代以后,由于分类模型的精确度逐渐提高,其相应的loss值减小的速度逐渐减小直至趋近于零。
- 感想:
在实现分类模型的代码时,我们小组本以为和神经网络回归模型一模一样,只需要稍加改变就能完成,但在实际操作时却发现有很大的不同。首先,对于分类模型,在神经网络的搭建、优化器的选取上,都不能直接照抄回归模型的选择,而是需要重新对每个选择进行评估,再选取效果最好的函数。换言之,神经网络的搭建并不是一成不变的,对于每一个不同的题目,同一个神经网络模型进行拟合的效果可能是天差地别。其次,在查看给出的dataset时,我们注意到了y有三种取值,因此问题变成了多分类的问题,与传统的二分类问题有着很大的区别,我们小组在查阅了资料后才将多分类模型的问题解决。
在本次作业,我们小组成员一同讨论,在分出任务后能较好的完成。从一开始尝试学习keras,pytorch等库,然后学习GridSreachCV函数的参数和使用,搭建神经网络,调节神经元的个数,调节超参数,使用优化算法,降误差...在这个过程中,我们小组逐步从对神经网络一知半解的状态学习到了能够使用神经网络来解决基本的回归、分类问题。我们小组在本次的作业中都认识到了通过搭建神经网络来解决问题的强大之处,也认识到我们现在了解、使用的神经网络还只是皮毛,还有很多复杂的模型等待我们去探索!
- 点赞
- 收藏
- 关注作者
评论(0)