学习总结:机器学习(五)

局部权值线性回归(Locally weighted linear regression)

  局部权值线性回归思想来自于过拟合、欠拟合等概念。

  如下图,

  学习总结:机器学习(五)

  第一幅图中是用直线去拟合数据点,它没有反映出数据点的足够多的特征或规律,这种现象称为欠拟合;第三幅图中是用五次曲线拟合数据点,虽然图中的每一个点都落在了曲线上,但不能正确反应出数据的趋势,这种现象称为过拟合。

  局部权值线性回归思想在于,数据点过多时,线性回归不足以在全局范围内反映数据点足够多的特征或规律,但是在局部范围内可以达到拟合效果。所以,对于样本输出的预测,可以只考虑样本局部范围内的训练数据。可以通过对准则函数增加权值的方式,来加以限制。

  局部权值线性回归算法:

  1.寻找θ,使得学习总结:机器学习(五)最小化;

  2.输出θTx.

  与线性回归不同的是,加入了非负的权值w(i),定义如下:

            学习总结:机器学习(五)

  w的定义有些类似于高斯分布,但它并不是随机变量的分布,τ称之为带宽。

  局部权值线性回归是“非参数”型算法。所谓“非参数”型算法,Andrew N.g.的讲义中的解释是:随着训练集大小的增加,为了表示出假设h,我们所要做的工作量也线性地增加。我的理解是:对于线性回归来说,主要是为了计算出参数θ,然后保持θ基本不变;而对于局部权值线性回归来说,每一个需要预测的样本,其θ值都可能不同,不需要保持θ的值,不依赖于参数θ。

  matlab实现局部加权线性回归:

%LWR function is used to model locally weighted linear regression
%algorithm.
%Feature is the feature of preditcting sample.
%predictVal is the output value.
function [predictVal] = lwr(feature)
x = (1:20)';
y = (11:30)';
z = x.^2 + y.^2;
num = size(x,1);
features = [ones(num,1) x y];
feature = [1 feature];
length = size(features,2);
theta = zeros(length,1);
alpha = 0.005/(num*10);
T = 0.1;
w = ones(num,1);
for i = 1:num
w(i) = exp(-sum((features(i,:) - feature).^2)/(2*T^2));
end
w = w/sum(w);
for i = 1:100000;
delta = z - features*theta;
% costvalue = delta'*delta;
% if costvalue < 1e-10;
% display 'break the if condition'
% break;
% end
theta(1) = theta(1) + alpha*sum(w.*delta.*features(:,1));
theta(2) = theta(2) + alpha*sum(w.*delta.*features(:,2));
theta(3) = theta(3) + alpha*sum(w.*delta.*features(:,3));
end
predictVal = feature*theta;

转载于:https://www.cnblogs.com/guobiao819/p/lwr.html