前面已經敘述了基本的線性回歸,區域性加權線性回歸,以及嶺回歸。其中,區域性加權線性回歸做的工作就是進行了特徵的選擇,選擇的策略是進行區域性的約束;嶺回歸是採用的正則化的方法進行特徵的選擇,使用的是
對於這樣的一種優化問題,其實是很難求解的,因為這樣的優化問題不再是乙個凸優化問題。為了求解這樣的問題,一些近似的優化演算法被採用。或者可以採用一些簡單的方法來近似這樣的優化過程。
前向逐步回歸演算法可以得到與lasso差不多的效果,但是前向逐步回歸更加簡單。這是一種貪心演算法,在每一步儘量減少誤差。
(前向逐步回歸流程)
主程式
[plain]view plain
copy
clear all;
clc;
%% 匯入資料
data = load('abalone.txt');
x = data(:,1:8);
y = data(:,9);
%% 處理資料
ymean = mean(y);
ydeal = y-ymean;
xmean = mean(x);
xvar = var(x,1);
[m,n] = size(x);
xdeal = zeros(m,n);
for i = 1:m
for j = 1:n
xdeal(i,j) = (x(i,j)-xmean(j))/xvar(j);
end
end
%% 訓練
runtime = 5000;%迭代的步數
eps = 0.001;%調整步長
wresult = stagewise(xdeal, ydeal, eps, runtime);
%% 根據wresult畫出收斂曲線
hold on
xaxis = 1:runtime;
for i = 1:n
plot(xaxis, wresult(:,i));
end
前向逐步回歸函式
[plain]view plain
copy
function [ wresult ] = stagewise( x, y, eps, runtime)
[m,n] = size(x);%資料集的大小
wresult = zeros(runtime, n);%最終的結果
w = zeros(n,1);
wmax = zeros(n,1);
for i = 1:runtime
ws = w'%輸出每一次計算出來的權重
lowesterror = inf;%定義最小值
for j = 1:n
for sign = -1:2:1
wtest = w;%初始化
wtest(j) = wtest(j)+eps*sign;%只改變一維變數
ytest = x*wtest;
%求誤差
rsse = rsserror(y, ytest);
if rsse
lowesterror = rsse;
wmax = wtest;
end
end
end
w = wmax;
wresult(i,:) = w;
end
end
誤差函式
[plain]view plain
copy
%% rsserror函式主要是利用均方誤差
function [ error ] = rsserror( y, ytest )
ydis = y-ytest;%誤差
[m,n] = size(ydis);
%求平方
for i = 1:m
ydis(i) = ydis(i)^2;
end
error = sum(ydis);%求列和
機器學習 嶺回歸和LASSO回歸
1.用矩陣表示多元線性回歸 y bx a q b y bx t y bx 達到最小時的b值。也即是殘差平方和最小時。b bi 的值。可以證明b的最小二乘估計 xtx 1xty 其中 xtx 1為廣義逆。1.出現多重共線性2.當n 嶺回歸 ridge regression 先對資料做標準化 b k x...
機器學習 模型泛化(LASSO 回歸)
一 基礎理解 二 lasso 回歸 1 對於嶺回歸 2 對於 lasso 回歸1 模擬資料集 2 使用多項式回歸擬合資料 3 使用 lasso regression 改進演算法模型 4 分析 正則化的程度 擬合曲線的上下抖動幅度 1 使用 ridge 改進的多項式回歸演算法,隨著 的改變,擬合曲線始...
機器學習 嶺回歸和Lasso回歸(4)
任何資料都存在雜訊和多重共線性 如何解決多重共線性 1.演算法角度 正則化 2.資料角度 最有效果 嶺回歸與lasso回歸的出現是為了解決線性回歸出現的過擬合 資料間高度線性相關 以及在通過正規方程方法求解 的過程 現的x轉置乘以x不可逆這兩類問題的,這兩種回歸均通過在損失函式中引入正則化項來達到目...