[Python嗯~机器学习]---设计一个简单的机器学习系统和准确率、召回率

设计一个简单的机器学习系统

首先,快速实现的最简单的算法,比如花一天时间来快速地搭建出一个可以运行的简单系统,即使效果不好也无所谓。
之后,我们通过画出学习曲线来观察训练集误差和交叉验证集误差,确定是否有高bias问题,或者高variance问题,或
者什么别的问题。这样,我们就可以决定是否需要获取更多的训练样本,或者加入更多的特征,或者其他手段来提高算
法的效果。

误差分析,意思是在我们构建机器学习系统时,比如搭建一个垃圾邮件分类器时,我们可以人工地看看交叉验证集中被
算法错分的样本究竟是什么样子。通过这些被算法错分的邮件,我们可以发现某些系统性的规律,例如,什么类型的邮
件总是被错分,一般来说这么做了以后,我们常常可以得到启发,并可以构造出新的特征来解决这类错分,或者也可以
发现现有的特征可能存在着一些我们事先没有预料到的意外问题。

有偏数据

举个例子:
我们有病人的特征数据,我们希望对他们进行诊断否真的患有癌症。那么,我们假设y=1表示病人患有癌症,y=0表示病
人没有癌症。我们训练一个逻辑回归模型,假设我们在测试集上的错分率仅有1%。也就是说我们的诊断99%都是正确的。
但是,假如我们发现在测试集中,仅有0.5%的人真的患有癌症。那么在这种情况下,1%的诊断错误率就显得不是那么好
了。也就是,我们在诊断时,压根不考虑病人的具体情况,一律认为病人不患有癌症,那么这个分类器或者说诊断器的错
分率就仅有0.5%!比我们逻辑回归分类器还要好。

某一类本身出现的概率就非常小,整个数据集表现出类别分布极不均匀的情况。这种情况,被称为“类别有偏”(skewed
classes)。

准确率和召回率

[Python嗯~机器学习]---设计一个简单的机器学习系统和准确率、召回率_第1张图片
1表示癌症,0表示非癌症。
准确率(Precision): 在我们所有预测y=1的病人中,真正患有癌症的比例。
 通俗讲,预测了一堆人都得癌症,这一堆人中真得癌症的比例。
召回率(Recall):确实患有癌症的病人中,我们成功将它们确诊的比例。
 通俗讲,有一堆人有癌症,这一堆人中被预测出来的比例。

显而易见,我们想要一个高准确率和高召回率的模型。

但是现实中,很难实现高准确率的同时又有很高的召回率,这时候需要我们进行权衡。
[Python嗯~机器学习]---设计一个简单的机器学习系统和准确率、召回率_第2张图片
还是以癌症为例:

根据惯例,当hθx大于等于0.5的时候,我们预测y=1 。而当hθx小于0.5的时候,我们预测y=0 。对于这个分类器,我
们可以计算它的准确率和召回率。 但现在假如我们希望仅在有足够把握的情况下才预测 y=1,想要达到这种效果,一
种做法是,修改我们的算法不再将临界值设为0.5,也许我们把它设置成0.7。也就是说,只有当算法预测的概率超过
0.7的时候,我们才做诊断。这样,[我们就使得我们的算法可以具有更高的准确率。但另一方面,我们的这个模型会有
较低的召回率,因为当我们做诊断的时候,我们只给很小一部分的病人预测 y=1。

反之,我们想避免遗漏掉患有癌症的病人,也就是我们想避免漏诊。具体地讲,如果一个病人确实患有癌症,但我们没
有诊断出来,那么这可能会造成非常严重的后果。那么,我们希望预测 y=1,这样至少它们会接受进一步的检查,然后
接受治疗,避免漏诊带来的严重后果。那么,我们就不能再把临界值设高了,我们就可能把临界值设置的稍微低一些,
比如0.3。这样做以后,我们认为,只要病人有30%以上的概率患有癌症,那么我们就可能以更加含蓄、保守的方式告诉
他们可能患有癌症,这样他们就可以接受治疗。所以,这种情况下,我们将会得到了一个高召回率的模型,但显然找这
个模型的准确率将会低一些。

所以需要在准确率和召回率之间进行权衡。

方法:
[Python嗯~机器学习]---设计一个简单的机器学习系统和准确率、召回率_第3张图片
对于一个较大的F1值,需要准确率和召回率都比较大。

大数据:

[Python嗯~机器学习]---设计一个简单的机器学习系统和准确率、召回率_第4张图片
大数据是支撑机器学习的重要部分。

你可能感兴趣的:(菜鸟鹏鹏哥哥的机器学习)