首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特征缩放的矢量化

特征缩放的矢量化
EN

Stack Overflow用户
提问于 2017-05-09 07:20:30
回答 3查看 4K关注 0票数 2

我想用2列来标度矩阵(X)。我使用的是平均归一化,我用Octave写了以下几行:

代码语言:javascript
复制
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。

我不得不不使用zscore(),这就是问题所在。

抽样数据如下:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-09 23:30:57

你可以简单地做:

代码语言:javascript
复制
X_norm = (X .- mean(X,1)) ./ std(X,0,1);
票数 5
EN

Stack Overflow用户

发布于 2017-12-27 22:52:20

在交叉验证过程中,面临着零分割问题。这对我有用。

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2021-04-14 03:31:33

我认为您可以为N个特性的大小应用for循环。

代码语言:javascript
复制
X_norm = X;
mu = zeros(1, size(X, 2));
sigma = zeros(1, size(X, 2));

for iter = 1:num_iters;
  mu(1,iter) = mean(X_norm(:,iter)); 
  X_norm(:,iter) = X_norm(:,iter) .- mu(1,iter);
  
  sigma(1,iter) = std(X_norm(:,iter));  
  X_norm(:,iter) = X_norm(:,iter) ./ mu(1,iter); 
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43863576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档