拓端tecdat|MATLAB中用BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)人體脂肪百分比數(shù)據(jù)
原文鏈接:http://tecdat.cn/?p=22739?
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
這個(gè)例子說(shuō)明了一個(gè)函數(shù)擬合的神經(jīng)網(wǎng)絡(luò)如何根據(jù)測(cè)量結(jié)果來(lái)估計(jì)脂肪百分比(BFP)?。
問(wèn)題:估計(jì)脂肪百分比
在這個(gè)例子中,我們?cè)噲D建立一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)估計(jì)一個(gè)人的脂肪百分比,這個(gè)人由13個(gè)物理屬性描述。
年齡
體重
身高
頸圍
胸圍
腹部周長(zhǎng)
臀圍
大腿周長(zhǎng)
膝蓋周長(zhǎng)
踝關(guān)節(jié)周長(zhǎng)
肱二頭肌(伸展)周長(zhǎng)
前臂周長(zhǎng)
腕圍
這是一個(gè)擬合問(wèn)題的例子,其中輸入與相關(guān)的目標(biāo)輸出相匹配,我們希望創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò),它不僅可以估計(jì)已知的目標(biāo),給定已知的輸入,而且還可以泛化,來(lái)準(zhǔn)確估計(jì)未知數(shù)據(jù)的結(jié)果。
為什么是神經(jīng)網(wǎng)絡(luò)?
神經(jīng)網(wǎng)絡(luò)在函數(shù)擬合問(wèn)題上非常出色。一個(gè)有足夠多的元素(稱(chēng)為神經(jīng)元)的神經(jīng)網(wǎng)絡(luò)可以以任意的精度擬合任何數(shù)據(jù)。它們特別適合于解決非線(xiàn)性問(wèn)題。鑒于現(xiàn)實(shí)世界的非線(xiàn)性性質(zhì),如身體脂肪的增加,神經(jīng)網(wǎng)絡(luò)是解決該問(wèn)題的不錯(cuò)方法。
十三個(gè)物理屬性將作為神經(jīng)網(wǎng)絡(luò)的輸入,而體脂百分比將是目標(biāo)。
該網(wǎng)絡(luò)通過(guò)使用已經(jīng)知道體脂百分比的人體數(shù)據(jù)來(lái)建立模型,來(lái)訓(xùn)練它產(chǎn)生目標(biāo)值。
?
準(zhǔn)備數(shù)據(jù)
函數(shù)擬合的數(shù)據(jù)是兩個(gè)矩陣,即輸入矩陣X和目標(biāo)矩陣T。
輸入矩陣的每一列將有13個(gè)元素,代表一個(gè)已知脂肪百分比的身體數(shù)據(jù)。
目標(biāo)矩陣的每一對(duì)應(yīng)列將有一個(gè)元素,代表脂肪百分比。
加載數(shù)據(jù)集后,我們可以查看輸入X和目標(biāo)變量T的大小。
請(qǐng)注意,X和T都有252列。這些代表了252種體質(zhì)(輸入變量)和相關(guān)的體脂百分比(目標(biāo)變量)。
輸入矩陣X有13行,代表13個(gè)屬性。目標(biāo)矩陣T只有一行,因?yàn)閷?duì)于每個(gè)例子我們只有一個(gè)期望的輸出,即脂肪百分比。
size(X)
size(T)

用神經(jīng)網(wǎng)絡(luò)擬合函數(shù)
下一步是創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò),它將學(xué)習(xí)估計(jì)脂肪百分比。
由于神經(jīng)網(wǎng)絡(luò)以隨機(jī)的初始權(quán)重開(kāi)始,這個(gè)例子每次運(yùn)行的結(jié)果都會(huì)略有不同。設(shè)置隨機(jī)種子是為了避免這種隨機(jī)性。
setdemorandstream(82)
兩層(即一個(gè)隱藏層)前饋神經(jīng)網(wǎng)絡(luò)可以擬合任何輸入-輸出關(guān)系,只要隱藏層有足夠的神經(jīng)元。不屬于輸出層的層被稱(chēng)為隱藏層。
?
在這個(gè)例子中,我們將嘗試使用由15個(gè)神經(jīng)元組成的單一隱藏層。一般來(lái)說(shuō),更難的問(wèn)題需要更多的神經(jīng)元,也許需要更多的層。較簡(jiǎn)單的問(wèn)題則需要較少的神經(jīng)元。
輸入和輸出的大小為0,因?yàn)樯窠?jīng)網(wǎng)絡(luò)還沒(méi)有被配置為與我們的輸入和目標(biāo)數(shù)據(jù)相匹配。將在網(wǎng)絡(luò)被訓(xùn)練時(shí)進(jìn)行。
net = fitnet(15);
view(net)

