• 机器学习算法实现——线性回归


      大体上是Ng课week2的编程作业总结,作业中给出了实现非常好(主要是正常人都能看得懂。。)的linear regression比较完整的代码。

      因为是在MATLAB/Octave环境下编程,要面对的最大的一个问题同时也是这类数学语言最大的优点就是将数据的处理全都转换成矩阵形式,即Ng所说的Vectorization,这样似乎就和传统的高级语言编程思维上有所不同,一开始这点是要注意的。本文就挑一些重点函数的实现进行讲解。


      (一)CostFunction

      即在MATLAB中给出X,y和一个theta向量,返回J函数的值。

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

      此处X为m*n的矩阵,m为training set的个数,n为我们用来进行预测的属性个数;y是m*1矩阵,即trainning set一开始给定的原始正确预测数据。

      一开始实现的时候看到累加的第一反应就是用for。。。结果还忘写end,找了好久才发现错误,后来用矩阵表示一行代码就出来了。


      (二)Gradient Descend

      

    function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
    for iter = 1:num_iters
          theta = theta - alpha * 1/m * X'*(X*theta-y);
          J_history(iter) = computeCostMulti(X, y, theta);
    end

      关于核心功能行的代码没什么好说的,就是按照公式然后写成矩阵的表达形式即可。倒是想着重说一下J_history这个矩阵,或者说,向量。它的概念很好理解,其实就是一个J和iterations的函数。每次迭代都通过前面提到costFunction来计算J的值,然后存起来,这些数据在稍后用来画图的时候会很有用。


      (三)feature normalize

    function [X_norm, mu, sigma] = featureNormalize(X)
    mu = mean(X);
    sigma = std(X);
    X_norm -= mu;
    X_norm ./= sigma;

      就是一些基础的矩阵运算,分别求出每个属性的mean和sigma,然后保存起来,返回去,并对X做好相应的修改。

      此处注意在用feature normalize求得的theta,在稍后带入新的数据进行预测时,还是要对新数据进行feature normalize的。

  • 相关阅读:
    【bzoj2733】[HNOI2012]永无乡 Treap启发式合并
    【bzoj1465/bzoj1045】糖果传递 数论
    【bzoj2768/bzoj1934】[JLOI2010]冠军调查/[Shoi2007]Vote 善意的投票 最小割
    【bzoj4003】[JLOI2015]城池攻占 可并堆
    【bzoj3011】[Usaco2012 Dec]Running Away From the Barn 可并堆
    【bzoj2809】[Apio2012]dispatching 贪心+可并堆
    【bzoj1455】罗马游戏 可并堆+并查集
    DOM的的概述
    wpf多程序集之间共享资源字典--CLR名称空间未定义云云
    WPF的Presenter(ContentPresenter)
  • 原文地址:https://www.cnblogs.com/immortal-worm/p/5919440.html
Copyright © 2020-2023  润新知