您的位置:首页 > 其它

机器学习-多变量的线性回归模型与实现笔记

2015-11-04 00:06 281 查看

0x00 代价函数

多变量的回归问题中,feature有多个,比如房屋价格预测问题,feature除了房屋的面积,还可能有房子的间数、房子的地段、房子的层数等因素所影响。在多变量回归问题中,我们的假设函数如下:



在此基础上,计算回归的代价函数为:



根据上面的公式,在Octave中,一行代码即可实现:

function J = computeCost(X, y, theta)
m = length(y); % 训练集数目
J = 1/(2*m) * sum((X*theta - y) .^ 2) ;  % 代价函数
end


X为feature的矩阵(房子的面积、层面等),y为训练集结果矩阵(即训练集中的真实房价),theta为回归的参数(有多个)。

0x01 梯度下降

我们知道,对于回归模型,其核心是在求合适的各个theta参数。

在求回归模型中合适的参数时,通常使用梯度下降算法,公式如下:



这里需要注意的是,对于n+1个参数,theta1为1是恒定的,不用处理,其余n个参数进行
同时更新


对于单变量的梯度下降算法,Octave代码如下:

function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters,
% 同步更新
t1 = theta(1) - alpha * (1/m) * sum((X*theta - y));
t2 = theta(2) - alpha * (1/m) * sum((X*theta - y) .* X(:,2)) ;
theta(1) = t1 ;
theta(2) = t2 ;
J_history(iter) = computeCost(X, y, theta);
end;
end;


在求
theta(1)
theta(2)
时,使用了两个
temp
变量,是为了对两个theta的值进行同时更新操作(先更新后赋值)。

在多变量的梯度下降算法实现中,只需要同时更新各个theta即可:

function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);

for iter = 1:num_iters
temp = zeros(size(theta,1), 1);
% 同时更新theta值
for i=1:size(theta,1),
temp(i) = theta(i) - alpha * (1/m) * sum((X*theta - y).* X(:,i)) ;
end;

% 更新之后进行赋值操作
for i=1:size(theta,1),
theta(i) = temp(i);
end;
J_history(iter) = computeCostMulti(X, y, theta);
end
end


0x02 验证模型



这里举出单变量拟合的例子,对于多变量回归,其实是一回事儿。可以看到,经过算法运行,求取了合适的参数组合,图中的蓝色直线即拟合的结果。

右图即代价函数的等高线,上的点是最终的minJ取值。

综上所述,对于多变量回归问题,我们的处理思路是寻找feature,求出假设函数,求出代价函数,在代价函数基础上利用梯度下降算法,最后验证模型的效果。实际上,在机器学习算法的逻辑回归模型中,也是这个过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: