吴恩达-机器学习(6)-评估学习算法、偏差与方差、构架垃圾邮件分类器、处理倾斜数据

Evaluating a Learing Algorithm

Decidding what to try next

当预测新的数据集,效果很差时:

  1. 获取更多的训练数据
  2. 减小特征数量
  3. 尝试获取附加特征
  4. 尝试添加多项式特征
  5. 尝试减小 λ \lambda
  6. 尝试增加 λ \lambda

机器学习诊疗法:可以帮助你知道机器学习算法是否在工作,而且可以知道提高算法性能的最好的方法

Evaluating your hypothesis

将数据集按照7:3的比例分为训练集和测试集

线性回归

逻辑回归

####Model selection and Train/Validation/Test Sets
模型选择,对每个多项式进行训练,选择测试机误差最小的模型,但这并不能评估模型在新的数据集中表现

将数据集分为6:2:2的三段,第一段为训练集,第二段为交叉验证集、第三段为测试集

选择交叉验证误差最小的模型,这就避免使用测试集

Bias vs Variance

Diagnosing bias vs variance

随着多项式的增加,训练集的误差逐渐减小,验证集的误差先减小后增大
高偏差(欠拟合): J t r a i n ( θ ) J_{train}(\theta) J c v ( θ ) J_{cv}(\theta) 都很高,且 J t r a i n ( θ ) J c v ( θ ) J_{train}(\theta) \approx J_{cv}(\theta)
高方差(过拟合): J t r a i n ( θ ) J_{train}(\theta) 很小, J c v ( θ ) J_{cv}(\theta) J t r a i n ( θ ) J_{train}(\theta) 大很多

Regularization and Bias/Variance


选取模型和 λ \lambda 的步骤:

  1. 创建 λ \lambda 的列表 (i.e. λ∈{0,0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24});
  2. 创建一组具有不同次方或任何其他变体的模型
  3. 遍历所有的 λ \lambda 和模型学习参数
  4. 计算交叉验证集上的 J c v ( θ ) J_{cv}(\theta) (没有正则化)
  5. 选择在交叉验证集中产生最低错误的最佳组合。
  6. 使用最好的模型和 λ \lambda ,在测试集上测试性能


Learning Curves

学习曲线是误差和训练集大小的曲线

高偏差时:
小的训练集导致 J t r a i n ( θ ) J_{train}(\theta) 很小 J c v ( θ ) J_{cv}(\theta) 很高
大的训练集导致 J t r a i n ( θ ) J_{train}(\theta) J c v ( θ ) J_{cv}(\theta) 都很高且 J t r a i n ( θ ) J c v ( θ ) J_{train}(\theta) \approx J_{cv}(\theta)
当学习算法是高偏差时,增大训练集并不能改善其性能

高方差时:
小的训练集导致 J t r a i n ( θ ) J_{train}(\theta) 很小 J c v ( θ ) J_{cv}(\theta) 很高
随着训练集的增大 J t r a i n ( θ ) J_{train}(\theta) 增大 J c v ( θ ) J_{cv}(\theta) 减小且都不会趋于平稳, J t r a i n ( θ ) J_{train}(\theta) < J c v ( θ ) J_{cv}(\theta) 且差异很大

模型改善方法总结

Building a Spam Classifier

Prioritizing What to Work on

垃圾邮件分类:
给定一组电子邮件数据,我们可以为每个电子邮件构造一个向量。这个向量中的每个元素代表一个单词。向量通常包含10,000到50,000个条目,这是通过查找我们数据集中最常用的单词来收集。如果要在邮件中找到一个单词,我们将分配它各自的条目1,否则如果没有找到,这个条目就是0。一旦我们准备好所有的x向量,我们训练我们的算法,最后,我们可以用它来分类一个邮件是否是垃圾邮件。

如何提高分类器的准确性:

  • 收集大量的数据,如‘honeypot’项目
  • 寻找更加复杂的特性(例如:在垃圾邮件中使用电子邮件头数据)
  • 从邮件内容中寻找复杂的特征
  • 开发算法检测错误拼写

Error Analysis

解决机器学习问题的建议方法是:

  • 从一个简单的算法开始,快速实现它,并在交叉验证数据的早期测试它。
  • 绘制学习曲线来判断更多的数据,更多特征是否有帮助
  • 误差分析:手动检查交叉验证集中的例子中的错误,并尝试找出大多数错误发生的趋势。

误差分析

Handing Skewed Data

Error Metrics for Skewed Classes

Skewed Classes:对于分类问题,y=1和y=0,在样本数量中y=1的数量远小于y=0的数量。
假设你的算法在测试集上只有1%的错误,可实际上,测试集中只有0.5%的病人患有癌症,所以错误率并不能评价这个算法的优劣,所以就提出了Precision和Recall

Trading Off Precision and Recall

  1. 为了防止癌症误诊断给人造成压力,所以要有很大的把握判断的了癌症,所以提高阈值,这将造成precision较高,recall较低
  2. 为了防止错误的诊断癌症为没有癌症,导致没有及时治疗,所以要通过降低阈值防止漏了癌症病人,这将造成precision较低,recall较高

    将两者合并为一个量

Using Large Data Sets

Data For Machine Learning

猜你喜欢

转载自blog.csdn.net/u014351944/article/details/82622519