1. 程式人生 > >Neural Network Toolbox使用筆記1:資料擬合

Neural Network Toolbox使用筆記1:資料擬合

Neural Network Toolbox為各種複雜的非線性系統的建模提供多種函式和應用程式。該工具箱提供各種監督學習模型:前向反饋,徑向基核函式和動態網路等模型。同時也提供自組織圖和競爭層結構(competitive layers)的非監督學習模型。該工具箱具有設計、訓練、視覺化與模擬神經網路的功能。基於該工具箱可以進行資料擬合、模式識別、分類和時間序列預測及其動態系統的建模和控制。

可以利用Parallel Computing Toolbox呼叫多核處理器,GPUs和計算叢集對大資料集在進行訓練和處理階段進行加速。

該工具箱包含在所安裝檔案Toolbox下面的nnet中。可以輸入 在命令列模式下輸入:

help nnet

可以看到所涉及的主題。

nnstart  神經網路啟動GUI的命令

nctool 神經網路分類工具

nftool神經網路的擬合工具

nntraintool 神經網路的訓練工具


第一:特點

1、監督網路包括:正反饋、徑向基、LVQ、時延、非線性自迴歸(NARX)以及層遞迴的神經網路

2、非監督網路包括:自組織圖與競爭層結構;

3、通過預處理和後處理提高網路訓練與評估網路效能;

4、模組化網路用以管理和視覺化任何大小的網路;

5、用於構建和評估神經網路的Simulink模組

第二:資料擬合、分類和模式識別

1、資料擬合

應用舉例:房價均值估計

問題描述:通過建立神經網路以估計社群房價的均值,該社群採用以下13個屬性進行描述

1)每城市的人均犯罪率

2)住宅用地的比例大於25000平方

3)每個城市的非零售商業用地比例

4)1表示Charles river的邊界,0則表示其他的

5)氮氧化合物濃度(1000萬分之1)

6)平均每個寓所的房間數量

7)業主單位是1940年以前的比例

8)距離波士頓就業中心的加權距離

9)徑向高速公路的可訪問性指數

10)每10,000美元全部價值財產稅稅率

11)城市中小學老師的比例

12)1000(Bk - 0.63)^2

13)地位較低的人口百分比

上述輸入是與目標輸出相關聯的。

資料準備

輸入矩陣X和目標輸出矩陣T

X中每一列都是由上述13個特徵屬性所表徵的數字所組成。該已知的13個數值表示當前已知的房價均值。T矩陣的每一列都會有一個元素,用以表示1000年後的房價均值

(the median house price in 1000's of dollars)

資料匯入:

[x,t]=house_dataset;

可以看到X和T都是506列,表示的是506個社群的屬性,即所謂的輸入。這些輸入與房價均值相關聯,即目標。X有13行,即表示13個屬性;目標矩陣T只有1行。

用神經網路進行資料擬合

神經網路是用隨機權值進行初始化的,所以每次執行的結果會有稍微的不一樣。可以通過設定隨機化種子以避免這種隨機性。但是我們在應用過程中是不需要setdemorandstream(491218382)的。

一般越是複雜的問題,所需要設定的神經元數量越多,神經元層數也越多。在此,我們在隱含層設定的是10個神經元。

net = fitnet(10);
view(net)

從下圖可以看出,神經網路的輸入和輸出都是0,這是因為此時的神經網路尚未進行配置,以對輸入資料和輸出資料進行匹配。需要對其進行訓練!

接下來需要做得就是訓練:

資料集一共分成三種:訓練資料集、驗證資料集和測試資料集。用訓練資料集對神經網路進行訓練,用以擬合模型,即用這部分資料來建立模型。 驗證資料集,剛才說training建了一個模型,但是模型的效果僅體現了訓練資料,但不一定適合同類的其他資料,所以需要在建模前會將資料分成兩部分,一部分為訓練資料,一部分為驗證資料(兩部分資料的比例大致為7:3,這取決於所採用的驗證方法);另外,有時候也可能訓練多個模型,但不知哪個模型效能更佳,這時可以將驗證資料輸入不同模型進行比較。所以,訓練過程是需要不斷進行的,直到驗證資料集的效能不再有所提升。 test是測試資料,它跟前兩者的最大區別在於:training和validation資料均是同一時期的資料,如都是5-7月資料,但既然是測試,就需要用跨期的資料來驗證模型穩定性,此時,可採用8月單月資料或9月單月資料對建好的模型進行測試,看效能有沒有下降或偏移。

採用NN Training Tool可以展現被訓練的神經網路和用以訓練的演算法。此外,該工具也展示了訓練的過程中的訓練時態和訓練終止的準則(該準則用綠色進行標註)。在該UI底部的可以繪製。在演算法名稱和繪製按鈕的旁邊都有其對應的連結,以補充對該演算法或者繪製圖像的說明。

可以點選"Performance" 按鈕或者用語句plotperform(tr)來檢視神經網路在訓練過程效能的提升。該效能的測量是基於最小均方誤差,以對數log為底進行顯示。在訓練過程中可以發現該曲線是迅速下降的。且需要注意,多次執行所需要的迭代次數是不一樣的。圖中綠色圈圈所指示的是驗證資料集效能最好的地方。

測試神經網路

通過測量測試資料的最小均方誤差,可以感知經過訓練的神經網路對應真實資料所表現出來的效能。

testX = x(:,tr.testInd);
testT = t(:,tr.testInd);

testY = net(testX);

perf = mse(net,testT,testY)

此外,也可以通過繪製迴歸線來測量神經網路對應資料的擬合程度。下面基於所有樣本繪製迴歸線:

y = net(x);

plotregression(t,y)

若神經網路已經訓練好,可以對資料進行擬合,則在迴歸圖上面線性輸出的目標擬合曲線Fit應該橫貫左下角和右上角。若是沒有達到,則需要繼續進行訓練,或者採用更多神經元的神經網路進行訓練。

第三種測量神經網路對於資料的擬合程度方法是誤差分佈圖。誤差分佈圖可以展示誤差情況,一般多數誤差是靠近0的,只有少數遠離0。



參考文件

http://cn.mathworks.com/products/neural-network/