python机器学习之神经网络实现


Posted in Python onOctober 13, 2018

神经网络在机器学习中有很大的应用,甚至涉及到方方面面。本文主要是简单介绍一下神经网络的基本理论概念和推算。同时也会介绍一下神经网络在数据分类方面的应用。

首先,当我们建立一个回归和分类模型的时候,无论是用最小二乘法(OLS)还是最大似然值(MLE)都用来使得残差达到最小。因此我们在建立模型的时候,都会有一个loss function。

而在神经网络里也不例外,也有个类似的loss function。

对回归而言:

python机器学习之神经网络实现

对分类而言:

python机器学习之神经网络实现

然后同样方法,对于W开始求导,求导为零就可以求出极值来。

关于式子中的W。我们在这里以三层的神经网络为例。先介绍一下神经网络的相关参数。

python机器学习之神经网络实现

第一层是输入层,第二层是隐藏层,第三层是输出层。

在X1,X2经过W1的加权后,达到隐藏层,然后经过W2的加权,到达输出层

其中,

python机器学习之神经网络实现

我们有:

python机器学习之神经网络实现

至此,我们建立了一个初级的三层神经网络。

当我们要求其的loss function最小时,我们需要逆向来求,也就是所谓的backpropagation。

我们要分别对W1和W2进行求导,然后求出其极值。

从右手边开始逆推,首先对W2进行求导。

代入损失函数公式:

python机器学习之神经网络实现

python机器学习之神经网络实现

然后,我们进行化简:

python机器学习之神经网络实现

化简到这里,我们同理再对W1进行求导。

python机器学习之神经网络实现

我们可以发现当我们在做bp网络时候,有一个逆推回去的误差项,其决定了loss function 的最终大小。

在实际的运算当中,我们会用到梯度求解,来求出极值点。

python机器学习之神经网络实现

总结一下来说,我们使用向前推进来理顺神经网络做到回归分类等模型。而向后推进来计算他的损失函数,使得参数W有一个最优解。

当然,和线性回归等模型相类似的是,我们也可以加上正则化的项来对W参数进行约束,以免使得模型的偏差太小,而导致在测试集的表现不佳。

python机器学习之神经网络实现

python机器学习之神经网络实现

Python 的实现:

使用了KERAS的库

解决线性回归: 

model.add(Dense(1, input_dim=n_features, activation='linear', use_bias=True))

# Use mean squared error for the loss metric and use the ADAM backprop algorithm
model.compile(loss='mean_squared_error', optimizer='adam')

# Train the network (learn the weights)
# We need to convert from DataFrame to NumpyArray
history = model.fit(X_train.values, y_train.values, epochs=100, 
     batch_size=1, verbose=2, validation_split=0)

解决多重分类问题: 

# create model
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=n_features))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
# Softmax output layer
model.add(Dense(7, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(X_train.values, y_train.values, epochs=20, batch_size=16)

y_pred = model.predict(X_test.values)

y_te = np.argmax(y_test.values, axis = 1)
y_pr = np.argmax(y_pred, axis = 1)

print(np.unique(y_pr))

print(classification_report(y_te, y_pr))

print(confusion_matrix(y_te, y_pr))

当我们选取最优参数时候,有很多种解决的途径。这里就介绍一种是gridsearchcv的方法,这是一种暴力检索的方法,遍历所有的设定参数来求得最优参数。

from sklearn.model_selection import GridSearchCV

def create_model(optimizer='rmsprop'):
 model = Sequential()
 model.add(Dense(64, activation='relu', input_dim=n_features))
 model.add(Dropout(0.5))
 model.add(Dense(64, activation='relu'))
 model.add(Dropout(0.5))
 model.add(Dense(7, activation='softmax'))
 model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
 
 return model

model = KerasClassifier(build_fn=create_model, verbose=0)

optimizers = ['rmsprop']
epochs = [5, 10, 15]
batches = [128]


param_grid = dict(optimizer=optimizers, epochs=epochs, batch_size=batches, verbose=['2'])
grid = GridSearchCV(estimator=model, param_grid=param_grid)

grid.fit(X_train.values, y_train.values)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用实例分析Python中method的参数传递过程
Apr 02 Python
Python中map和列表推导效率比较实例分析
Jun 17 Python
python中的lambda表达式用法详解
Jun 22 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
Python之web模板应用
Dec 26 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
Python 实现数据结构中的的栈队列
May 16 Python
简单分析python的类变量、实例变量
Aug 23 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
python简单实现插入排序实例代码
Dec 16 Python
python 获取计算机的网卡信息
Feb 18 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 #Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 #Python
解决PyCharm import torch包失败的问题
Oct 13 #Python
python3+requests接口自动化session操作方法
Oct 13 #Python
解决pycharm无法识别本地site-packages的问题
Oct 13 #Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 #Python
python中单例常用的几种实现方法总结
Oct 13 #Python
You might like
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
Javascript 构造函数 实例分析
2008/11/26 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
Node.js文件操作详解
2014/08/16 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
分享python数据统计的一些小技巧
2016/07/21 Python
基于Python的接口测试框架实例
2016/11/04 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
python selenium操作cookie的实现
2020/03/18 Python
python logging.info在终端没输出的解决
2020/05/12 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
岗位廉政承诺书
2014/03/27 职场文书
操行评语大全
2014/04/30 职场文书
学雷锋标语
2014/06/25 职场文书
授权委托书范文
2014/07/31 职场文书
党的群众路线调研报告
2014/11/03 职场文书
2014年村官工作总结
2014/11/24 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python
Java 多态分析
2022/04/26 Java/Android