問題:如何在matlab中用簡單點的方法實現矩陣歸一化,并落在0-1之間?
歸一化方法很多,一個比較簡單的(X-min(X(:)))/(max(X(:))-min(X(:)))
關于神經網絡(matlab)歸一化的整理由于采集的各數據單位不一致,因而須對數據進行[-1,1]歸一化處理,歸一化方法主要有如下幾種,供大家參考:(by james)1、線性函數轉換,表達式如下:y=(x-MinValue)/(MaxValue-MinValue)說明:x、y分別為轉換前、后的值,MaxValue、MinValue分別為樣本的最大值和最小值。2、對數函數轉換,表達式如下:y=log10(x)說明:以10為底的對數函數轉換。3、反余切函數轉換,表達式如下:y=atan(x)*2/PI
歸一化是為了加快訓練網絡的收斂性,可以不進行歸一化處理 歸一化的具體作用是歸納統一樣本的統計分布性。歸一化在0-1之間是統計的概率分布,歸一化在-1--+1之間是統計的坐標分布。歸一化有同一、統一和合一的意思。無論是為了建模還是為了計算,首先基本度量單位要統一,神經網絡是以樣本在事件中的統計分別幾率來進行訓練(概率計算)和預測的,歸一化是同一在0-1之間的統計概率分布; 當所有樣本的輸入信號都為正值時,與第一隱含層神經元相連的權值只能同時增加或減小,從而導致學習速度很慢。為了避免出現這種情況,加快網絡學習速度,可以對輸入信號進行歸一化,使得所有樣本的輸入信號其均值接近于0或與其均方差相比很小。
歸一化是因為sigmoid函數的取值是0到1之間的,網絡最后一個節點的輸出也是如此,所以經常要對樣本的輸出歸一化處理。所以這樣做分類的問題時用[0.9 0.1 0.1]就要比用[1 0 0]要好。但是歸一化處理并不總是合適的,根據輸出值的分布情況,標準化等其它統計變換方法有時可能更好。
關于用PRemnmx語句進行歸一化:premnmx語句的語法格式是:[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T)其中P,T分別為原始輸入和輸出數據,minp和maxp分別為P中的最小值和最大值。mint和maxt分別為T的最小值和最大值。premnmx函數用于將網絡的輸入數據或輸出數據進行歸一化,歸一化后的數據將分布在[-1,1]區間內。我們在訓練網絡時如果所用的是經過歸一化的樣本數據,那么以后使用網絡時所用的新數據也應該和樣本數據接受相同的預處理,這就要用到tramnmx。下面介紹tramnmx函數:[Pn]=tramnmx(P,minp,maxp)其中P和Pn分別為變換前、后的輸入數據,maxp和minp分別為premnmx函數找到的最大值和最小值。(by terry2008)matlab中的歸一化處理有三種方法1. premnmx、postmnmx、tramnmx2. restd、poststd、trastd3. 自己編程具體用那種方法就和你的具體問題有關了 (by happy)pm=max(abs(p(i,:))); p(i,:)=p(i,:)/pm;和for i=1:27p(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));end 可以歸一到0 1 之間0.1+(x-min)/(max-min)*(0.9-0.1)其中max和min分別表示樣本最大值和最小值。這個可以歸一到0.1-0.9
新聞熱點
疑難解答