python sklearn 神经网络,sklearn实现bp神经网络
导读最近看了西瓜书,查阅了很多资料,补了数值代数,统计概率,线性生成,终于把西瓜书上的公式推导弄懂了。但是,知道了公式之后,还是要学会应用。几经摸索,发现python下的sklearn包封装了机器学习中的所有经典算法。所以打算写几篇博客,记录下sklearn包下常用学习算法的使用方法,防止自己以后忘记,呵呵。
1.神经网络神经网络其实是一个宽泛的概念,西瓜书只是简单介绍了一下神经网络。详细神经网络是一门与深度学习密切相关的完整学科。综上所述,神经网络是一种处理多输入多输出任务的算法。它采用多层次的计算节点进行交互操作,不同层次之间相互影响。下级的数据或运算结果作为上级的输入,上级节点接收下级节点的输入,对输入进行权重计算,通过激活函数生成本级的输出值。这样经过复杂的迭代可以得到多个输出值。从这个描述中我们可以知道,每个节点都需要有自己的计算准则(参数值),比如如何对上一层的输入进行加权,如何计算下一层的输出,如何选择激活函数和阈值等等。因此,神经网络的问题最终归结为参数的优化,但在神经网络中,有大量的参数需要优化。
2.BP算法BP算法用于求解神经网络的参数。其核心思想是最小化均方误差。给定一个训练样本(x k,y k x k,y k x k,y k),假设模型的输出为y k=(y 1.k,y 2.k.y l k) y k=(y Y _ 2。K.YK=(Y1。k,Y2。K.YL。K)则均方误差为:E K=12J=1L(Y J . K Y J K)E _ K=\ cfrac { 1 } { 2神经网络中需要优化的参数有: h j \omega_hj h j(隐层连接权)、J \_ JJ(函数中的阈值,输入求和后减去作为sigmoid函数的参数)、v i h v_ih vi h(输入层权)和h \hh(隐层阈值具体推导过程不详细(其实公式太难打了,哈哈)。
3.神经网络分类器MLPClassifier和神经网络回归封装在3.sklearn下,用法和参数都差不多。本文用MLPClassifier写一个案例。其实很多任务,比如数字识别,字符识别,甚至自然语言识别,都可以归结为分类任务(比如数字识别就是一个10分类的任务)。因为完整的数据集并不完整,神经网络实际上也写不出一篇透彻的文章,我也是刚刚入门,所以还是用虹膜数据,写一个分类案例。
重要参数求解器:优化方法,值集为{lbfgs , sgd 和 adam}。LBFGS是无知者烟法,SGD是随机梯度下降,Adam是另一种梯度下降,叫做机会梯度下降。当数据集非常大时,建议使用adam、general data和lbfgs。
Hidden_layer_sizes:隐藏层节点数,是一个可变参数,元组类型,可以有任意长度。其中的第I个数字代表第I个隐含层的节点数,元组长度就是隐含层数。默认值为(100),这意味着隐藏层中有100个节点的单个隐藏层。
Alpha:正则化系数,防止过拟合。正则化系数越大,正则化强度越大。
代码从sklearn.neural _ network导入mlpclassifierfrom从sklearn .预处理导入标准Scaler从sklearn.model _ selection导入train _ test _ split导入numpy as导入pandas as从sklearn导入数据集从pandas导入data frame iris=datasets . load _ iris()df=data frame(iris . data,columns=iris . feature _ names)df[ target ]=list(iris . target)# print(df)X=df . iloc[:0:4]Y=df.iloc[:4]XMLP=MLP classifier(solver= lbfgs ,alpha=1e-5,hidden _ layer _ size=(10,5))mlp.fit(standard_train,Y _ train)result=MLP . predict(standard _ test)print(测试集的Y值:,list(Y_test))print(神经网络预测的Y值:,list(result))print(预测的正确率为:,mlp.score(standard_test,Y_test
4.补充不同数据集如何选择隐层数和隐层节点数?我也可以通过触发分类所需的感知器数量来确定隐层的相关参数,找其他博主解释一下,我觉得很准确。此处链接-神经网络中应该使用多少个隐藏层/神经元?(有例子)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。