數據分析與挖掘筆記(十一)------ 挖掘建模之人工神經網絡

人工神經網絡是模擬生物神經網絡進行信息處理的一種數學模型。它以對大腦的生理研究成果爲基礎,其目的在於模擬大腦的某些機理與機制,實現一些特點的功能。

 

人工 神經元是人工神經網絡操作的基本信息處理單位。人工神經元的模型如圖5-6所示,它是人工神經網絡的設計基礎。一個人工神經元對輸入信號的輸出爲,其中,公式中各字符的含義如圖5-6所示。

 

 

人工神經網絡的學習也稱爲訓練,指的是神經網絡在受到外部環境的刺激下調整神經網絡的參數,使神經網絡以一種新的方式對外部環境作出反應的一個過程。在分類與預測中,人工神經網絡主要使用有指導的學習方式,即根據給定的訓練樣本,調整人工神經網絡的參數以使網絡輸出接近於已知的樣本類標記或其他形式的因變量。

 

激活函數主要形式:

 

使用人工神經網絡模型需要確定網絡連接的拓撲結構、神經元的特徵和學習規則等。目前,已有近40種人工神經網絡模型,常用的用來實現分類和預測的人工神經網絡算法如下表;

 

算法名稱

算法描述

BP神經網絡

是一種按誤差逆傳播算法訓練的多層前饋網絡,學習算法是學習規則,是目前硬用最廣泛的神經網絡模型之一。

LM神經網絡

是基於梯度下降和牛頓法結合的多層前饋網絡,特點:迭代次數少,收斂速度快,精確度高。

RBF徑向基神經網絡

RBF網絡能夠以任意精度逼近任意連續函數,從輸入層到隱含層的變換是非線性的,而從隱含層到輸出層的變換是線性的,特別適合於解決分類問題。

FNN模糊神經網絡

FNN模糊神經網絡是具有模糊權係數或者輸入信號是模糊量的神經網絡,是模糊系統與神經網絡相結合的產物,它匯聚了神經網絡與模糊系統的優點,集聯想、識別、自適應及模糊信息處理於一體。

CMDH神經網絡

CMDH神經網絡也稱爲多項式網絡,它是前饋神經網絡中常用的一種用於預測的神經網絡。它的特點是網絡結構不固定,而且在訓練過程中可以不斷改變。

ANFIS自適應神經網絡

神經網絡鑲嵌在一個全部模糊的結構之中,在不知不覺中向訓練數據學習,自動產生、修正並高度概括出最佳的輸入與輸出變量的隸屬函數以及模糊規則;另外,神經網絡的各層結構與參數也都具有了明確的、易於理解的物理意義。

BP算法只用到均方誤差函數對權值和閾值的一階導數(梯度)信息,使得算法存在收斂速度緩慢、易陷入局部極小等缺陷。爲了解決這一問題,Hinton等人於2006年提出了非監督貪心逐層訓練算法,爲解決深層結構相關的優化難題帶來希望,並以此爲基礎發展成爲“深度學習”算法。

 

實例:

神經網絡算法預測銷量高低

#-*- coding: utf-8 -*-
#使用神經網絡算法預測銷量高低

import pandas as pd


#參數初始化
inputfile = '../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].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')
#編譯模型。由於我們做的是二元分類,所以我們指定損失函數爲binary_crossentropy,以及模式爲binary
#另外常見的損失函數還有mean_squared_error、categorical_crossentropy等,請閱讀幫助文件。
#求解方法我們指定用adam,還有sgd、rmsprop等可選


model.fit(x, y, nb_epoch = 1000, batch_size = 10) #訓練模型,學習一千次
yp = model.predict_classes(x).reshape(len(y)) #分類預測


from cm_plot import * #導入自行編寫的混淆矩陣可視化函數
cm_plot(y,yp).show() #顯示混淆矩陣可視化結果

 

運行結果:混淆矩陣圖

從圖中可以看出,檢測樣本爲34個,預測正確的個數爲26個,預測準確率爲76.4%,預測準確率較低的原因是神經網絡訓練時需要較多樣本,而這裏的訓練數據比較少。

需要指出的是,此案例比較簡單,我們並沒有考慮擬合的問題,事實上,神經網絡的擬合能力是很強的,容易出現過擬合現象。跟傳統的添加“懲罰項”的做法不同,目前神經網絡(尤其是深度神經網絡)中流行的防止過擬合的方法是隨機的讓部分神經網絡節點進行休眠。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章