具有特征归一化matlab代码的线性回归

时间:2017-05-24 00:50:28

标签: matlab regression normalization linear

我做了两种方式,为什么第一种方式(从mu = mean(X)开始不起作用?有什么区别?

 function [X_norm, mu, sigma] = featureNormalize(X)
    %FEATURENORMALIZE Normalizes the features in X 
    %   FEATURENORMALIZE(X) returns a normalized version of X where
    %   the mean value of each feature is 0 and the standard deviation
    %   is 1. This is often a good preprocessing step to do when
    %   working with learning algorithms.

    % You need to set these values correctly
    X_norm = X;
    mu = zeros(1, size(X, 2));
    sigma = zeros(1, size(X, 2));

    % ====================== YOUR CODE HERE ======================
    % Instructions: First, for each feature dimension, compute the mean
    %               of the feature and subtract it from the dataset,
    %               storing the mean value in mu. Next, compute the 
    %               standard deviation of each feature and divide
    %               each feature by it's standard deviation, storing
    %               the standard deviation in sigma. 
    %
    %               Note that X is a matrix where each column is a 
    %               feature and each row is an example. You need 
    %               to perform the normalization separately for 
    %               each feature. 
    %
    % Hint: You might find the 'mean' and 'std' functions useful.
    %       

    %mu=mean(X)
    %X_norm=X-mu;
    %sigma=std(X_norm)
    %X_norm(1)=X_norm(1)/sigma(1)
    %X_norm(2)=X_norm(2)/sigma(2)



    % Calculates mean and std dev for each feature
    for i=1:size(mu,2)
        mu(1,i) = mean(X(:,i)); 
        sigma(1,i) = std(X(:,i));
        X_norm(:,i) = (X(:,i)-mu(1,i))/sigma(1,i);
    end







    % ============================================================

    end

2 个答案:

答案 0 :(得分:1)

原因是你试图从矩阵中减去一个向量。 mean(X)为您提供一个向量,其中X的列中的平均值为[1xC],而X为维度[RxC]。在oneliner中解决这个问题的方法是

 X = (X-repmat(mean(X,1),size(X,1),1))./repmat(std(X,0,1),size(X,1),1)

答案 1 :(得分:0)

您需要遍历X。您可以使用normalize(X)

进一步验证上述代码的输出
for i = 1: size(X, 2)
    mu = mean(X(:, i));
    sigma = std(X(:, i));
    X_norm(:, i) = (X(:, i) - mu) ./ sigma
end