关于第一篇博客(第七章学习)的补充——LM神经网络模型

在之前做上机实验的时候,由于在Python(x,y)的环境下安装theano和keras一直出错,因此,略过了LM神经网络分类模型的训练。这几天还是不甘心,便又进行了尝试,尝试结果已经在第一篇博客中有所补充,在此另外再单出来显得更加清楚些。

1.theano+keras安装

由于网上大部分教程都是推荐Anaconda,博主一狠心便将电脑上所有Python相关的都卸载删除了,打算从头开始,按照教程一步一步来。
主要参考的教程为:
手把手教你搭建深度学习平台——避坑安装theano+CUDA
利用这个教程主要安装了Anaconda和mingw,但是在安装theano的时候还是出现各种各样的问题,即使参照教程中所说将缺的文件包补上,也还是不行,最再次卸载已安装的theano,转而参考以下博客才最终完成:
Win10下keras+theano安装教程(极速)
参照这篇文章中的做法先在命令行中输入pip install keras安装keras,默认会同时安装keras和theano,但这个theano测试依旧会出问题,因此从site-packages中删除这个文件包,然后从其他平台上下载theano安装包,将解压包中的theano文件直接复制到site-packages文件中。(注意:用pip setup.py install方法直接安装还是可能会出问题,但直接复制过来是没有问题的。)
最后虽然theano.test()出来有很多警告,但是输入以下代码:

import theano
print theano.config.blas.ldflags

结果没有报错,说明theano已经安装成功。
然后输入代码:

import keras

这个可能会报错,错误为“没有tensorflow”,这个报错的信息,因为之前在鼓捣的时候博主已经试过无数次了,因此,这一次在安装好keras之后就直接去C:\Users\rt(当前用户名).keras中将keras.json文件中的backend修改为theano,以将默认后端从tensorflow改编为theano(注意1:之所以要修改是因为tensorflow并不适合在Python2.7和Windows环境中。注意2:有些博客中提到将keras文件包中的backend文件夹里的init.py中的backend利用同样的方法修改,经博主尝试,这边改了是没有用的。)
最后,在修改了后端的前提下,本代码的输出结果为:
这里写图片描述
说明keras已经安装成功,可以使用。
至此,困扰了好几天的theano+keras安装终于成功,这还是没有加GPU加速的情况,考虑到电脑配置问题,博主就先不考虑加速了。
主要思考有以下几点:
1.Anaconda看样子的确要比Python(x,y)更为大众,也更能找到一些参考教程,在刚开始学习Python的时候,还是可以考虑使用Anaconda,不过两个都是集成环境,具体到达哪个更好,博主无法做判断,毕竟网上也的确有使用Python(x,y)安装成功的;
2.不要直接用pip安装theano,虽然很多教程都是这样的,但是经博主实验,直接用pip,基本都会缺文件,而补上文件效果也不理想,还是直接从其他平台下资源比较方便;
3.安装过程中,要多方尝试,不同教程提供的不同解决方案可能有一些适用,有一些不适用,要自我选择。
4.theano安装测试,有些教程推荐theano.test(),但博主亲历,theano.test()实在太费时间,博主花了一个晚上还没有测试完,还是直接使用“print theano.config.blas.ldflags”,至少这个没报错,说明安装时成功了的,缺一些东西对于后面使用keras问题不大,因此就可以直接使用keras了。

2.LM神经网络模型Python实现

在好不容易安装完成之后,博主当然立刻把本文中所使用的LM神经网络分类模型给尝试了。
代码如下:

###构建神经网络分类模型
from keras.models import Sequential #导入神经网络初始化函数
from keras.layers.core import Dense, Activation #导入神经网络层函数、激活函数


net = Sequential() #建立神经网络
net.add(Dense(input_dim = 3, output_dim = 10)) #添加输入层(3节点)到隐藏层(10节点)的连接
net.add(Activation('relu')) #隐藏层使用relu激活函数
net.add(Dense(input_dim = 10, output_dim = 1)) #添加隐藏层(10节点)到输出层(1节点)的连接
net.add(Activation('sigmoid')) #输出层使用sigmoid激活函数
net.compile(loss = 'binary_crossentropy', optimizer = 'adam') #编译模型,使用adam方法求解

net.fit(data_train[:,:3], data_train[:,3], nb_epoch=1000, batch_size=1) #训练模型,循环1000次
net.save_weights('C:/Users/Administrator/Desktop/xy/chapter6/net.model') #保存模型

predict_result = net.predict_classes(data_train[:,:3]).reshape(len(data_train)) #预测结果变形

同样绘制混淆矩阵,代码如下:

from cm_plot import * #导入自行编写的混淆矩阵可视化函数
cm_plot(data_train[:,3], predict_result).show() #显示混淆矩阵可视化

混淆矩阵绘制如下图:
关于第一篇博客(第七章学习)的补充——LM神经网络模型_第1张图片
分析同上文中是一样的,此处不再赘述。
最后在同一张图内,画出前文中所用CART决策树模型和这里添加的LM神经网络模型的ROC曲线,以做对比。代码如下:

from sklearn.metrics import roc_curve #导入ROC曲线函数
import matplotlib.pyplot as plt
fpr1, tpr1, thresholds1 = roc_curve(data_test[:,3], net.predict(data_test[:,:3]).reshape(len(data_test)), pos_label=1)
fpr2, tpr2, thresholds2 = roc_curve(data_test[:,3], tree.predict_proba(data_test[:,:3])[:,1], pos_label=1)
plt.plot(fpr1, tpr1, linewidth=2, label = 'ROC of LM', color = 'blue') #作出ROC曲线
plt.plot(fpr2, tpr2, linewidth=2, label = 'ROC of CART', color = 'green') 
plt.xlabel('False Positive Rate') #坐标轴标签
plt.ylabel('True Positive Rate') #坐标轴标签
plt.ylim(0,1.05) #边界范围
plt.xlim(0,1.05) #边界范围
plt.legend(loc=4) #图例
plt.show() #显示作图结果

最后两种模型的ROC曲线如下图所示:
关于第一篇博客(第七章学习)的补充——LM神经网络模型_第2张图片
LM神经网络的ROC曲线完全包住了CART决策树模型的ROC曲线,由此可以看出,LM神经网络模型的性能是比CART决策树模型要好一些的。
至此,关于第一篇博客的上机实验,才算彻底完成。

你可能感兴趣的:(数据分析学习记录)