人工神经网络(Artificial Neural Networks,ANN)是模拟生物神经网络进行信息处理的一种数学模型。
人工神经元是人工神经网络操作的基本信息处理单位。
一个人工神经元对输入信号X=[x1,x2,…xm]的输出为y为y=f(u+b),其中u为wi*xi所有的和。
**函数主要有以下几种
人工神经网络的学习也称为训练,指的是神经网络在受到外部环境的刺激下调整神经网络的参数,使神经网络以一种新的方式对外部环境做出反应的一个过程。人工神经网络主要使用有指导的学习方式。
delta学习规则
delta学习规则(误差矫正算法)是使用最广泛的一种,误差矫正学习算法根据神经网络的输出误差对神经元的连接强度进行修正,属于有指导学习。
神经网络训练是否完成常用误差函数E来衡量,当误差函数小于某个设定的值时即停止神经网络的训练。
常用的人工神经网络算法
BP神经网络
BP神经网络的学习算法时delta学习规则。
反向传播(Back Propagation,BP)算法的特征是利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反向传播下去,就获得了所有其他各层的误差估计。
BP算法的学习过程有信号的正向传播与误差的逆向传播两个过程组成。正向传播时,输出信号经过隐层的处理后,传向输出层,若输出层节点未能得到期望的输出,则转入误差的逆向传播阶段,将输出误差按某种子形式,通过隐层向输入层返回,然后获得各层单元的参考误差或称误差信号,作为修改各个单元权值的依据,这个过程是周而复始的。权值不断修改的过程,就是网络的学习过程。
代码实现
#使用神经网络算法预测销量高低
import pandas as pd
#参数初始化
inputfile = 'C:/Users/ASUS/Desktop/Python/chapter5/demo/data/sales_data.xls'
data = pd.read_excel(inputfile,index_col=u'序号') #导入数据
#数据是类别标签,将他转为数据
#用1来表示“好”,“是”,“高”,用0来表示“坏”,“否”,“低”
data[data == u'好'] = 1
data[data == u'是'] = 1
data[data == u'高'] = 1
data[data != 1] = 0
x = data.iloc[:,:3].astype(int)
y = data.iloc[:,3].astype(int)
from keras.models import Sequential
from keras.layers.core import Dense,Activation
model = Sequential() #建立模型
model.add(Dense(3,10))
model.add(Activation('relu')) #用relu函数作为**函数,能够大幅度提高准确度
model.add(Dense(10,1))
model.add(Activation('sigmoid')) #由于是0-1输出,用sigmoid函数作为**函数
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', class_mode = 'binary')
model.fit(x,y,nb_epoch=1000,batch_size=10) #训练模型,学习1000次
yp = model.predict_classes(x).reshape(len(y)) #分类预测
#from cm_plot import * #导入自行编写的混淆矩阵可视化函数
def cm_plot(y, yp):
from sklearn.metrics import confusion_matrix #导入混淆矩阵函数
cm = confusion_matrix(y, yp) #混淆矩阵
import matplotlib.pyplot as plt #导入作图库
plt.matshow(cm, cmap=plt.cm.Greens) #画混淆矩阵图,配色风格使用cm.Greens,更多风格请参考官网。
plt.colorbar() #颜色标签
for x in range(len(cm)): #数据标签
for y in range(len(cm)):
plt.annotate(cm[x,y], xy=(x, y), horizontalalignment='center', verticalalignment='center')
plt.ylabel('True label') #坐标轴标签
plt.xlabel('Predicted label') #坐标轴标签
return plt
cm_plot(y,yp).show() #显示混淆矩阵可视化结果
分类与预测算法评价
(1)绝对与相对误差
(2)平均绝对误差
(3)均方误差
(4)均方根误差
(5)平均绝对百分误差
(6)Kappa统计
(7)识别准确度
(8)识别精确率
(9)反馈率
(10)ROC曲线
(11)混淆矩阵
常见的模型评价和在python中的实现
| 模型 | 模型特点 | 位于 |
|---|---|---|
| 逻辑回归 | 比较基础的线性分类模型,很多时候是简单有效的选择 | sklearn.linear_model |
| SVM | 强大的模型,可以用来回归,预测,分类等,而根据选取不同的核函数,模型可以是线性的或者非线性的 | sklearn.svm |
| 决策树 | 基于分类讨论,逐步细化,模型直观易解释 | sklearn.tree |
| 随机森林 | 思想跟决策树类似,精度比决策树高,缺点是由于其随机性,丧失了决策树的可解释性 | sklearn.ensemble |
| 朴素贝叶斯 | 基于概率思想的简单有效的分类模型 | sklearn.naive_bayes |
| 神经网络 | 具有强大的拟合能力 | Keras |