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

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,求出假设函数,求出代价函数,在代价函数基础上利用梯度下降算法,最后验证模型的效果。实际上,在机器学习算法的逻辑回归模型中,也是这个过程。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值