机器学习建议&机器学习系统设计

本文为《吴恩达机器学习》的要点记录算法

应用机器学习的建议

当咱们运用训练好了的模型来预测未知数据的时候发现有较大的偏差,咱们下一步能够作什么?一般咱们会有下面选择:网络

  1. 得到更多的训练样本
  2. 尝试减小特征的数量
  3. 尝试得到更多的特征
  4. 尝试增长多项式特征
  5. 尝试减小正则化程度\lambda
  6. 尝试增长正则化程度\lambda

那么如何选择呢?能够经过一些机器学习诊断法来作出决定。机器学习

避免过拟合

为了检验算法是否过拟合,咱们将数据分红训练集、测试集和交叉验证集,好比可使用60%的数据做为训练集,用20%的数据做为测试集,用20%的数据做为交叉验证集。在训练过程当中能够这样选择 模型:函数

  1. 使用训练集训练出10个模型
  2. 用10个模型分别对交叉验证集计算得出交叉验证偏差(代价函数的值)
  3. 选取代价函数值最小的模型
  4. 用步骤3中选出的模型对测试集计算得出推广偏差(代价函数的值)

诊断误差和方差

当运行一个学习算法时,若是这个算法的表现不理想,那么多半是出现两种状况:要么是误差比较大,要么是方差比较大。换句话说,出现的状况要么是欠拟合,要么是过拟合问题。 那么这两种状况,哪一个和误差有关,哪一个和方差有关,或者是否是和两个都有关?性能

对于误差和方差的理解: www.zhihu.com/question/20…学习

咱们一般会经过将训练集和交叉验证集的代价函数偏差与多项式的次数绘制在同一张图表上来帮助分析是高误差仍是高方差:测试

上面:设计

  1. 训练集偏差和交叉验证集偏差近似时 : 误差/欠拟合
  2. 交叉验证集偏差远大于训练集偏差时:方差/过拟合

正则化和误差/方差

通常咱们采用下面方法选择\lambda:cdn

  1. 假设咱们随机选取了12个\lambda,使用训练集训练出12个不一样程度正则化的模型
  2. 用12个模型分别对交叉验证集计算的出交叉验证偏差
  3. 选择得出交叉验证偏差最小的模型
  4. 运用步骤3中选出模型对测试集计算得出推广偏差,最后选取偏差z最小的

使用学习曲线来解决 误差/方差 问题

咱们能够经过不断增长训练集大小,来观察当前训练模型是处于 误差 or 方差 问题:blog

上图训练模型处于高误差/欠拟合的状况,这时增长数据到训练集不必定能有帮助。

上图训练模型处于高方差/过拟合的状况,增长更多数据到训练集可能能够提升算法效果。

神经网络

使用较小的神经网络,相似于参数较少的状况,容易致使高误差和欠拟合,但计算代价较小使用较大的神经网络,相似于参数较多的状况,容易致使高方差和过拟合,虽然计算代价比较大,可是能够经过正则化手段来调整而更加适应数据。 ​ 一般选择较大的神经网络并采用正则化处理会比采用较小的神经网络效果要好。 ​ 对于神经网络中的隐藏层的层数的选择,一般从一层开始逐渐增长层数,为了更好地做选择,能够把数据分为训练集、交叉验证集和测试集,针对不一样隐藏层层数的神经网络训练神经网络,而后选择交叉验证集代价最小的神经网络。

总结

  1. 得到更多的训练样本——解决高方差
  2. 尝试减小特征的数量——解决高方差
  3. 尝试得到更多的特征——解决高误差
  4. 尝试增长多项式特征——解决高误差
  5. 尝试减小正则化程度λ——解决高误差
  6. 尝试增长正则化程度λ——解决高方差

机器学习系统设计

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

  1. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法 ​
  2. 绘制学习曲线,决定是增长更多数据,或者添加更多特征,仍是其余选择 ​
  3. 进行偏差分析:人工检查交叉验证集中咱们算法中产生预测偏差的样本,看看这些样本是否有某种系统化的趋势

偏差分析 Error Analysis

查准率(Precision) 与 查全率(Recall)

咱们能够将咱们的算法预测的结果分红四种状况:

  1. 正确确定True Positive,TP):预测为真,实际为真 ​
  2. 正确否认True Negative,TN):预测为假,实际为假 ​
  3. 错误确定False Positive,FP):预测为真,实际为假 ​
  4. 错误否认False Negative,FN):预测为假,实际为真

则:

查准率 = TP/(TP+FP)

查全率 = TP/(TP+FN)

偏斜类 (Skewed Classes) 问题

类偏斜状况表现为咱们的训练集中有很是多的同一种类的样本,只有不多或没有其余类的样本。

例如咱们但愿用算法来预测癌症是不是恶性的,在咱们的训练集中,只有0.5%的实例是恶性肿瘤。假设咱们编写一个非学习而来的算法,在全部状况下都预测肿瘤是良性的,那么偏差只有0.5%。然而咱们经过训练而获得的神经网络算法却有1%的偏差。这时,偏差的大小是不能视为评判算法效果的依据的。

为了不偏斜类问题, 咱们须要保证查准率和召回率的相对平衡。

例,在全部咱们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好,这时咱们的查全率是比较高的。

若是咱们但愿只在很是确信的状况下预测为真(肿瘤为恶性),即咱们但愿更高的查准率,咱们可使用比0.5更大的阀值,如0.7,0.9。这样作咱们会减小错误预测病人为恶性肿瘤的状况,同时却会增长未能成功预测肿瘤为恶性的状况。

若是咱们但愿提升查全率,尽量地让全部有多是恶性肿瘤的病人都获得进一步地检查、诊断,咱们可使用比0.5更小的阀值,如0.3。

咱们能够将不一样阀值状况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据的不一样而不一样:

那怎么选择阈值呢? 一种方法是计算F1值F1 Score),其计算公式为:

F_{1}Score = 2 \frac{PR}{P+R}

训练集的数量

若是你有大量的数据,并且你训练了一种带有不少参数的学习算法,增大训练集的数量,能够提供一个高性能的学习算法。

相关文章
相关标签/搜索