使用指定的mu和sigma进行Z分数

时间:2013-09-11 14:43:34

标签: matlab machine-learning normalization scaling

我已将每个列的训练数据矩阵转换为z-scores。我对zscore的输出中的每列都有musigma

我还有另一个矩阵(我的测试数据),我想使用之前步骤中获得的musigma将其转换为 z -scores。我的实现使用for循环,如下所示:

TEST_DATA = zeros(num_rows,num_cols,'double');

for rowIdx = 1:num_rows,
    for colIdx = 1:num_cols,
        TEST_DATA(rowIdx,colIdx)=(input(rowIdx,colIdx)-MU(colIdx))/SIGMA(colIdx);
    end
end

在MATLAB中有更快的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用bsxfun

%// Sample data
matrix = rand(10, 10);
testData = rand(10, 10); 

%// Obtain mu and sigma
mu = mean(matrix, 1);
sigma = std(matrix, [], 1);
%// or use: [Z, mu, sigma] = zscore(matrix);

%// Convert into z-scores using precalculated mu and sigma
C = bsxfun(@rdivide, bsxfun(@minus, testData, mu), sigma);

答案 1 :(得分:0)

zscore的文档解释说它只是减去均值并除以标准差。唯一棘手的部分是将mu / sigma的向量应用于每列。但是如果你不知道如何做这种奇特的方式,那就用for循环来做。为了便于阅读,我会这样离开。如果您需要更快,请查看bsxfun

for ii=1:size(mat,1)
    mat(ii,:) = (mat(ii,:) - mu) ./ sigma;
end