2017-05-09 99 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;