其实这节课主要还是再将ML Strategy,但是我觉得有几个点很好,总结在这里:
评价模型时:
- 首先有一个对Hypothesis的评价指标,错误率啊,正确率啊,等等。
- 然后肯定也得有train/val/test数据集了。这里是小数据集划分方法60/20/20这种。
- 然后就是训练和cross validation了。
- 诊断bias vs viarance 这个已经说过很多次了。
截个图吧:
learning curve
然后有一个关于learning curve的问题,之前没有说到,这个还是很有意思的。
也就是训练错误率和测试错误率关于数据集大小的函数:
在bias比较大的情况下,其实增加数据是不会得到什么增益的。
但是对于Variance比较大的情况,多收集数据就有意义了。
然后几个多项式的改进方法:
收集数据: Fixes high variance
特征少一点: Fixes high variance
特征多点: Fixes high bias
使用高阶特征: Fixes high bias
减少λ: Fixes high bias
增加 λ: Fixes high variance.
这些都很easy了。
对于神经网络,可以按照参数多少来判断,越多就越可能过拟合。
最后一个是train error和val error在不同的正则化参数
λ
λ
下的表现:
Error Analysis
Error Analysis已经是老生常谈了,依旧是分析train error, val error,然后从val set里边取出来一些数据,进行数据分析,分析出来错误的原因及趋势。
Skewed Classes
另外一个是样本不平衡问题,这里就涉及到accuracy,precision/recall的概念了。在另一篇博文里边有更加明确的信息和过程。这里一个示例我觉得挺好的,总结如下:假如一个数据集里边有99.5%是健康人,0.5%是癌症病人。那么假如我
y=1
y
=
1
和
y=0
y
=
0
的准确率都是是99.2%,总体也是99.2%,看上去可能已经很不错了。但是假如我说:干脆,所有人都没有癌症,也就是
y≡0
y
≡
0
那么这样准确率就可以99.5%了,但是这样的分类器好吗?显然我们直观上觉得不太好。但是从准确率上确实还不错啊。所以准确率对于这个skewed classes表现就会很不好。所以要用precision/recall来表征。但是这就是两个参数了。如果我们用算术平均值的话,就会有如下的情况:
显然算法1看上去比较好。但是算法3的算术平均数最大。所以算术平均数会放大那些比较占优的参数,而忽略掉比较劣势的参数。所以用F1 score,调和平均数,这样假如有一个方面很差,那么一下就把劣势放大了。这样可以把劣势更明显的表达出来。这个上边提及的之前的博文也多写过。
数据集大小的作用
之前的一个研究表明:
数据集足够大时,其实各个算法都差不多。这是2001年的时候的结论。这个研究影响太大,以至于大家都觉得谁数据多谁就赢了。
但是有一个先决条件,就是模型足够的复杂,以及数据的feature足够多才行。这个足够多,有一个粗略的判别条件,就是作为一个人,能不能根据这些个feature,来得到一个比较好的结果。比方说房价预测,假如只给一个房屋的大小,那么即使最优秀的房屋经纪人也没法给出一个比较好的预测。这种情况下机器学习通常也没法给一个很好的结果。