美文网首页
机器学习与深度学习入门(三)

机器学习与深度学习入门(三)

作者: RicardoZiTseng | 来源:发表于2017-02-24 12:03 被阅读0次

    第三篇就应用代码进行实战了,加油 \o^o/

    首先装载数据,并将数据分别存入X与y中,并将数据可视化:

    data=load('ex1data1.txt');
    X = data(:,1); y=data(:,2);
    figure;
    plot(X,y,'rx','MarkerSize',10);
    

    然后对X进行预处理,使其第一列的值都为1

    m=size(X,1);
    X=[ones(m,1) X];
    

    初始化参数值:

    theta=zeros(2,1);
    

    假设我们需要对数据集训练1500次,学习速率设为0.01:

    iterations=1500;
    alpha=0.01;
    

    编写梯度下降算法:

    function [theta,J_history] = gradientDescent(X,y,theta,alpha,iterations)
    m=size(X,1);
    J_history = zeros(iterations,1);
      for i =1:iterations:
        temp1 = theta(1)-(alpha/m)*sum((X*theta-y).*X(:,1));
        temp2 = theta(2)-(alpha/m)*sum((X*theta-y).*X(:,2));
        theta(1) = temp1;
        theta(2) = temp2;
        J_history(i) = computeCost(X,y,theta);
      end
    end
    

    当然我们还需要编写cost function的代码:

    function J = computeCost(X,y,theta)
      m = size(X,1);
      J = (X*theta-y)'*(X*theta-y)/(2*m);
    end
    

    ok,我们完成上述代码之后,开始对训练集应用梯度下降算法进行训练:

    theta = gradientDescent(X,y,theta,alpha,iterations);
    

    我们将计算出来的曲线拟合在图表上:

    hold on;
    plot(X(:,2),X*theta,'-');
    

    正规化方程
    之前提到,如果样本数据值过大的话我们需要对他们进行一些预处理,使他们的值变小,以方便应用梯度下降算法,这里我直接采用正规化方程,来计算他们的拟合曲线。

    载入数据

    data=load('ex1data2.txt');
    X = data(:,1:2);
    y = data(:,3);
    m = size(X,1);
    X = [ones(m,1) X];
    

    编写正规化方程的代码:

    theta = pinv(X'*X)*X'*y;
    

    计算一下此时的代价函数值:

     J = (X*theta-y)'*(X*theta-y)/(2*m);
    

    此时其代价值应该在10的负3次方数量级左右。

    最后
    下一篇教程将开始考虑逻辑回归的问题,公式可能更加复杂,加油~

    相关文章

      网友评论

          本文标题:机器学习与深度学习入门(三)

          本文链接:https://www.haomeiwen.com/subject/ltxbwttx.html