2017-05-09 14 views
1

2列の行列(X)のスケールを設定したいと考えています。私は、正規化を意味使用しています、と私はオクターブに以下の行を書きました:フィーチャスケーリングのベクトル化

X_norm = X 
mu = mean(X); 
sigma = std(X); 
X_norm(:,1) = (X_norm(:,1) .- mu(:,1)) ./ sigma(:,1); 
X_norm(:,2) = (X_norm(:,2) .- mu(:,2)) ./ sigma(:,2); 

あなたは私はこれらの計算をベクトル化するためにクリーンな方法を教えてくださいことはできますか?

私は zscore(X)から結果と比較することによって、自分のコードをチェックし、彼らが一致した - すなわち sum(X_norm - zscore(X))は、私が質問を zscore()を使用しないように拘束、ひいてはていてくれ0 0

を返しました。

サンプル・データを次のように

2104  3 
1600  3 
2400  3 
1416  2 
3000  4 
1985  4 
1534  3 
1427  3 
1380  3 
1494  3 
1940  4 
2000  3 
1890  3 
4478  5 
1268  3 
2300  4 
1320  2 
1236  3 
2609  4 
3031  4 
1767  3 
1888  2 
1604  3 
1962  4 
3890  3 
1100  3 
1458  3 
2526  3 
2200  3 
2637  3 

答えて

2

は、あなたは、単に行うことができます:クロス検証中

X_norm = (X .- mean(X,1)) ./ std(X,0,1); 
+0

非常に高く評価されています。 –

0

はゼロ除算の問題に直面しました。 これは私のために働いた。

mu = mean(X); 
X_norm = X - mu; 
sigma = std(X); 

% Skip zero div 
sigmaZeroIdx = sigma == 0; 
sigma(1,sigmaZeroIdx) = 1; 

X_norm = X_norm ./ sigma;