現(xiàn)在,網(wǎng)絡(luò)已經(jīng)準(zhǔn)備好被訓(xùn)練了。樣本被自動(dòng)劃分為訓(xùn)練集、驗(yàn)證集和測(cè)試集。訓(xùn)練集被用來(lái)訓(xùn)練網(wǎng)絡(luò)。只要網(wǎng)絡(luò)在驗(yàn)證集上繼續(xù)改進(jìn),訓(xùn)練就會(huì)繼續(xù)。測(cè)試集提供了一個(gè)完全獨(dú)立的網(wǎng)絡(luò)準(zhǔn)確性的衡量標(biāo)準(zhǔn)。
神經(jīng)網(wǎng)絡(luò)訓(xùn)練工具顯示正在訓(xùn)練的網(wǎng)絡(luò)和用于訓(xùn)練的算法。它還顯示了訓(xùn)練期間的訓(xùn)練狀態(tài),停止訓(xùn)練的標(biāo)準(zhǔn)將以綠色突出顯示。
底部的按鈕可以打開(kāi)有用的圖表,這些圖表可以在訓(xùn)練中和訓(xùn)練后打開(kāi)。算法名稱(chēng)和繪圖按鈕旁邊的鏈接可以打開(kāi)關(guān)于這些主題的文檔。
train(net,X,T);

要看網(wǎng)絡(luò)的性能在訓(xùn)練中是如何提高的,可以點(diǎn)擊訓(xùn)練工具中的 "性能 "按鈕。
性能是以均方誤差來(lái)衡量的,并以對(duì)數(shù)比例顯示。隨著網(wǎng)絡(luò)的訓(xùn)練,誤差迅速減小。訓(xùn)練集、驗(yàn)證集和測(cè)試集的性能分別顯示。最終的網(wǎng)絡(luò)是在驗(yàn)證集上表現(xiàn)最好的網(wǎng)絡(luò)。
?
plotperform(tr)

測(cè)試神經(jīng)網(wǎng)絡(luò)
現(xiàn)在可以測(cè)量訓(xùn)練后的神經(jīng)網(wǎng)絡(luò)的均方誤差與測(cè)試樣本的關(guān)系。我們可以了解該網(wǎng)絡(luò)在應(yīng)用于真實(shí)數(shù)據(jù)時(shí)的表現(xiàn)如何。
mse(net,testT,testY)

另一個(gè)衡量神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)擬合程度的方法是回歸圖。這里的回歸圖是在所有樣本中繪制的。
回歸圖顯示了實(shí)際網(wǎng)絡(luò)輸出與目標(biāo)值的關(guān)系。如果網(wǎng)絡(luò)已經(jīng)學(xué)會(huì)了很好地?cái)M合數(shù)據(jù),那么這個(gè)輸出-目標(biāo)關(guān)系的線(xiàn)性擬合應(yīng)該與圖的左下角和右上角緊密相交。
如果不是這樣,那么進(jìn)一步的訓(xùn)練,或者訓(xùn)練一個(gè)有更多隱藏神經(jīng)元的網(wǎng)絡(luò)。
plot(T,Y)

另一個(gè)衡量神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)的擬合程度的方法是誤差直方圖。這顯示了誤差大小是如何分布的。通常情況下,大多數(shù)誤差接近零,很少有誤差遠(yuǎn)離零。
e = T - Y;
hist(e)

這個(gè)例子說(shuō)明了如何設(shè)計(jì)一個(gè)神經(jīng)網(wǎng)絡(luò),從身體特征來(lái)估計(jì)脂肪百分比。

最受歡迎的見(jiàn)解
1.r語(yǔ)言用神經(jīng)網(wǎng)絡(luò)改進(jìn)nelson-siegel模型擬合收益率曲線(xiàn)分析
2.r語(yǔ)言實(shí)現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)和結(jié)果可視化
3.python用遺傳算法-神經(jīng)網(wǎng)絡(luò)-模糊邏輯控制算法對(duì)樂(lè)透分析
4.用于nlp的python:使用keras的多標(biāo)簽文本lstm神經(jīng)網(wǎng)絡(luò)分類(lèi)
5.用r語(yǔ)言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)股票實(shí)例
6.R語(yǔ)言基于Keras的小數(shù)據(jù)集深度學(xué)習(xí)圖像分類(lèi)
7.用于NLP的seq2seq模型實(shí)例用Keras實(shí)現(xiàn)神經(jīng)機(jī)器翻譯
8.python中基于網(wǎng)格搜索算法優(yōu)化的深度學(xué)習(xí)模型分析糖
9.matlab使用貝葉斯優(yōu)化的深度學(xué)習(xí)