【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)


机器学习』分享机器学习课程学习笔记,逐步讲述从简单的线性回归、逻辑回归到 ▪ 决策树算法 ▪ 朴素贝叶斯算法 ▪ 支持向量机算法 ▪ 随机森林算法 ▪ 人工神经网络算法 等算法的内容。

欢迎关注 『机器学习』 系列,持续更新中
欢迎关注 『机器学习』 系列,持续更新中

资源下载

拿来即用,所见即所得。
项目仓库:https://gitee.com/miao-zehao/machine-learning/tree/master
【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)


1. MLPClassifier分类算法

1.a 读取数据并进行归一化

题目:a) 神经网络对数据的范围敏感,在训练之前需要对数据进行归一化,将特征数据缩放到区间[-1,1];

%ignore_pre_1%

1.b MLPClassifier多层神经网络

题目:b) 采用sklearn库中的MLPClassifier多层神经网络函数或者MATLAB神经网络工具箱,构建包含两个隐含层的多层神经网络。网络结构为:输入层2个神经元,第一个隐含层包含5个神经元,第二个隐含层包含2个神经元,输出结果为2分类;

解读:题目要求输入层2个神经元,就是我们的输入数据X的维度为2,题目没有指定激活函数和求解优化器,我测试过了“sgd”优化器,但是效果很差,只有0.5的准确度,而且分界线是一条直线,最后我反复测试了多个优化器,选择了“lbfgs”(quasi-Newton方法的优化器),hidden_layer_sizes 控制我们的隐藏层,hidden_layer_sizes 维度表示其层数。

  1. hidden_layer_sizes :例如hidden_layer_sizes=(5, 2),表示有两层隐藏层,第一层隐藏层有5个神经元,第二层也有2个神经元。
  2. activation :激活函数,{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, 默认relu
  1. solver: {‘lbfgs’, ‘sgd’, ‘adam’}, 默认adam,用来优化权重
  1. alpha :float,可选的,默认0.0001,正则化项参数
  2. batch_size : int , 可选的,默认’auto’,随机优化的minibatches的大小batch_size=min(200,n_samples),如果solver是’lbfgs’,分类器将不使用minibatch
  3. learning_rate :学习率,用于权重更新,只有当solver为’sgd’时使用,{‘constant’,’invscaling’, ‘adaptive’},默认constant
%ignore_pre_2%

【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)


1.c 对模型分类结果进行可视化

题目:可视化网络分类结果

%ignore_pre_3%

上面的代码可以很方便的进行标签分类。

%ignore_pre_4%

【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)

  • 为了进一步对比分析,我们也绘制一下原始数据(没有任何归一化等处理)绘制的坐标图
%ignore_pre_5%

yuanshi
【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)

分析

我们可以看到,归一化对于数据的影响还是很大的,数据明显变得密集了。

我们的分类效果还是比较好的,模型的精确度可以达到1.0(当然我觉得原因在于样本点确实比较少,也不太好判断是否过拟合)


2. MLPRegressor回归算法

题目:
a) 神经网络对数据的范围敏感,在训练之前需要对数据进行归一化,将特征数据缩放到区间[-1,1];
b) 输入层13个神经元,自定义神经网络的隐含层数(建议不超过3层)以及每个隐含层的节点数,建立波士顿房价的预测模型。
c) 通过设置多组不同的网络结构(隐含层数量不同或者隐含层神经元数量不同),建立多个神经网络模型,并进行比较分析。

大体过程和前面的MLPClassifier差不多,就是数据的接口有所区别。为了做到C题的要求,我们封装一个函数来对比预测得分。

2.1 模型训练

  1. hidden_layer_sizes :例如hidden_layer_sizes=(5, 2, 2),表示有3层隐藏层,第一层隐藏层有5个神经元,第二层有2个神经元,第三层也有2个神经元

  2. activation :激活函数, {‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, 默认relu

  1. solver: {‘lbfgs’, ‘sgd’, ‘adam’}, 默认adam,用来优化权重

注意:默认solver ‘adam’在相对较大的数据集上效果比较好(几千个样本或者更多),对小数据集来说,lbfgs收敛更快效果也更好。

  1. alpha :float,可选的,默认0.0001,正则化项参数

  2. batch_size : int , 可选的,默认’auto’,随机优化的minibatches的大小batch_size=min(200,n_samples),如果solver是’lbfgs’,分类器将不使用minibatch

  3. learning_rate :学习率,用于权重更新,只有当solver为’sgd’时使用,{‘constant’,’invscaling’, ‘adaptive’},默认constant

  4. max_iter : 迭代次数,int, optional, default 200。函数达到收敛的最大迭代次数。设置过少的话可能出现迭代的时候迭代总数超过了限制导致程序函数无法收敛。如下图的报错:
    【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)

%ignore_pre_6%%ignore_pre_7%

分析

【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)

分别对应
creat_train((5, 2, 2))
creat_train((5, 5, 2))
creat_train((5, 5, 5))
的运行得分和时间。

2.2 可视化

随着模型的神经网络层数增加,模型确实是提高了得分。 但是可视化后发现了问题。
【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)

%ignore_pre_8%
  • 修改了参数,改变激活函数。但是偶尔还是会出现上面的那种情况(收敛的特别凑巧的情况吧)
%ignore_pre_9%

【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)

分析异常

我们在分类问题的时候使用logistic激活函数, 但是可视化后就出现了问题,会导致出现预测值是一条平缓的水平线的问题(logistic激活函数取中为用,把上下极值往中庸数据拉进,这样显然会使得我们的预测结果很差。)

所以我该用了激活函数为ReLu函数。ReLu函数的优点就是在应用梯度下降法是收敛较快,当输入值为整数时,不会出现梯度饱和的问题,因为大于0的部分是一个线性关系,这个优点让ReLu成为目前应用较广的激活函数。


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的python机器学习知识!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2022 mzh

Crated:2022-9-23

欢迎关注 『机器学习』 系列,持续更新中
欢迎关注 『机器学习』 系列,持续更新中
【机器学习】01. 波士顿房价为例子学习线性回归
【机器学习】02. 使用sklearn库牛顿化、正则化的逻辑回归
【机器学习】03. 支持向量机SVM库进行可视化分类
【更多内容敬请期待】


文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年10月8日 下午7:49
下一篇 2022年10月8日 下午7:52

相关推荐

本站注重文章个人版权,不会主动收集付费或者带有商业版权的文章,如果出现侵权情况只可能是作者后期更改了版权声明,如果出现这种情况请主动联系我们,我们看到会在第一时间删除!本站专注于人工智能高质量优质文章收集,方便各位学者快速找到学习资源,本站收集的文章都会附上文章出处,如果不愿意分享到本平台,我们会第一时间删除!