Stanford机器学习笔记-7. Machine Learning System Design

7 Machine Learning System Design

Content

  7 Machine Learning System Design

    7.1 Prioritizing What to Work On

    7.2 Error Analysis

    7.3 Error Metrics for Skewed Classed

      7.3.1 Precision/Recall

      7.3.2 Trading off precision and recall: F1 Score

    7.4 Data for machine learning

7.1 Prioritizing What to Work On

当我们着手针对某一实际问题设计机器学习系统时,我们应该在哪些方面花费较多的时间来使得系统的误差较少?以构建一个垃圾邮件分类器(a spam classifier)为例,我们可以从下面几个方面考虑:

  • Collect lots of data

    • E.g. "honeypot" project.
  • Develop sophisticated features based on email routing information (from email header).
  • Develop sophisticated features for message body, e.g. should "discount" and "discounts" be treated as the same word? How about "deal" and "Dealer"? Features about punctuation?
  • Develop sophisticated algorithm to detect misspellings (e.g. m0rtgage, med1cine, w4tches.)

很难说上述的哪一种方式最有效,而且每一种方式往往需要花费很多时间去研究调查。

7.2 Error Analysis

解决机器学习问题的推荐做法是:

  1. Start with a simple algorithm that you can implement quickly. Implement it and test it on your cross-validation data.
  2. Plot learning curves to decide if more data, more features, etc. are likely to help.
  3. Error analysis: Manually examine the examples (in cross validation set) that your algorithm made errors on. See if you spot any systematic trend in what type of examples it is making errors on.

将误差转变为一个单一的数值非常重要,否则很难判断我们所是设计的学习算法的表现。

7.3 Error Metrics for Skewed Classed

有时很难说误差的减少是否真正改善了算法。以癌症分类为例:

我们训练了一个logistic回归模型来预测病人是否得癌症 (y = 1 if cancer, y = 0 otherwise),我们在测试集上测得误差为1%(即正确诊断率99%)。但是,事实上病人患癌症的概率只有0.50%,也就是如果我们完全忽略特征量,直接令所有的y = 0,那么该模型的错误率只有0.5%。我们辛苦得到模型的误差居然比直接令y=0的误差大。这很让人生气! 但是仔细想想,直接令y = 0真的比我们训练出的模型好吗? 假设我们需要预测一个事实上已经患癌症(y=1)的病人,那么前者完全不可能预测正确,而后者却是有机会预测正确的。从这个角度看,我们训练得到的模型似乎更好。这也就说明了算法1比算法2的误差小,不一定算法1就好。

7.3.1 Precision/Recall

上述的情况通常发生在skewed classes的情况,即一类的数据远比另一类的数据多。对于这种情况,我们需要采取另一种方式来衡量一个学习算法的性能。

我们定义准确率(Precision)召回率(Recall)如下所示,它们分别从两种角度衡量算法的性能。

