机器学习 Week6 - Coursera Machine Learning

机器学习应用建议

评估学习算法

决定下一步做什么

当我们遇到预测错误的情况时,我们可以:

  1. 增加训练样本(代价较大)
  2. 减少特征数量
  3. 增加新的特征
  4. 尝试用多项式特征
  5. 增加或减少lamda

评估假设(Evaluating a Hypothesis)

通常把数据分成两类(随机洗牌):

  1. Training set - 70%
  2. Test set - 30%

对于这两类数据集:

  1. 计算$\theta$ 然后使 $J_{train}(\Theta)$最小
  2. 计算test set的错误 $J_{test}(\Theta)$

具体 Test Set 评估:

  1. 线性回归-test set的代价函数J
  2. 分类问题:
    a.代价函数
    b.错误分类比

模型选择 - 训练/验证/测试

多项式的模型用在train set的结果往往比较好, 但不一定好用在test set上。

把数据集分成3类:

  1. 60% 训练
  2. 20% 交叉检验(cross validation)
  3. 20% 测试

方法如下:

  1. 用train set找到每一个多项式最佳的$\theta$
  2. 找到交叉检验中 test error最小的多项式
  3. 最后用test set得出推广误差

Bias & Variance

诊断 Bias 还是 Variance

高bias - 欠拟合
Train和CV的cost function都很高并且相近

高Variance- 过拟合
Train的cost function偏低,但是cv的cost function远大于train的。

对于训练集,当 d 较小时,模型拟合程度更低,误差较大;随着 d 的增长,拟合程度提高,误差减小。

对于交叉验证集,当 d 较小时,模型拟合程度低,误差较大;但是随着 d 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。

归一化 和 bias/variance

lamda越大- 高bias
lamda越小 - 高variance

lamda通常是在0-10中测试呈现 2 倍关系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10 共 12 个)

学习曲线 (Learning Curve)

学习曲线是学习算法的一个很好的合理检验(sanity check)。学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表

High Bias/ Underfit 提高数据量不会改变误差率

High Variance / Overfit 提高数据量能提高效果

下一步做什么

  1. 获得更多数据量 - high variance
  2. 减少特征数量 - high variance
  3. 增加特征数量 - high bias
  4. 增加多项式 - high bias
  5. 增加lamda - high variance
  6. 减少lamda - high bias

神经网络中- 参数越大-high variance过拟合。 通常使用大参数和归一化的模型。
通常从一层开始,增加hidden layer查看效果。

机器学习系统设计

首要工作

例子: 垃圾邮件分类器

我们首先要做的决定是如何选择并表达特征向量 x。我们可以选择一个由 100 个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中出现,来获得我们的特征向量(出现为 1,不出现为 0),尺寸为 100×1。

  1. 获取更多的数据
  2. 开发更复杂的特征 (邮件的开头)
  3. 开发算法(检查错别字)

误差分析 (Error Analysis)

  1. 简单的算法, 并用cross validaiton测试结果
  2. 绘制学习曲线,判断是否需要更多的数据
  3. 手动检查错误,是否有trend

用单一标准量化错误能帮组你更好的改进模型的方法

处理偏差数据

在这种偏差很大的数据集里, 我们不能直接用accuracy来衡量结果

实际结果 : True /False
预测结果: Positive / Negative

Precision = TP / (TP + FP)
在我们预测postive的结果中的正确率

Recall = TP / (TP + FN)
在所有true的结果中,我们预测中了多少

Precision 和 Recall 的权衡

通常在判断结果中我们会计算一个概率然后用到阀值cut off来判断结果的取向。

如果cut off越大, 我们的Precision正确率会高,但是Recall查全率会下降。

这时候我们会引进一饿F1 score来衡量这两者的关系
然后选择F1score最大的阀值