01 确定执行的优先级
在实际工作过程中,我们应该优先处理哪些事情
- 以邮件筛选为例,选择邮件的特征向量的方法。通常我们会挑选出在训练集中出现频率最多的n个单词,将其作为特征向量。
- 如何在有限时间里让垃圾邮件分类器具有高精准度和低错误率。
- 用更复杂的特征变量来描述邮件(可以在邮件标题中获取复杂的特征,来捕捉这封邮件的来源,以此判断是否为垃圾邮件)。
- 关注邮件的正文,并构建更复杂的特征。
- 来检测单词是否故意出现拼写的错误
02 误差分析
误差分析就是一种手动地去检查算法所出现的失误的过程,走向最有成效的道路。
- 通过手动检查分类错误的邮件,来看哪一类分类错误的多,哪一个出现错的情况最多,就着重去构造这类特征,加以训练。
- 交叉验证错误率:单一规则的数值评价指标。
- 如果只是手动地去检查看看这些例子表现得好不好,会让你很难去决定到底应不应该做出某种决定;但是通过交叉验证错误率就可以直观的看误差率是变大还是变小了,他能告诉你你的想法是提高了还是降低。
- 一旦有了一个初始的算法实现,我们就能使用一个强有力的工具,来帮助决定下一步应该做什么:
- 看看他所造成的错误:通过误差分析来看看它出现了什么失误,然后以此决定之后的优化方法。
- 如果已经有了一个简单粗暴算法实现,又有一个数值评价指标,这些能帮助来试验新的想法,能够快速观察是否能够提高算法的表现,决定应该包含什么,应该舍弃什么。
03 不对称性分类的误差评估
当有倾斜类问题时,使用准确率与召回率来评价学习算法要比用分类误差或者分类准确率好得多。
- 偏斜类:一个类中的样本数与另一个类中的数据相比多很多(比如,没有肿瘤的比有肿瘤的要多得多)。所以说恒把y=0算出来的误差将会很小,因为有肿瘤的人很少。
- 所以我们想要一个不同的评估度量值:查准率和召回率。其中查准率是指对于所有我们的预测,患有癌症的病人,有多大比率的病人是真正患有癌症的。召回率是指假设如果测试集或者验证集中的病人确实得了癌症,有多大比率正确预测他们得了癌症。也就是如果所有病人都得了癌症,有多少人我们能够正确告诉他们你需要治疗。查准率和召回率越高越好。算法预测值与实际值分别是:1/1(真阳性)、0/0(真阴性)、1/0(假阳性)、0/1(假阴性)。
04 精确度和召回率的权衡
- 在逻辑回归中逻辑输出在0到1之间,其中0.5是个分界值,但是我们想在十分确定得情况下告诉病人真实信息,因此分界值为0.7,甚至0.9(是一个高查准率的模型,但是召回率会变低)。现在我们将分界值设置到较低(有30%几率得病),会得到高召回率,较低得查准率。
- 有没有办法自动选取临界值?或者说有不同的算法,我们如何比较不同的查准率和召回率?或者临界值不同,我们怎样决定哪个更好?–如果使用平均值来计算是不可行的,因为如果假设y = 1和y = 0这两种极端的情况(要么很高召回率、很低查准率,要么很低召回率、很高查准率),他们俩不是好的模型。再此我们使用F值的公式,因为它同时结合召回率及查准率。
- 自动选择临界值来决定你希望预测y=1还是y=0合理的方法:试一试不同的临界值,在检验集进行测试,看哪个临界值可以在检验集得到最高的F。这就是为分类器自动选择临界值的合理方法。
05 机器学习数据
在一定条件下,得到大量的数据并在某种类型的学习算法中进行训练,可以是一种有效的方法来获取具有良好性能的学习算法。这种情况一般出现在这些条件对于你的问题都成立,并且可以得到大量数据。
- 并不是拥有最好算法的人能成功,而是拥有最多数据的人能成功。
- 如果让一个英语好的选词填空,它可以通过特征x让我们能够准确的预测y,相反的,我们让一个房地产专家预测一个房价,而只告诉它房子的面积,其他特征不告诉,他会很难预测。因此如果这个假设正确可以看出大量数据是很有意义的。
- 得到一个低偏差(一个强大的具有很多参数的学习算法,可以很好的拟合复杂的函数)和低方差(如果训练集远大于参数的数量,就不大可能会过拟合)的学习算法(特征值足够并且训练集很庞大)