Stanford ML - Linear regression with multiple variables 多变量线性回归

同样的,先来一些定义:


多变量线性回归方程为:


相应的cost function为:


把这个cost function代入梯度下降公式求偏导得:


多变量线性回归有几点需要注意:

1. Feature scaling: 尽量使得各个变量的值域范围相近,比如 -1 < x < 1,这样可以加速梯度下降算法的收敛。

2. Mean normalization: 均值归一化,也就是使得每个feature的数据集均值大概为0.

3. Learning rate: 每次迭代都得保证J收敛,alpha太小收敛会很慢,太大可能不收敛。可以选择指数公式来尝试,比如0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, ...

根据前两点,training set的x可以转换为 (x-u)/S,这里u是均值,S可以是范围x(max) - x(min),也可以取标准差standard deviation。


对于多项式回归,我们也可以用线性回归的思想来解。这里feature(多项式)形式的选择,对拟合的准确性有较大的影响。


对于线性回归,除了梯度下降算法,还可以用Normal equation(正规方程组)来求解,线性代数的重要性来了 - 两者联系起来,有一种豁然开朗的感觉,大学里的线性代数原来可以干这个,反正现在是一点都不记得了。慢慢拾起来吧。这里的思想呢,就是对各个feature求偏导,然后让它等于0,求解方程组,最终得到theta:


怎么推导出来的,还不懂,后面看了线性代数再回头试着推一下吧。这个用Matlab就很容易算出来了。梯度下降得需要写个循环程序来实现,框架如下:

features = size(X, 2);
for iter = 1:num_iters

    sum = zeros(features, 1);
    for i = 1:m
        delta = X(i,:)*theta - y(i);
        for feature = 1:features
            sum(feature) = sum(feature) + delta*X(i,feature);
        end
    end
    
    sum = sum .* alpha ./ m;
    theta = theta - sum;

    % ============================================================

    % Save the cost J in every iteration    
    J_history(iter) = computeCostMulti(X, y, theta);

end

看起来感觉正规方程组更简单一些。不过它有一个求逆矩阵的步骤,是O(n^3)的时间复杂度,所以n太大,比如大于10000,速度会很慢,这时建议用gradient descent来求解。下图是讲义上的优劣比较:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值