Files
2026-07-13 13:30:25 +08:00

38 lines
818 B
Matlab
Executable File

function model = linReg(X, t, lambda)
% Fit linear regression model y=w'x+w0
% Input:
% X: d x n data
% t: 1 x n response
% lambda: regularization parameter
% Output:
% model: trained model structure
% Written by Mo Chen (sth4nth@gmail.com).
if nargin < 3
lambda = 0;
end
d = size(X,1);
idx = (1:d)';
dg = sub2ind([d,d],idx,idx);
xbar = mean(X,2);
tbar = mean(t,2);
X = bsxfun(@minus,X,xbar);
t = bsxfun(@minus,t,tbar);
XX = X*X';
XX(dg) = XX(dg)+lambda; % 3.54 XX=inv(S)/beta
% w = XX\(X*t');
U = chol(XX);
w = U\(U'\(X*t')); % 3.15 & 3.28
w0 = tbar-dot(w,xbar); % 3.19
model.w = w;
model.w0 = w0;
model.xbar = xbar;
%% for probability prediction
beta = 1/mean((t-w'*X).^2); % 3.21
% alpha = lambda*beta; % lambda=a/b P.153 3.55
% model.alpha = alpha;
model.beta = beta;
model.U = U;