线性回归是回归模型中最简单的一种。
最近在做一个预测指数的项目,整理输入数据之后,用线性回归模型试了一下,总体上效果一般般。
一、 回归模型
输入:
其中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));