人工神经网络(Artificial Neural Networks, ANN)是模拟生物神经网络进行信息处理的一种数学模型。
激活函数主要分为域值函数(阶梯函数)、分段线性函数、非线性转移函数、Relu函数(计算简单、效果佳)。
人工神经网络的学习也称为训练,指神经网络在收到外部环境的刺激下调整神经网络的参数,使神经网络以一种新的方式对外部环境做出反应的过程。
目前,已有多种人工神经网络模型,常用来分类和预测的算法有BP神经网络(学习算法是学习规则,即误差校正学习算法)
举例:
数据样本如下:
#使用神经网络预测销量高低
import pandas as pd
data = pd.read_excel("sales_data.xls",index_col=u'序号')
data[data==u'好'] = 1
data[data==u'是'] = 1
data[data==u'高'] = 1
data[data!=1] = 0
x = data.iloc[:,:3].as_matrix().astype(int)
y = data.iloc[:,3].as_matrix().astype(int)
from keras.models import Sequential
from keras.layers.core import Dense,Activation
model = Sequential() #建立模型
model.add(Dense(input_dim=3,output_dim=10))
model.add(Activation('relu')) #用relu函数作为激活函数,大幅提高准确度
model.add(Dense(input_dim=10,output_dim=1))
model.add(Activation('sigmoid')) #由于是0-1输出,用sigmoid函数作为激活函数
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
#编译模型。由于二元分类,损失函数为binary_crossentropy。
#另外常用的损失函数还有mean_squared_error、categorical_crossentropy等
#求解方法用adam,还有sgd、rmsprop可选
model.fit(x,y,nb_epoch=1000,batch_size=10) #训练模型,学习一千次
model.predict_classes(x).reshape(len(y)) #分类预测
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()
输出结果如下:
可以看出预测准确率为25/34=73.5%,预测准确率较低,是由于神经网络训练需要较多样本,这里是由于训练数据较少造成的。
另外,神经网络的拟合能力是很强的,容易出现过拟合现象。目前流行的防止过拟合的方法是随机让部分神经网络节点休眠。