首页 > 代码库 > 机器学习系统设计-读书笔记3
机器学习系统设计-读书笔记3
继续第二篇笔记中的例子。
3.不断的迭代与探索的过程
从上篇的图看到,直线并不能很好的代表week4以后的趋势。既然一阶函数不行,我们试试二阶函数?
f(x)= ax**2 + bx + c
继续使用polyfit这个函数来确定a,b,c的值:
f2p =sp.polyfit(x,y,2) print f2p
上述代码得到了一个数组
[ 1.05322215e-02 -5.26545650e+00 1.97476082e+03],这就是a,b,c分别的值。
f2 = sp.poly1d(f2p) print(error(f2,x,y))
继续计算一下残差平方和是:179983507.878 ,显然要比1次的好。如果阶数越高,效果就越好,我们为什么不进一步增加阶数?
try一下阶数为3,10,100的情况
f3 = sp.poly1d(sp.polyfit(x, y, 3)) f10 = sp.poly1d(sp.polyfit(x, y, 10)) f100 = sp.poly1d(sp.polyfit(x, y, 100)) print ‘d3=‘ ,(error(f3,x,y)) print ‘d10=‘ ,(error(f10,x,y)) print ‘d100=‘ , (error(f100,x,y))
残差平方和结果为:
d3= 139350144.032
d10= 121942326.364
d100= 109452403.459
结果是越来越好了,但是100项式的模型是否真的代表了用户真实行为呢?我们继续把图画出来。
紫色的曲线代表了100阶多项式。看出它的问题了么?抖动的太厉害了!响应了所有数据的要求,但是,里边其实有不少数据算是噪声数据,比如偏离太远的点,没有代表性。这样的拟合被叫做 过度拟合(overfitting),10阶也同样类似的问题(如果数据更多,效果会更加明显)。所以,一味的提高模型的复杂度并不是一个好办法。
问题在哪里?从建模角度似乎遇上了一些瓶颈。我们返回来看数据,我们真的的理解数据了么?
机器学习系统设计-读书笔记3
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。