zoukankan      html  css  js  c++  java
  • 机器学习基础(二)多元线性回归模型 分类: 机器学习 2015-01-17 10:30 103人阅读 评论(0) 收藏

    变量多于两个时,线性回归模型就变成了多元线性回归模型:

    egin{displaymath}h_{	heta}(x) = 	heta^Tx = sum_{i=0}^n 	heta_i x_i, 
onumberend{displaymath}

    代价函数为:

    egin{displaymath}J(	heta)=frac{1}{2m}sum_{i=1}^{m}left(h_{	heta}(x^{(i)})-y^{(i)}
ight)^{2}. 
onumberend{displaymath}

    线性回归模型的训练(就是用梯度下降法求解最小代价函数)需要注意一些问题:

    1.$	heta$的值

    $	heta$1和$	heta$2的值相差太多时,梯度下降法难以收敛

    2.学习速率

    代价函数应该是递减的,如果代价函数不减反增,那么很可能是学习速率太大,跳过了极小值。

    3.代价函数

    代价函数必须是凸的,否则一样存在难以收敛的问题

    4.过拟合

    特征参数选的过多了,也就是n过大,会使模型对于新的数据预测准确性降低。

    解决方法:减少特征参数;合并线性相关项;正则化;


    多元线性回归模型的求解也可以通过Normal Equation的求解(其实就是通过矩阵变换求解线性方程),求解Normal Equation的好处是不用担心特征参数相差过多,不过变量矩阵必须是可逆的。

    egin{displaymath}	heta=left(X^{T}X
ight)^{-1}X^{T}vec{y}.end{displaymath}


    参考练习:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=MachineLearning&doc=exercises/ex3/ex3.html

    x = load('ex3x.dat');
    y = load('ex3y.dat');
    
    x = [ones(size(x,1),1) x];
    %Normal equation
    theta = (x'*x)x'*y
    x1=[1 1650 3];
    y=x1*theta
    
    
    meanx = mean(x);
    sigmax = std(x);
    x(:,2) = (x(:,2)-meanx(2))./sigmax(2);
    x(:,3) = (x(:,3)-meanx(3))./sigmax(3);
    
    figure
    itera_num = 100;
    sample_num = size(x,1);
    alpha = [0.01, 0.03, 0.1, 0.3, 1, 1.3];
    plotstyle = {'b', 'r', 'g', 'k', 'b--', 'r--'};
    
    theta_grad_descent = zeros(size(x(1,:)));
    for alpha_i = 1:length(alpha) 
        theta = zeros(size(x,2),1);
        Jtheta = zeros(itera_num, 1);
        for i = 1:itera_num     
            Jtheta(i) = (1/(2*sample_num)).*(x*theta-y)'*(x*theta-y);
            grad = (1/sample_num).*x'*(x*theta-y);
            theta = theta - alpha(alpha_i).*grad;
        end
        plot(0:49, Jtheta(1:50),char(plotstyle(alpha_i)),'LineWidth', 2)
        hold on
    end
    legend('0.01','0.03','0.1','0.3','1','1.3');
    
      theta = zeros(size(x,2),1);
      for i = 1:itera_num     
           grad = (1/sample_num).*x'*(x*theta-y);
           theta = theta - 1.*grad;
      end
    theta
    x2=[1 1650 3];
    x2(:,2)=x2(:,2)*sigmax(2)+meanx(2);
    x2(:,3)=x2(:,3)*sigmax(3)+meanx(3);
    y=x2*theta
    



    参考资料http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=MachineLearning


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    寒假大数据学习笔记二
    寒假大数据学习笔记一
    关于简单的hive练习
    暑期第六周总结
    暑期第五周总结
    暑期第四周总结
    暑期第三周总结
    MYSQL进阶学习笔记六:MySQL视图的创建,理解及管理!(视频序号:进阶_14,15)
    MYSQL进阶学习笔记五:MySQL函数的创建!(视频序号:进阶_13)
    MYSQL进阶学习笔记四:MySQL存储过程之定义条件,处理过程及存储过程的管理!(视频序号:进阶_11,12)
  • 原文地址:https://www.cnblogs.com/learnordie/p/4656971.html
Copyright © 2011-2022 走看看