Prioritizing What to Work On确定工作的优先顺序
建立垃圾邮件(拼写错误)和非垃圾邮件的监督学习分类器
如果数据中存在此单词,向量中标为1。如果数据中不存在此单词,向量中标为0。
对于邮件特征,我们经常挑选出频率高的单词,而不是手动根据经验选择100个单词。
减少错误率的方法(不一定都有效,具体问题具体分析)
1.收集大量的数据,也就是样本,来增大我们的训练量。(例如有一个“honeypot project”,故意将假的邮箱地址泄露给发垃圾邮件的人,这样就可以得到大量的垃圾邮件训练样本了)
2.根据邮件来源的路径信息增加更复杂的特征变量或者从邮件的标题或者正文内容构造更复杂的特征变量。
3.构造更加复杂的算法。(例如自动纠正单词拼写的错误)
练习题:
选择(A,D)
解释:
A.我们很难知道哪一种解决办法是最有效的,正确。
B.C.是解决问题的一种方法,但是不一定有效。
D.直觉不是一种好办法,正确。
Error analysis误差分析
1.从一个简单的算法开始,快速实现它,并在早期使用交叉验证数据测试它。
2.绘制学习曲线以决定更多的数据、更多的特性等是否有帮助。
3.手动检查交叉验证集中的中的错误发生的原因,并尝试找出导致大多数错误的趋势。
对于分错的数据,
(1)查看其邮件的类别,明确提高方向。 本例中钓鱼邮件 steal passwords类型邮件很多,故此为努力方向。
(2)查看那个特征可以帮助提高算法准确率。不寻常的标点显示为更多的垃圾邮件。
The importance of numerical evaluation数值评价的重要性
练习题:
选择(C)
为什么选用交叉验证集来计算Jcv(θ),而不是采用测试集来计算Jtest(θ)
C.如果我们通过检查测试集来开发新的特性,那么我们最终可能会选择专门为测试集工作良好的特性,因此jtest(θ)不再是我们如何很好地概括为新示例的一个很好的估计。
我们上面说评估一个模型的好坏,通常使用误差分析可视化,即把预测的准确率(Accuracy)显示出来,其实这样是有缺陷的。这种误差度量又被称为偏斜类(Skewed Classes)问题。
举个例子:假如我们做癌症分析,最后得出该算法只有1%的误差,也就是说准确率达到了99% 。这样看起来99%算是非常高的了,但是我们发现在训练集里面只有0.5%的患者患有癌症,那么这1%的错误率就变得那么准确了。我们再举个极端一点的例子,无论输入是什么,所有预测输出的数据都为0(也就是非癌症),那么我们这里的正确率是99.5%,但是这样的判断标准显然不能体现分类器的性能。
这是因为两者的数据相差非常大,在这里因为癌症的样本非常少,所以导致了预测的结果就会偏向一个极端,我们把这类的情况叫做偏斜类(Skewed Classes)问题。
所以我们需要另一种的评估方法,其中一种评估度量值叫做查准率(Precision)和召回率(Recall)。
我们建立一个2 x 2的表格,横坐标为真实值,纵坐标为预测值,表格单元1-4分别代表:预测准确的正样本(True positive)、预测错误的正样本(False positive)、预测错误的负样本(False negative)、预测正确的负样本(True negative)。
查准率(Precision)= 预测准确的正样本(True positive)/预测的正样本(predicted positive),而其中预测的正样本自然就包括了 预测准确的正样本+ 预测错误的正样本。
召回率(Recall)= 预测准确的正样本(True positive)/实际的正样本(actual positive),而其中实际的正样本自然就包括了 预测准确的正样本+ 预测错误的负样本。
假如像之前的y一直为0,虽然其准确率为99%,但是其召回率是0%。所以这对于评估算法的正确性是非常有帮助的。
个人理解:
Accuracy意义:对于Accuracy=0.9来说,有90%的概率患者得癌症
Precision意义:对于Precision=0.3来说,有30%的概率 对于患者癌症的预测是正确的。
Recall意义:对于Recall=0.2来说,有20%的概率 对于患者癌症的预测是完整且无遗漏的。
一般情况下,Precision升高,则Recall可能降低。故选择Precision,Recall都很高的指标为最好。
练习题:
选择(A)
precision = 80/80+20=0.8
recall = 80/80+80 = 0.5
Trading off precision and recall权衡精确性和召回
假如我们想要选择尽可能准确告诉病人你可能得了癌症,那么我们尽量采用高Precision,低Recall。
假如我们想要尽可能避免多的漏诊(有癌症的病人却没有查出来),那么我们尽量采用高Recall,低Precision。
对于权衡Recall和Precision之间选择多大数值,我们可能画出Recall和Precision的曲线。(每种模型的曲线都不一样)
我们如何比较不同组的的precision和recall。
如果使用平均值评价,对于precision极小(0.02),recall极大(1.0)这种极端情况。其平均值比0.5,0.4的平均值更大。
故引入F1Score来评价precision和recall综合在一起的好坏。F1Score高,往往代表precision和recall综合起来都很高。
练习题:
选择(D)
对于训练出不同的参数值,我们得出了很多组不同的precision和recall。我们如何得出门限值来完成分类问题。
D.使用最大的F1scroe的值,在交叉训练集上。(注意:是在交叉训练集上)
Banko和Brill在2001年的时候,研究不同的算法对于逻辑分类的影响。但是最后却发现,四种算法之间的效果相差不大,结果也非常相似,但是真正提高四种算法性能的,是给出大量的训练数据。
所以引起了一个在机器学习中的普遍共识:取得成功的人不是拥有最好算法的人,而是拥有最多数据的人。
这是为什么呢?
首先我们因为有大量的特征量,去训练数据,这样就导致了我们的训练集误差非常小,也就是
非常小。然后我们提供了大量的训练数据,这样有利于防止过拟合,可以使得
这样,我们的假设函数既不会存在高偏差,也不会存在高方差,所以相对而言,大数据训练出来会更加准确。
注意了,这里不仅是由大量的训练数据,而且还要有更多的特征量。因为假如只有一些特征量,例如只有房子的大小,去预测房子的价格,那么就连世界最好的销售员也不能只凭房子大小就能告诉你房子的价格是多少。
练习题:
选择(A,C)
A.丰富的特征,产生很低的欠拟合。很大的数据集,产生很低的过拟合。
C.当数据集多的时候,需要复杂模型。此时的神经网络的输入特征要很丰富,也要有很多层的隐含层。
测试题:
答案 :0.85
注:accuracy = (85+10)/(85+890+15+10)=0.095…
precision = 85/(85+890) = 0.087…
recall = 85/(85+15) = 0.85
F1 = 2pr/(p+r) = 0.16…
选择(B,C)
B.我们的学习算法能够表示相当复杂的功能(例如,如果我们训练神经网络或其他具有大量参数的模型)。模型复杂,表示复杂的函数,此时的特征多项式可能比较多,能够很好的拟合训练集中的数据,使用大量的数据能够很好的训练模型。
C.当只给出特征x(或者更一般来说,如果我们有办法可以确信x包含足够的信息来准确预测y),在应用型领域的专家可以相当准确地预测y。 数据的有效性,使数据本身有一定规律可循
选择(A)
D选项.
如图所示,threshold门限值越高,其precision越高,recall越低。
选择(A,B,D)
A.如果全部都预测为非垃圾邮件,那么accuracy会根据100之中1个分错,99个分对。故,为99%
B.在所有预测为1的中,共100个。其中真正为垃圾邮件的有1个。故precision为1/100=1%。在所有真正为垃圾邮件之中,共1个,预测为垃圾邮件的为1个。故recall为1/1=100%
D.在所有真正为垃圾邮件之中,共1个,预测为垃圾邮件的为0个。故recall为0/1=0%
选择(D,E)
B.错误。过拟合,增加数据集有用
C,门限值设置多少是不一定的
D.数据集大很难过拟合
E.正确。手动检查算法出错的示例的“错误分析”过程有助于建议采取哪些好步骤(例如,开发新功能)来提高算法的性能。