算法工程师修仙之路:吴恩达机器学习(十二)

吴恩达机器学习笔记及作业代码实现中文版

第九章 机器学习系统设计


确定执行的优先级

  • 以一个垃圾邮件分类器算法为例进行讨论。
    • 为了解决这样一个问题,我们首先要做的决定是如何选择并表达特征向量 x x
    • 我们可以选择一个由100个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中出现,来获得我们的特征向量(出现为1,不出现为0),尺寸为100×1。
    • 为了构建这个分类器算法,我们可以做很多事,例如:
      • 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本;
      • 基于邮件的路由信息开发一系列复杂的特征;
      • 基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理;
      • 为探测刻意的拼写错误(把 watch 写成 w4tch)开发复杂的算法。

误差分析

  • 如果你准备研究机器学习的东西,或者构造机器学习应用程序,最好的实践方法不是建立一个非常复杂的系统,拥有多么复杂的变量,而是构建一个简单的算法,这样你可以很快地实现它。

  • 我们必须用证据来领导我们的决策,怎样分配自己的时间来优化算法,而不是仅仅凭直觉,凭直觉得出的东西一般总是错误的。

  • 当我们在构造垃圾邮件分类器时,我会看一看我的交叉验证数据集,然后亲自看一看哪些邮件被算法错误地分类。因此,通过这些被算法错误分类的垃圾邮件与非垃圾邮件,你可以发现某些系统性的规律:什么类型的邮件总是被错误分类。经常地这样做之后,这个过程能启发你构造新的特征变量,或者告诉你现在这个系统的短处,然后启发你如何去提高它。

  • 构建一个学习算法的推荐方法为:

    • 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法;
    • 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择;
    • 进行误差分析,人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势。
  • 误差分析并不总能帮助我们判断应该采取怎样的行动。有时我们需要尝试不同的模型,然后进行比较,在模型比较时,用数值来判断哪一个模型更好更有效,通常我们是看交叉验证集的误差。

  • 假设你有了一个快速而不完美的算法实现,又有一个数值的评估数据,这会帮助你尝试新的想法,快速地发现你尝试的这些想法是否能够提高算法的表现,从而你会更快地做出决定,在算法中放弃什么,吸收什么,误差分析可以帮助我们系统化地选择该做什么。

不对称性分类的误差评估

  • 设定某个实数来评估你的学习算法,并衡量它的表现,这就有了算法的评估和误差度量值。

  • 偏斜类(skewed classes)情况表现为我们的训练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。

  • 我们将算法预测的结果分成四种情况:

    • 正确肯定(True Positive, TP):预测为真,实际为真;
    • 正确否定(True Negative, TN):预测为假,实际为假;
    • 错误肯定(False Positive, FP):预测为真,实际为假;
    • 错误否定(False Negative, FN):预测为假,实际为真。
  • 查准率(Precision)= TP / (TP + FP);查全率(Recall)= TP / (TP + FN)。

查准率和查全率的权衡

  • 在很多应用中,我们希望能够保证查准率和召回率的相对平衡。

  • 预测肿瘤性质:

    • 假使,我们的算法输出的结果在 0-1 之间,我们使用阀值 0.5 来预测真和假。
      在这里插入图片描述
    • 在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比越高越好。
    • 在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比越高越好。
    • 如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查准率,我们可以使用比 0.5 更大的阀值,如 0.7, 0.9。这样做我们会减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。
    • 如果我们希望提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地检查、诊断,我们可以使用比 0.5 更小的阀值,如 0.3。
    • 我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据的不同而不同:
      在这里插入图片描述
    • 选择这个阀值的方法是计算 F1 值(F1 Score),其计算公式为:
      F 1 = 2 P R P + R F1=2\frac{PR}{P+R} ,其中:P是查准率,R是查全率。选择使得 F1 值最高的阀值。

机器学习数据

  • 得到大量的数据并在某种类型的学习算法中进行训练,可以是一种有效的方法来获得一个具有良好性能的学习算法。而这种情况往往出现在有些条件对于你的问题都成立,并且你能够得到大量数据的情况下。这才可以成为一个很好的方式来获得非常高性能的学习算法。

  • 假如有这样一些假设,在这些假设下有大量我们认为有用的训练集。

    • 我们假设在我们的机器学习问题中,特征值 x x 包含了足够的信息,这些信息可以帮助我们用来准确地预测 y y
    • 假设我们使用一种需要大量参数的学习算法,比如有很多特征的逻辑回归或线性回归,或者用带有许多隐藏单元的神经网络,这些参数可以拟合非常复杂的函数。
    • 把这些算法想象成低偏差算法,因为我们能够拟合非常复杂的函数。很有可能,如果我们用这些数据运行这些算法,这种算法能很好地拟合训练集,因此,训练误差就会很低了。
    • 现在假设我们使用了非常非常大的训练集,在这种情况下,尽管我们希望有很多参数,但是如果训练集比参数的数量还大,甚至是更多,那么这些算法就不太可能会过度拟合,也就是说训练误差有希望接近测试误差。
  • 特征值有足够的信息量,且我们有一类很好的函数,这是为什么能保证低误差的关键所在。它有大量的训练数据集,这能保证得到更多的方差值,因此这给我们提出了一些可能的条件,如果你有大量的数据,而且你训练了一种带有很多参数的学习算法,那么这将会是一个很好的方式,来提供一个高性能的学习算法。

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/84984263