所以,当令y = 0时,Recall = 0 / (0 + #False neg) = 0, 即使它有很小的误差,但是它的召回率太低了。

注意,如果一个算法预测所有的情况都是negative,则Precision无定义,因为此时

#predicted positive = 0, 除0是无意义的。

7.3.2 Trading off precision and recall: F1 Score

在7.2节中我们提到,将误差转变为一个单一的数值非常重要,因为这样我们才能方便的比较不同算法之间的优劣。现在我们有precision和recall两个衡量标准,我们需要权衡两者。如果用Logistic回归模型预测病人是否患癌症,考虑下面的情况:

情况1: 假设考虑到一个正常人如果误判为癌症,将会承受不必要的心理和生理压力,所以我们要有很大把握才预测一个病人患癌症(y=1)。那么一种方式就是提高阙值(threshold),不妨设我们将阙值提高到0.7,即:

    Predict 1 if: (x)≥0.7

    Predict 0 if: (x)<0.7

在这种情况下,根据7.3.1节的定义,我们将会有较高的precision,但是recall将会变低。

情况2: 假设考虑到一个已经患癌症的病人如果误判为没有患癌症,那么病人可能将因不能及时治疗而失去宝贵生命,所以我们想要避免错过癌症患者的一种方式就是降低阙值,假设降低到0.3, 即

    Predict 1 if: (x)≥0.3

    Predict 0 if: (x)<0.3

在这种情况下,将得到较高的recall,但是precision将会下降。

情况1和情况2似乎是相互矛盾的,事实上,precision和recall往往是如下关系,并且高阙值对应高precision和低recall;低阙值对应低precision和高recall。

这样看来,我们不得不在precision和recall做出权衡。考虑下面的例子:

可以看出算法3是恒预测y=1(因为其recall = 1).

为了将precision(P)和recall(R)这两种度量方式转为一种单一的方式,一个简单的考虑是取二者的平均值,即: (P + R) / 2;但是这种方式似乎不太理想,因为如果这样,算法3将会被认为是最优的,而算法3是恒预测y=1,precision非常低。

事实上,一种更好的方式根据precision和recall的调和平均定义F1 Score如下:

            1 / F1 = (1 / P + 1 / R) / 2 

            F1 = 2PR / (P + R)

要使F1较大,需要P和R同时较大,特别的,有:

  • P = 0,R = 1,则F1 =0
  • P = 1,R = 0,则F1 = 0
  • P = 1,R = 1,则F1 = 1

注意:我们应该是在交叉检验集上测试F1的值,避免依赖测试集。

7.4 Data for machine learning

多少数据量对于我们训练学习算法是足够的呢?

通常来说,一个"劣等"算法(inferior algorithm),如果给它足够的数据来学习,它的表现往往优于一个缺乏数据学习的"优等"算法(superior algorithm)。所以在机器学习界有一个这样的共识:

"It‘s not who has the best algorithm that wins. It‘s who has the most data."

(我想这就是BIG DATA的魅力吧)

值得注意的是,为了充分利用数据,我们应该选择包含足够信息的特征量。通常一个判断参考是,给出输入x,一个人类的专家是否能够自信的预测出y。

  • Large data rationale

数据量大能够起作用的基本原理是,可以使用一个具有大量参数的学习算法(e.g. logistic regression/linear regression with many features; neural network with many hidden units)来保证偏差较小,然后使用大量的训练集来大大减弱过拟合(方差较小),从而达到训练出一个在测试集上误差较小的,泛化能力强的模型。

时间: 2024-10-07 05:29:54

Stanford机器学习笔记-7. Machine Learning System Design的相关文章

Machine Learning - XI. Machine Learning System Design

http://blog.csdn.net/pipisorry/article/details/44119187 机器学习Machine Learning - Andrew NG courses学习笔记 Machine Learning System Design机器学习系统设计 Prioritizing What to Work On优先考虑做什么 Error Analysis 错误分析 Error Metrics for Skewed Classes有偏类的错误度量 Trading Off P

斯坦福第十一课:机器学习系统的设计(Machine Learning System Design)

11.1  首先要做什么 11.2  误差分析 11.3  类偏斜的误差度量 11.4  查全率和查准率之间的权衡 11.5  机器学习的数据 11.1  首先要做什么 在接下来的视频中,我将谈到机器学习系统的设计.这些视频将谈及在设计复杂的机器 学习系统时,你将遇到的主要问题.同时我们会试着给出一些关于如何巧妙构建一个复杂的机器学习系统的建议.下面的课程的的数学性可能不是那么强,但是我认为我们将要讲到的 这些东西是非常有用的,可能在构建大型的机器学习系统时,节省大量的时间. 本周以一个垃圾邮件

机器学习系统设计 ---- Machine Learning System Design

构建一个机器学习算法的过程: 快速构建一个简单的算法,并用交叉验证集来测试这个算法的性能. 画出学习曲线,检查算法是否有高方差或高偏差的问题,从而选择相应的应对方法. 误差分析,查看使算法出现误差的实例,分析这些实例是否有某种系统化的趋势. 评估算法性能 偏斜类(skewed classes):训练集中的大多数实例属于一类,其他类占得很少或没有. 类偏斜的情况下我们就不能单纯使用误差来评判算法的效果.应使用新的评估度量值. TP:预测为真,实际为真 FP:预测为真,实际为假 FN:预测为假,实际

Ng第十一课:机器学习系统的设计(Machine Learning System Design)

11.1  首先要做什么 11.2  误差分析 11.3  类偏斜的误差度量 11.4  查全率和查准率之间的权衡 11.5  机器学习的数据 11.1  首先要做什么 在接下来的视频将谈到机器学习系统的设计.这些视频将谈及在设计复杂的机器学习系统时,将遇到的主要问题.同时会试着给出一些关于如何巧妙构建一个复杂的机器学习系统的建议.下面的课程讲的东西数学性不强,但是非常有用的,可能在构建大型的机器学习系统时,节省大量的时间. 本周以一个垃圾邮件分类器算法为例进行讨论. 为了解决这样一个问题,首先

斯坦福大学公开课机器学习:machine learning system design | error metrics for skewed classes(偏斜类问题的定义以及针对偏斜类问题的评估度量值:查准率(precision)和召回率(recall))

上篇文章提到了误差分析以及设定误差度量值的重要性.那就是设定某个实数来评估学习算法并衡量它的表现.有了算法的评估和误差度量值,有一件重要的事情要注意,就是使用一个合适的误差度量值,有时会对学习算法造成非常微妙的影响.这类问题就是偏斜类(skewed classes)的问题.什么意思呢.以癌症分类为例,我们拥有内科病人的特征变量,并希望知道他们是否患有癌症,这就像恶性与良性肿瘤的分类问题.假设y=1表示患者患有癌症,假设y=0表示没有得癌症,然后训练逻辑回归模型.假设用测试集检验了这个分类模型,并

斯坦福大学公开课机器学习:machine learning system design | trading off precision and recall(F score公式的提出:学习算法中如何平衡(取舍)查准率和召回率的数值)

一般来说,召回率和查准率的关系如下:1.如果需要很高的置信度的话,查准率会很高,相应的召回率很低:2.如果需要避免假阴性的话,召回率会很高,查准率会很低.下图右边显示的是召回率和查准率在一个学习算法中的关系.值得注意的是,没有一个学习算法是能同时保证高查准率和召回率的,要高查准率还是高召回率,取决于自己的需求.此外,查准率和召回率之间的关系曲线可以是多样性,不一定是图示的形状. 如何取舍查准率和召回率数值: 一开始提出来的算法有取查准率和召回率的平均值,如下面的公式average=(P+R)/2

斯坦福大学公开课机器学习:machine learning system design | data for machine learning(数据量很大时,学习算法表现比较好的原理)

下图为四种不同算法应用在不同大小数据量时的表现,可以看出,随着数据量的增大,算法的表现趋于接近.即不管多么糟糕的算法,数据量非常大的时候,算法表现也可以很好. 数据量很大时,学习算法表现比较好的原理: 使用比较大的训练集(意味着不可能过拟合),此时方差会比较低:此时,如果在逻辑回归或者线性回归模型中加入很多参数以及层数的话,则偏差会很低.综合起来,这会是一个很好的高性能的学习算法. 原文地址:https://www.cnblogs.com/chenwenyan/p/8326027.html

Advice for Applying Machine Learning &amp; Machine Learning System Design----- Stanford Machine Learning(by Andrew NG)Course Notes

Adviceforapplyingmachinelearning Deciding what to try next 现在我们已学习了线性回归.逻辑回归.神经网络等机器学习算法,接下来我们要做的是高效地利用这些算法去解决实际问题,尽量不要把时间浪费在没有多大意义的尝试上,Advice for applying machine learning & Machinelearning system design 这两课介绍的就是在设计机器学习系统的时候,我们该怎么做? 假设我们实现了一个正则化的线性回

Lessons learned developing a practical large scale machine learning system

原文:http://googleresearch.blogspot.jp/2010/04/lessons-learned-developing-practical.html Lessons learned developing a practical large scale machine learning system Tuesday, April 06, 2010 Posted by Simon Tong, Google Research When faced with a hard pre