机器学习系统设计
1.导入
以垃圾邮件分类器为例子,当我们想要做一个能够区分邮件是否为垃圾邮件的项目的时候,首先在大量垃圾邮件中选出出现频次较高的10000-50000词作为词汇表,并为其设置特征,在对邮件分析的时候输出该邮件的特征判断是否为垃圾邮件。
假设词汇表为(word1,word2,word3),其中word1和word3是垃圾邮件中出现频次很高的,word2是非垃圾邮件中常出现的。比如一个邮件的输出为(1,0,1),意思就是邮件中含有word1、word3,没有word2,那么可以判定为垃圾邮件。
注意词汇表中不止包含垃圾邮件中的词还包括非垃圾邮件出现的词,上述例子中word2就是从非垃圾邮件中选取的。
上面的例子中的word1、word2、word3都是随便起的名字不具有任何含义!!
如果还没有理解的可以看看这个视频。
2.误差分析(Error Analysis)
依旧以垃圾邮件分类器为例子,当我们算法将一些垃圾邮件、非垃圾邮件错误分类时,我们可以把这些被误分的邮件统计起来看看有什么共同的特征和规律,以此来设计新特征、改进算法。
为了方便统计引入数值评价指标“误差率”,这个大家应该都懂。
在验证集上做误差分析,不要在测试集上做误差分析。
在我们新开始一个机器学习问题时,可以先快速设计一个简单粗暴的算法,随后通过误差分析找到算法的缺陷以及优化的方向。
不用学习曲线是因为最开始的时候样本少画不出来。
3.不对称性分类的误差评估
偏斜类(skewed classes):正负样本比例非常大。
当遇到偏斜类问题时,比如说一个二元分类问题的训练集中一共有10个样本,其中9个y=1,只有1个y=0,这时就会产生只要我们的算法一直输出y=1误差率就会很小,但是这并不能泛化,所以要用其他的数值评价指标来评判算法是否足够优秀。
继续以垃圾邮件分类器为例子。
查准率(Precision):对于所有我们预测是垃圾邮件的邮件中有多大比例是真的是垃圾邮件, 查准率 = 预测结果为垃圾邮件的邮件中真的是垃圾邮件的邮件数量 预测出的垃圾邮件数量 查准率=\frac{预测结果为垃圾邮件的邮件中真的是垃圾邮件的邮件数量}{预测出的垃圾邮件数量} 查准率=预测出的垃圾邮件数量预测结果为垃圾邮件的邮件中真的是垃圾邮件的邮件数量。查准率越高越好。
召回率(Recall):对于所有的垃圾邮件我们有多大比例能发现他是垃圾邮件, 召回率 = 预测值和真实值都是垃圾邮件的邮件数量 真正的垃圾邮件数量 召回率=\frac{预测值和真实值都是垃圾邮件的邮件数量}{真正的垃圾邮件数量} 召回率=真正的垃圾邮件数量预测值和真实值都是垃圾邮件的邮件数量。同样召回率也是越高越好。
拥有高查准率和高召回率的模型是一个好的模型,但是根据查准率和召回率的定义我们可以看出二者是此消彼长的关系,所以选择一个好的模型需要另一个数值评价指标对查准率和召回率进行平衡取舍。以P代表查准率、R代表召回率,故而定义F值或 F 1 F_1 F1值:
F = 2 P R P + R F=2\frac{PR}{P+R} F=2P+RPR
F值越高的越好。
除此之外,在我们定义机器学习问题的特征时,可以将心比心,自己尝试一下假如自己是专业人士,用自己所给定的特征能否推出结果。比如假设你是一个卖房子的,只设计了一个房子面积的特征,并没有给其他的特征比如地段、是否精装、房型等等,要输出价格,显然是不能推出的,所以同样的机器学习算法也不能输出对应的假设。