『壹』 bp神經網路為什麼可以擬合任意非線性函數
樣本變數不需要那麼多,因為神經網路的信息存儲能力有限,過多的樣本會造成一些有用的信息被丟棄。如果樣本數量過多,應增加隱層節點數或隱層數目,才能增強學習能力。一、隱層數一般認為,增加隱層數可以降低網路誤差(也有文獻認為不一定能有效降低),提高精度,但也使網路復雜化,從而增加了網路的訓練時間和出現「過擬合」的傾向。一般來講應設計神經網路應優先考慮3層網路(即有1個隱層)。一般地,靠增加隱層節點數來獲得較低的誤差,其訓練效果要比增加隱層數更容易實現。對於沒有隱層的神經網路模型,實際上就是一個線性或非線性(取決於輸出層採用線性或非線性轉換函數型式)回歸模型。因此,一般認為,應將不含隱層的網路模型歸入回歸分析中,技術已很成熟,沒有必要在神經網路理論中再討論之。二、隱層節點數在BP 網路中,隱層節點數的選擇非常重要,它不僅對建立的神經網路模型的性能影響很大,而且是訓練時出現「過擬合」的直接原因,但是目前理論上還沒有一種科學的和普遍的確定方法。 目前多數文獻中提出的確定隱層節點數的計算公式都是針對訓練樣本任意多的情況,而且多數是針對最不利的情況,一般工程實踐中很難滿足,不宜採用。事實上,各種計算公式得到的隱層節點數有時相差幾倍甚至上百倍。為盡可能避免訓練時出現「過擬合」現象,保證足夠高的網路性能和泛化能力,確定隱層節點數的最基本原則是:在滿足精度要求的前提下取盡可能緊湊的結構,即取盡可能少的隱層節點數。研究表明,隱層節點數不僅與輸入/輸出層的節點數有關,更與需解決的問題的復雜程度和轉換函數的型式以及樣本數據的特性等因素有關。
『貳』 什麼演算法可以防止bp神經網路過擬合
你好復,遺傳演算法在一定程制度上可以防止過擬合。 遺傳演算法主要是針對神經網路的優化的。他是通過交叉和突變來實現對神經網路的優化。 過擬合其實是說模型太過嚴格,泛化不夠。容錯性不夠好。 因為遺傳演算法通過交叉和突變,他可以提升模型的泛化能力。
『叄』 BP神經網路可以用於擬合函數嗎
可以。
既然是函數擬合,那麼事先就已經有函數表達式了。擬合的只是函數表達式中未知的參數。用神經網路對函數進行擬合,輸出的就是未知參數的高精近似值。
人工神經網路就是模擬人思維的第二種方式。這是一個非線性動力學系統,其特色在於信息的分布式存儲和並行協同處理。雖然單個神經元的結構極其簡單,功能有限,但大量神經元構成的網路系統所能實現的行為卻是極其豐富多彩的。
(3)bp神經網路不會過擬合擴展閱讀:
如果待定函數是線性,就叫線性擬合或者線性回歸(主要在統計中),否則叫作非線性擬合或者非線性回歸。表達式也可以是分段函數,這種情況下叫作樣條擬合。
一組觀測結果的數字統計與相應數值組的吻合。形象的說,擬合就是把平面上一系列的點,用一條光滑的曲線連接起來。因為這條曲線有無數種可能,從而有各種擬合方法。擬合的曲線一般可以用函數表示,根據這個函數的不同有不同的擬合名字。
在MATLAB中可以用polyfit 來擬合多項式。
擬合以及插值還有逼近是數值分析的三大基礎工具,通俗意義上它們的區別在於:擬合是已知點列,從整體上靠近它們;插值是已知點列並且完全經過點列;逼近是已知曲線,或者點列,通過逼近使得構造的函數無限靠近它們。
『肆』 bp神經網路人口預測程序(matlab實現)
x=[54167
55196
56300
57482
58796
60266
61465
62828
64653
65994
67207
66207
65859
67295
69172
70499
72538
74542
76368
78534
80671
82992
85229
87177
89211
90859
92420
93717
94974
96259
97542
98705
100072
101654
103008
104357
105851
107507
109300
111026
112704
114333
115823
117171
118517
119850
121121
122389
123626
124761
125786
126743
127627
128453
129227
129988
130756
131448
132129
132802
134480
135030
135770
136460
137510]';
% 該腳本用來做NAR神經網路預測
% 作者:Macer程
lag=3; % 自回歸階數
iinput=x; % x為原始序列(行向量)
n=length(iinput);
%准備輸入和輸出數據
inputs=zeros(lag,n-lag);
for i=1:n-lag
inputs(:,i)=iinput(i:i+lag-1)';
end
targets=x(lag+1:end);
%創建網路
hiddenLayerSize = 10; %隱藏層神經元個數
net = fitnet(hiddenLayerSize);
% 避免過擬合,劃分訓練,測試和驗證數據的比例
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
%訓練網路
[net,tr] = train(net,inputs,targets);
%% 根據圖表判斷擬合好壞
yn=net(inputs);
errors=targets-yn;
figure, ploterrcorr(errors) %繪制誤差的自相關情況(20lags)
figure, parcorr(errors) %繪制偏相關情況
%[h,pValue,stat,cValue]= lbqtest(errors) %Ljung-Box Q檢驗(20lags)
figure,plotresponse(con2seq(targets),con2seq(yn)) %看預測的趨勢與原趨勢
%figure, ploterrhist(errors) %誤差直方圖
%figure, plotperform(tr) %誤差下降線
%% 下面預測往後預測幾個時間段
fn=7; %預測步數為fn。
f_in=iinput(n-lag+1:end)';
f_out=zeros(1,fn); %預測輸出
% 多步預測時,用下面的循環將網路輸出重新輸入
for i=1:fn
f_out(i)=net(f_in);
f_in=[f_in(2:end);f_out(i)];
end
% 畫出預測圖
figure,plot(1949:2013,iinput,'b',2013:2020,[iinput(end),f_out],'r')
圖1自相關
圖3預測
上面的程序是可以通用的,只要你根據自己需要是可以修改用在其他地方的,基本思想就是用前lag年的人口數來預測下一年的人口,至於lag等於幾你是可以自己改的。還有在對結果好壞的判斷中,僅僅看誤差圖是不夠的,如果是一個好的預測,那麼自相關性圖中除了0階自相關外,其他的自相關系數系數都不應該超過上下置信區間。還有其他的統計量和圖表都都寫在」%「後面了,如果需要,去掉就可用。最後的預測值為f_out,我的預測值為
138701.065269972 139467.632609654 140207.209707364 141210.109373609 141981.285378849 142461.332139592 143056.073139776
『伍』 bp神經網路訓練樣本增加很多,但是隱含層節點數還是不變會不會欠擬合,或者過擬合求大神告知!
學習神經網路這段時間,有一個疑問,BP神經網路中訓練的次數指的網路的迭代次數,如果有a個樣本,每個樣本訓練次數n,則網路一共迭代an次,在n>>a 情況下 , 網路在不停的調整權值,減小誤差,跟樣本數似乎關系不大。而且,a大了的話訓練時間必然會變長。
換一種說法,將你的數據集看成一個固定值, 那麼樣本集與測試集 也可以按照某種規格確定下來如7:3 所以如何看待 樣本集的多少與訓練結果呢? 或者說怎麼使你的網路更加穩定,更加符合你的所需 。
我嘗試從之前的一個例子中看下區別
如何用70行Java代碼實現深度神經網路演算法
作者其實是實現了一個BP神經網路 ,不多說,看最後的例子
一個運用神經網路的例子
最後我們找個簡單例子來看看神經網路神奇的效果。為了方便觀察數據分布,我們選用一個二維坐標的數據,下面共有4個數據,方塊代表數據的類型為1,三角代表數據的類型為0,可以看到屬於方塊類型的數據有(1,2)和(2,1),屬於三角類型的數據有(1,1),(2,2),現在問題是需要在平面上將4個數據分成1和0兩類,並以此來預測新的數據的類型。
圖片描述
我們可以運用邏輯回歸演算法來解決上面的分類問題,但是邏輯回歸得到一個線性的直線做為分界線,可以看到上面的紅線無論怎麼擺放,總是有一個樣本被錯誤地劃分到不同類型中,所以對於上面的數據,僅僅一條直線不能很正確地劃分他們的分類,如果我們運用神經網路演算法,可以得到下圖的分類效果,相當於多條直線求並集來劃分空間,這樣准確性更高。
圖片描述
簡單粗暴,用作者的代碼運行後 訓練5000次 。根據訓練結果來預測一條新數據的分類(3,1)
預測值 (3,1)的結果跟(1,2)(2,1)屬於一類 屬於正方形
這時如果我們去掉 2個樣本,則樣本輸入變成如下
//設置樣本數據,對應上面的4個二維坐標數據 double[][] data = new double[][]{{1,2},{2,2}}; //設置目標數據,對應4個坐標數據的分類 double[][] target = new double[][]{{1,0},{0,1}};
1
2
3
『陸』 如何讓利用神經網路進行預測,怎麼在進行訓練之後,怎麼看出訓練模型的好壞如何進行評判
可以用MATLAB神經抄網路工具箱,先提取樣本,用mapminmax函數歸一化,再newff函數建立網路,設置好訓練參數後,使用train函數訓練,最後用sim函數看預測結果。
在訓練過程中,有一個performance可以觀察,它的訓練目標就是你設置的goal。在訓練過程中,它會自動分出一部分樣本作為validation驗證,可以保證不過擬合。具體要評價效果還是應該看最後預測的精度。
附件是一個BP預測的實例。
『柒』 如何提高pb神經網路分類的准確率
要想提高BP神經網路分類的准確率,關鍵在於提高網路性能,使網路能夠反映數據的內部非線性規律。一般有以下幾種措施:
保證學習樣本質量。網路的輸出結果質量不可能超出原始訓練數據的質量,一定要保證樣本准確、典型、規模足夠大。
選定合適的輸入向量方案。輸入向量的配置方案不是固定的,可以添加自變數,增加因素。
選定適當的隱層節點數。過少學習能力不足,過多可能過擬合並且學習較慢。
調整參數,如學習率、學習目標等。
與其他演算法結合進行改進。如帶動量項的BP演算法、與GA演算法融合的GA-BP演算法等。
效果不理想時,可考慮增加隱層數量。