机器学习之——机器学习应用建议

机器学习的应用建议

好久没有更新机器学习的学习笔记了,上一次还是更新的神经网络的部分。这一次我们来聊一聊,机器学习的应用建议。

决定下一步做什么

假设我们需要用一个线性回归模型(Linear Regression)来预测房价,当我们运用训练好了的模型来预测未知数据的时候,发现有较大的误差,我们下一步可以做什么?

  1. 获得更多的训练实例——通常是有效的,但是代价较大,下面的方法也可能有效,可以考虑优先采用下面的几种方法。
  2. 尝试减少特征的数量
  3. 尝试获得更多的特征
  4. 尝试增加二项式特征
  5. 尝试减少归一化程度λ
  6. 尝试增加归一化程度λ

我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。

假设的评估(Evaluating A Hypothesis)

过拟合检验

为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用70%的数据作为训练集,剩下30%的数据作为测试集。很重要的一点是,训练集和测试集均要含有各种类型的数据,通常我们对数据要进行“洗牌”,然后再分成训练集和测试集。

测试集评估

在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

  • 对于线性回归模型,我们利用测试集数据计算代价函数J
  • 对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:还可以计算错误分类的比率,对于每一个测试集实例,计算:然后对计算结果求平均。

模型选择(交叉验证集)

假设我们要在10个不同次数的二项式模型之间进行选择:

显然越高次数的二项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。我们需要使用交叉验证集来帮助选择模型,即:

  • 使用60%的数据作为训练集
  • 使用20%的数据作为交叉验证集
  • 使用20%的数据作为测试集

模型选择的方法为:

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

偏倚和偏差诊断(Diagnosis Bias VS. Variance)

高偏倚和高偏差的问题基本上来说就是低拟合和过拟合的问题。

我们通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:

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

如果我们的交叉验证集误差较大,我们如何判断是偏倚还是偏差呢?

根据上面的图表,我们知道:

  • 训练集误差和交叉验证集误差相近时:偏倚/低拟合
  • 交叉验证集误差远大于训练集误差时:偏差/过拟合

归一化与偏倚/偏差

在我们在训练模型的过程中,一般会使用一些归一化的方法来防止过拟合。但是我们可能归一化的程度太高或太小了,即我们再选择λ的值时也需要思考与刚才选择多项式模型次数类似的问题。

我们选择一系列的想要测试的λ值,通常是在0-10之间的呈现2倍关系的值,如:0,0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10 共12个。

我们同样把数据分为训练集、交叉验证集和测试集。

选择λ的方法为:

  1. 使用训练集训练处12个不同程度归一化的模型
  2. 用12个模型分别对交叉验证集计算得出交叉验证误差
  3. 选择得出交叉验证误差最小的模型
  4. 运用步骤3中选出的模型对测试及计算得出推广误差

  • 当λ较小时,训练集误差较小(过拟合)而交叉验证集误差较大
  • 随着λ的增加,训练集误差不断增加(低拟合),而交叉验证集误差则是先减小后增加

学习曲线(Learning Curves)

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

即,如果我们有100个数据,我们从第1个数据开始,逐渐学习更多的数据。思想是:当训练较少数据的时候,训练的模型将能够非常完美的适应较少的训练数据,但是训练出来的模型却不能很好的适应交叉验证集数据或测试数据集。

如何利用学习曲线识别高偏倚/低拟合:

作为例子,我们尝试用一条直线来适应下面的数据,可以看出,无论训练集有多么大误差都不会有太大改观:

也就是说在高偏倚/低拟合的情况下,增加数据到训练集不一定能有帮助。

如何利用学习曲线识别高偏差/过拟合:

假设我们使用一个非常高次的多项式模型,并且归一化非常小,可以看出,当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果。

也就是说,在高偏差/过拟合的情况下,增加更多数据到训练集可能提高算法效果。

决定下一步做什么

回顾之前提出的六种可选的下一步,让我们来看一看我们在什么情况下应该怎样选择:

  1. 获得更多的训练实例——解决高偏差
  2. 尝试减少特征的数量——解决高偏差
  3. 尝试获得更多的特征——解决高偏倚
  4. 尝试增加二项式特征——解决高偏倚
  5. 尝试减少归一化程度——解决高偏倚
  6. 尝试增加归一化程度——解决高偏差

神经网络的偏倚和偏差

  • 使用较小的神经网络,类似于参数较少的情况,容易导致高偏倚和低拟合,但计算代价较小
  • 使用较大的神经网络,类似于参数较多的情况,容易导致高偏差和过拟合,虽然计算代价比较大,但是可以通过归一化手段来调整而更加适应数据

通常选择较大的神经网络并采用归一化处理会比采用较小的神经网络效果要好。

对于神经网络中的隐藏层的层数的选择,通常从一层开始逐渐增加层数,为了更好地做选择,可以把数据分为训练集、交叉验证集和测试集,针对不同隐藏层层数的神经网络训练神经网络,然后选择交叉验证集代价最小的神经网络。

时间: 2024-11-08 21:23:56

机器学习之——机器学习应用建议的相关文章

【作业四】林轩田机器学习技法 + 机器学习公开新课学习个人体会

