2017-05-09 95 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))返回我0 0

我不得不不使用zscore(),因此這個問題。

的樣本數據如下:

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;