局部加权线性回归函数公式推导(转载)

下面的推导对应<机器学习实战>第八章的P142页

目标函数定义为:

我们的目标是最小化cost function:

换成线性代数的表述方式:

是mxm维的对角矩阵

注意这个地方对角线处,并不是指次数,而是指w的序号.

是mxn维的输入矩阵

是mx1维的结果

是nx1维的参数向量

这里的θ就是书上的w

权重定义为:

参数τ控制权重函数的宽度,τ越大,权重函数越宽:

下面给出matlab代码

clear ;
close all;
x = [1:50].';
y = [4554 3014 2171 1891 1593 1532 1416 1326 1297 1266 ...
	1248 1052 951 936 918 797 743 665 662 652 ...
	629 609 596 590 582 547 486 471 462 435 ...
	424 403 400 386 386 384 384 383 370 365 ...
	360 358 354 347 320 319 318 311 307 290 ].';
 
m = length(y); % store the number of training examples
x = [ ones(m,1) x]; % Add a column of ones to x
n = size(x,2); % number of features
theta_vec = inv(x'*x)*x'*y;
tau = [1 10 25 ];
y_est = zeros(length(tau),length(x));
for kk = 1:length(tau)
	for ii = 1:length(x);
		w_ii = exp(-(x(ii,2) - x(:,2)).^2./(2*tau(kk)^2));
		W = diag(w_ii);
		theta_vec = inv(x'*W*x)*x'*W*y;
		y_est(kk, ii) = x(ii,:)*theta_vec;
	end
end
 
figure;
plot(x(:,2),y,'ks-'); hold on
plot(x(:,2),y_est(1,:),'bp-');
plot(x(:,2),y_est(2,:),'rx-');
plot(x(:,2),y_est(3,:),'go-');
legend('measured', 'predicted, tau=1', 'predicted, tau=10','predicted, tau=25');
grid on;
xlabel('Page index, x');
ylabel('Page views, y');
title('Measured and predicted page views with weighted least squares');

所以我们有这样的更新方式:

LWR算法是一个non-parametric(非参数)学习算法,而线性回归则是一个parametric(参数)学习算法。所谓参数学习算法它有固定的明确的参数,参数一旦确定,就不会改变了,我们不需要在保留训练集中的训练样本。而非参数学习算法,每进行一次预测,就需要重新学习一组,是变化的,所以需要一直保留训练样本。也就是说,当训练集的容量较大时,非参数学习算法需要占用更多的存储空间,计算速度也较慢。

局部权重回归与线性回归的区别可以通过下图来展示:

左边是线性回归,右边是局部权重回归

猜你喜欢

转载自blog.csdn.net/appleyuchi/article/details/82633155
今日推荐