【问题标题】:Feature Normalization in MATLABMATLAB 中的特征归一化
【发布时间】:2021-05-22 14:30:26
【问题描述】:
X_norm = X;
mu = zeros(1, size(X, 2));
sigma = zeros(1, size(X, 2));
for i = 1:2
    mu(1,i) = mean(X,(:,i));
    sigma(1,i) = std(X,0,(:,i));
    col_mu = ones(size(X,1), 1) * mu(:,i)
    X_norm(:,i) = X(:,i) - col_mu
    X_norm(:,i) = X(:,i) * (1/sigma(1,i))
end
end

我正在尝试将特征归一化作为斯坦福 Coursera ML 课程的一部分。当我运行它时,我收到一条错误消息“无效使用运算符”,第 13 行第 23 列。

那个说 (mu(1,i) = mean...

我试图让 mu 的第 i 列成为 X 的第 i 列的平均值。我做错了什么?

【问题讨论】:

  • X 和 (:, i) 之间有一个逗号。
  • mean(X,(:,i));std(X,0,(:,i)); 语法错误。你可能想要mean(X(:,i));std(X(:,i), 0);。这是Matlab。您应该避免循环并使用矩阵代数。
  • 如果 X 的每一列都必须仅使用其自己的值而不是其他列的值进行标准化,我该如何避免循环

标签: matlab machine-learning matrix matrix-multiplication


【解决方案1】:

mean(X,(:,i));std(X,0,(:,i)); 是错误的语法。你可能想要mean(X(:,i));std(X(:,i), 0);。这是MATLAB。您应该避免循环并使用矩阵代数:

X_norm = X;
mu = mean(X);
sigma = std(X, 0);
col_mu = ones(size(X,1), 1) .* mu;
% X_norm = X - col_mu;
X_norm = X .* (1./sigma)

我删除了X_norm(:,i) = X(:,i) - col_mu,因为它被直接覆盖在下一行。

【讨论】:

  • 感谢您的帮助。我知道这是Matlab。我会读。我没有意识到使用 mu = mean(X) 会自动取 X 的列的平均值......为什么不是行?
  • @dgoodie 你使用 IDE 吗?您是否在 IDE 中看到警告和文档?
  • 我正在使用 Matlab Online
  • Matlab 是我所知道的文档最好的编程语言:mathworks.com/help/matlab/ref/… "如果 A 是一个矩阵,那么 mean(A) 返回一个包含每列平均值的行向量。 "
  • @dgoodie 这个网站有一些严格的规则来保持高质量,例如How much research effort is expected of Stack Overflow users? “在 Stack Overflow 上提问应该是您寻找答案过程中的最后一步” 许多用户不赞成在不阅读文档的情况下提问。这使得这个平台对初学者不太友好,但如果你在你的问题上投入一些精力,它是我所知道的最好的平台。
猜你喜欢
  • 2017-10-24
  • 2015-11-23
  • 2016-11-30
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 2020-02-10
相关资源
最近更新 更多