数据挖掘之人工神经网络

人工神经网络(Artificial Neural Networks, ANN)是模拟生物神经网络进行信息处理的一种数学模型。

人工神经元模型

激活函数主要分为域值函数(阶梯函数)、分段线性函数、非线性转移函数、Relu函数(计算简单、效果佳)。

人工神经网络的学习也称为训练,指神经网络在收到外部环境的刺激下调整神经网络的参数,使神经网络以一种新的方式对外部环境做出反应的过程。

目前,已有多种人工神经网络模型,常用来分类和预测的算法有BP神经网络(学习算法是\delta学习规则,即误差校正学习算法)

举例:

数据样本如下:

#使用神经网络预测销量高低
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%,预测准确率较低,是由于神经网络训练需要较多样本,这里是由于训练数据较少造成的。

另外,神经网络的拟合能力是很强的,容易出现过拟合现象。目前流行的防止过拟合的方法是随机让部分神经网络节点休眠。

猜你喜欢

转载自blog.csdn.net/zjlamp/article/details/82107611