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 Queue模块详解
Nov 30 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
基于python时间处理方法(详解)
Aug 14 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
numpy.transpose()实现数组的转置例子
Dec 02 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
Python验证码截取识别代码实例
May 16 Python
python 爬取豆瓣网页的示例
Apr 13 Python
python基于tkinter制作m3u8视频下载工具
Apr 24 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
PHP安全技术之 实现php基本安全
2010/09/04 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
PHP异常处理Exception类
2015/12/11 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
python计算书页码的统计数字问题实例
2014/09/26 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
python help函数实例用法
2020/12/06 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
Champion官网:美国冠军运动服装
2017/01/25 全球购物
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
护士2015年终工作总结
2015/04/29 职场文书
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android
Vue Element plus使用方法梳理
2022/12/24 Vue.js