机器学习常用算法二:神经网络
来源:互联网 发布:xampp怎么升级php版本 编辑:程序博客网 时间:2024/06/10 18:48
1. 理解神经网络
生物中的神经网络
生物信号(Signal In)传递给神经元,达到一定阈值后,生物会做出反应,即产生Signal Out传递给下一个神经元
从生物神经元到人工神经元
一个神经元相当于一个多元线性回归方程
激活函数:将神经元的净输入信号转换成单一的输出信号,以便进一
步在网络中传播。
网络拓扑:描述了模型中神经元的数量以及层数和它们连接的方式
训练算法:指定如何设置连接权重,以便抑制或增加神经元在输入信号中的比重激活函数
通常如以下几种激活函数:阈值函数:
逻辑函数:
其他:网络拓扑层—单层网络
网络拓扑层—多层网络
神经网络没有必要深究,开发人员做的就是定义激活函数,然后调用封装好的神经网络算法就可以,而一般采用逻辑回归函数(Sigmoid)作为激活函数神经网络与多元线性回归对比
2. 案例:利用神经网络预测水泥强度
部分数据:
R语言代码:
# 导入数据,把csv文件读到dataframe中concrete <- read.csv("concrete.csv")# 定义一个归一化函数# 归一化:缩放,把每列的数据都放到[0,1]之间normalize <- function(x){ return ((x - min(x)) / (max(x) - min(x)))}
归一化之后部分数据:
# 把concrete这个dataframe中的每个向量(表格中的每一列)都调用归一化函数# 并把结果再报存dataframe,lapply函数默认返回矩阵concrete_norm <- as.data.frame(lapply(concrete, normalize))# 把数据分为训练集和测试集,通常比例为7:3或者8:2concrete_train <- concrete_norm[1:773,]concrete_test <- concrete_norm[774:1030,]# 调用神经网络训练方法 concrete_model <- neuralnet(strength ~ cement + slag + ash + water + superplastic + coarseagg + fineagg + age, data=concrete_train)# 画出训练结果图plot(concrete_model)
训练结果图如下:
# 测试,传入测试集的1-8列(不包含强度那一列)model_results <- compute(concrete_model, concrete_test[1:8])predicted_strength <- model_results$net.result# 求测试结果和实际结果的相关系数cor(predicted_strength, concrete_test$strength)结果:0.8063194089
# 调整了隐藏层节点的个数,可以降低误差,但计算变得更复杂concrete_model2 <- neuralnet(strength ~ cement + slag + ash + water + superplastic + coarseagg + fineagg + age, data=concrete_train, hidden=5)plot(concrete_model2)
# 测试,传入测试集的1-8列(不包含强度那一列)model_results2 <- compute(concrete_model2, concrete_test[1:8])predicted_strength2 <- model_results2$net.result# 求测试结果和实际结果的相关系数cor(predicted_strength2, concrete_test$strength)结果:0.9342932783,系数变大,说明误差小了
这个案例中对数据进行了归一化,归一化有两个好处:
1)归一化后加快了梯度下降求最优解的速度;
2)归一化有可能提高精度。
原因请参考博客:https://yq.aliyun.com/articles/16908
概念:过拟合
神经网络的隐藏层足够多(谷歌是5,所以5已经是很大的隐藏层数量),隐藏节点足够多(一般调优会调整隐藏节点的数,而不调整隐藏层的数量)时,计算的结果会符合每一种情况,即代表结果的线会穿过所有的点,但是如果有几个数据是脏数据,本身就不正确,那么结果拟合了这些数据反而使得模型变得不准确,我们把这种拟合了全部数据包括脏数据的现象称为过拟合,神经网络很容易造成过拟合。
想了解多元线性回归相关知识,请参考博主另一篇博客:《机器学习常用算法——多元线性回归 》
网址:http://blog.csdn.net/itJed/article/details/77879002
- 机器学习常用算法二:神经网络
- 机器学习----神经网络(二)BP算法
- 【机器学习】神经网络(二)——反向传播算法
- 机器学习常用算法总结(二)
- 机器学习--神经网络算法系列--卷积神经网络
- 机器学习之神经网络算法
- 机器学习之神经网络算法
- 机器学习--神经网络算法系列--BackPropagation算法
- 《机器学习》学习笔记(二):神经网络
- 机器学习常用算法
- 机器学习常用算法
- 机器学习常用算法
- 机器学习常用算法
- 常用机器学习算法
- 机器学习常用算法
- 机器学习常用算法
- 机器学习常用算法
- 机器学习算法二
- 观察者模式
- JavaSE学习----Arrays类
- 基于Hi3559A ARM64位嵌入式平台的OpenCV2.4.9+ffmpeg2.0.7移植及应用
- 图解圆周卷积
- H5 入门.....
- 机器学习常用算法二:神经网络
- java学习笔记
- 如何安装centos系统,并且使用xshell进行简单静态ip设置
- bzoj 1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压)
- 存储过程,函数,触发器
- c++多线程重点难点(四)semaphore
- windos nginx curl 超时
- Ruby之map、each、collect、map!、collect!揭秘
- 种子生长相关算法实现