线性回归求解幼儿园数学题

题目的原意是要数数字有多少个圈儿。微博上的@梁斌penny@ML_120两位讨论说可以用机器学习来求解结果,并且@ML_120同学还特别指出,这应该是一个线性回归可解的问题。我最初觉得数字有几个圈儿,怎么可能让机器学习到这个feature呢?

不过既然两位ML专业人士都认定这是个LR问题,不由得再多去想一想。如果将0-9每个数字出现的次数,作为feature vector(忽略了数字出现的次序),用线性回归的结果会如何呢?遂用octave写了一个小程序来验证一下结果,代码如下:

因为样本和参数规模都很小,故直接用Normal Equation来求解了。结果出乎意料,非常符合。最后theta的结果也非常有趣,0/6/9的权重都接近1,8的权重接近2。

theta(2:11) =
   0.80769
  -0.19231
  -0.19231
  -0.19231
  -0.19231
  -0.19231
   0.80769
  -0.19231
   1.80769
   0.80769

另,还有@TreapDB同学用BPNN实现的一个回归方法(代码在此),结果也非常漂亮 :)

7 thoughts on “线性回归求解幼儿园数学题

  1. theta = pinv (X' * X) * X' * y;
    为什么不化成 theta = pinv(X) * y; ?算出来的结果是一样的

  2. 这个是Andrew.Ng ML讲义上的解法,是对cost function求导的结果,应该是inv(X' * X) * X' * y,但有因为features中可能有线性相关的,所以X' * X也可能不可逆,故用pinv。pinv(X) * y的确是等价的。

  3. 我求的theta:
    1
    -1.11022302462516e-16
    4.16333634234434e-17
    7.21644966006352e-16
    2.22044604925031e-16
    -8.67361737988404e-17
    1.00000000000000
    8.32667268468867e-17
    2.00000000000000
    1.00000000000000

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

To submit your comment, click the image below where it asks you to...
Clickcha - The One-Click Captcha