题目的原意是要数数字有多少个圈儿。微博上的@梁斌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

theta = pinv (X' * X) * X' * y;
为什么不化成 theta = pinv(X) * y; ?算出来的结果是一样的
这个是Andrew.Ng ML讲义上的解法,是对cost function求导的结果,应该是inv(X' * X) * X' * y,但有因为features中可能有线性相关的,所以X' * X也可能不可逆,故用pinv。pinv(X) * y的确是等价的。
这是幼儿园的题吗?太难了,初中生都不会……
x为啥只要表示成这个样子...
X的第一列表示什么?
去掉后,theta更符合圈儿的个数。
我求的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
奇怪啊,你用的解法是怎样的呢?