这次作业的coding任务量比较大,总的来说需要实现neural network, knn, kmeans三种模型. Q11~Q14为Neural Network的题目,我用单线程实现的,运行的时间比较长,因此把这几道题的正确答案记录如下: Q11: 6 Q12: 0.001 Q13: 0.01 Q14: 0.02 ≤ Eout ≤ 0.04 其中Q11和Q14的答案比较明显,Q12和Q13有两个答案比较接近(参考了讨论区的内容,最终也调出来了) neural network的代码实现思路如下:

初学机器学习的几点建议

学习资料: 1.sklearn的代码,可以参照中文的,然后再seedbank上面操作(网页可以直接跑代码,甚至是GPU) seedbank:http://tools.google.com/seedbank/seed/5186378094608384 seedbank怎么导入文件或图片(谷歌云盘Colaboratory如何载入文件): https://blog.csdn.net/einstellung/article/details/81006408 sklearn中文文档:http://cwik

机器学习模型的实用建议

高方差/偏差的解决策略 高方差就是模型的训练误差与验证误差相去甚远,一般由于模型过拟合使得训练误差很低而验证误差很高:高偏差就是模型的训练误差与验证误差非常逼近但是都很高,往往由于模型欠拟合使得两者误差都很高. 高方差 高偏差 搜集更多的样本 获得额外特征 属性约简 获得多项式.核特征 增大正则化系数 减小正则化系数 引入一种观察算法性能的工具:学习曲线.学习曲线是一条反映训练误差与验证误差随训练样本量之间关系的曲线.如果算法是高偏差,那么你收集再多数据集也没用.高偏差的学习曲线训练线和验证线在

机器学习-chapter1机器学习的生态系统

1.机器学习工作流程 获取->检查探索->清理准备->建模->评估->部署 2.搭建机器学习环境 1..通过安装Python,配置相关环境变量 2.强烈建议直接安装anacomda,这是一个单一的可执行程序,几乎包含所有需要的软件包和依赖者,因为这个发行版是针对Python科学栈的用户,本质上是一个一劳永逸的解决方案,其中conda update <package_name>库就能更新到最新的稳定版本 3.安装jupyter,如果你安装的是anacomda就不需要

第二篇[机器学习] 学习机器学习,从最简单的线性回归开始

机器学习,分为监督学习和无监督学习,监督学习里有回归和分类,分类有线性回归和逻辑回归. 从最简单的线性回归开始: 通过已有数据需要预测的线性方程: 实际值和预测值的误差,求最小误差函数(最小二乘法): 1.梯度下降法: 其中ε是步长,步长越大,下降越快,但是可能到不了局部最小值,步长越小,下降越慢,计算越多 2.正规方程直接求解: 最小二乘法正规方程组的详细推导: https://zhuanlan.zhihu.com/p/28190949?utm_medium=social&utm_source

FPGA机器学习之机器学习的n中算法总结2

前面已经说了很多的算法了.比如说退火算法,蚂蚁算法,文化算法,禁忌算法等等.接下来要写一些其他的机器学习算法.迁移学习,集成算法,向量机,在线学习等算法. 我毛华望QQ849886241.技术博客http://blog.csdn.net/my_share 迁移学习算法:大概理解一下就是,机器学习了一些知识后,可以更容易学会其他的知识,举个例子,学会桌子的人,更容易学会认识椅子.学会下象棋的人,更容易学围棋.基于boosting的迁移学习算法.http://wenku.baidu.com/link

机器学习初探——机器学习的基本概念

机器学习 机器学习研究的主要内容:使计算机从数据中产生"模型"的算法. 机器学习的基本术语 我们认为将一组数据可以抽象画表示为一个向量Xi,D={X1,X2,X3..Xm}表示包含m个示例的数据集,每一个Xi是由一系列属性描述所构成的,Xij则表示第i个示例的第j个特征或属性. 所有记录的集合为:数据集(D) 每一条记录为:一个实例(instance)或样本(sample),(样本.示例.记录:Xi). 一个样本的特征数为:维数(dimensionality),属性空间的维数,当维数非

每日一个机器学习算法——机器学习实践

知道某个算法,和运用一个算法是两码事儿. 当你训练出数据后,发觉模型有太大误差,怎么办? 1)获取更多的数据.也许有用吧. 2)减少特征维度.你可以自己手动选择,也可以利用诸如PCA等数学方法. 3)获取更多的特征.当然这个方法很耗时,而且不一定有用. 4)添加多项式特征.你在抓救命稻草么? 5)构建属于你自己的,新的,更好的特征.有点儿冒险. 6)调整正则化参数lambuda. 以上方法的尝试有些碰运气,搞不好就是浪费大把时间. machine learning diagonostic. 机器

机器学习实战~~机器学习算法

以下内容都是通过看寄<机器学习实战>这本书后进行的总结.有疏漏的地方请指正. 一般在实际问题中选择相应的算法需考虑两个问题: 第一:使用算法的目标,想要算法完成何种任务.比如预测明天下雨的概率  还是 对鸟类进行种群划分. 目的(大多数情况下):(1)想要预测目标变量的值,可以选择  监督学习算法 分类器算法:目标是离散型的,如是/否,1/2/3  ,A/B/C之类的, 回归算法:目标变量是连续型的数值,如0.0~100.0,-999~999等 (2)不想预测目标变量的值,可以选择无监督学习算