迴歸模型——線性迴歸

線性迴歸是迴歸模型中最簡單的一種。

        最近在做一個預測指數的項目,整理輸入數據之後,用線性迴歸模型試了一下,總體上效果一般般。

一、 迴歸模型

輸入:

 

其中N爲特徵的維數。

每一維特徵對應一個basis function,記爲

權值:

假設預測目標是輸入特徵向量的基函數的線性組合,則

 

假設預測值y與實際值h之間的噪聲 服從高斯分佈:

此時,maximum likelihood等價於least square error,

 

    誤差平方和爲:

       

    爲了防止出現過擬合,加上正則項:

       

目標函數:

       {E}

       解得,

             

                      

二、 算法實現

以下是用matlab實現的線性迴歸模型代碼:

%load data
    input = load('xxxx');
    
    
  
    [len dim] = size(input);
    
    %取一部分做爲訓練集
    s1 = floor(len*0.8);
    input1 = input(1:s1, :);
    input2 = input(s1+1:len, :);
    
    %計算健康指數
    k = 0.2;
    H = zeros(len, 1);
    H(:, 1) = (1 - k) * (1 - data(:, 3)) + k * data(:, bbb+1);
    H1 = H(1:s1, :);
    H2 = H(s1+1:len, :);
    
    
    
    
    %計算每個特徵的均值和方差
    args = zeros(dim, 2);
    for i = 1 : dim
        factor = input1(:, i);
        args(i, 1) = mean(factor);
        args(i, 2) = var(factor);
    end
    
    %得到PHI矩陣
    PHI = zeros(s1, dim);
    for i = 1:s1
        for j = 1:dim
            PHI(i, j) = Phi(input1(i, j), args(j, 1), args(j, 2));
        end
    end
    
    %計算最後的權值
    lamda = 15;
    I = eye(dim);
    W = (inv(lamda .* I + PHI' * PHI)) * PHI' * H1;
    
    PDICT = zeros(len-s1, 2);
    PDICT(:, 1) = H2(:, 1);
    for i = 1:len-s1
        PDICT(i, 2) = Predict(input2(i, :), W, args);
    end
    
    E = zeros(len-s1, 1);
    E(:, 1) = (PDICT(:, 1) - PDICT(:, 2));
    E(:, 1) = E(:, 1) .* E(:, 1);
    
    Erms = sqrt(sum(E)/(len-s1));


發佈了38 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章