在机器学习表现不佳的原因要么是过度拟合或欠拟合数据。
机器学习中的逼近目标函数过程
监督式机器学习通常理解为逼近一个目标函数(f)(f),此函数映射输入变量(X)到输出变量(Y).
Y=f(X)Y=f(X)
这种特性描述可以用于定义分类和预测问题和机器学习算法的领域。
从训练数据中学习目标函数的过程中,我们必须考虑的问题是模型在预测新数据时的泛化性能。泛化好坏是很重要的,因为我们收集到的数据只是样本,其带有噪音并且是不完全的。
机器学习中的泛化
在In机器学习中,我们描述从训练数据学习目标函数的学习过程为归纳性的学习。
归纳与特别的样本中学习到通用的概念有关,而这就是监督式机器学习致力于解决的问题。这与推演不同,其主要是另一种解决问题和寻求从通常的规则中找寻特别的内容。
泛化即是,机器学习模型学习到的概念在它处于学习的过程中时模型没有遇见过的样本时候的表现。
好的机器学习模型的模板目标是从问题领域内的训练数据到任意的数据上泛化性能良好。这让我们可以在未来对模型没有见过的数据进行预测。
在机器学习领域中,当我们讨论一个机器学习模型学习和泛化的好坏时,我们通常使用术语:过拟合和欠拟合.
过拟合和欠拟合是机器学习算法表现差的两大原因。
统计拟合
在统计学中,拟合指的是你逼近目标函数的远近程度。
这个术语同样可以用于机器学习中,因为监督式机器学习算法的目标也是逼近一个未知的潜在映射函数,其把输入变量映射到输出变量。
统计学通常通过用于描述函数和目标函数逼近的吻合程度来描述拟合的好坏。
这类理论中的一些在机器学习中也是有用的(例如,计算残差),但是一些技巧假设我们已经知道了我们要逼近的函数。这和机器学习的场景就不同了。
如果我们已经知道了目标函数的形式,我们将可以直接用它来做预测,而不是从一堆有噪音的数据中把它费力的学习出来。
机器学习中的过拟合
过拟合指的是referstoa模型对于训练数据拟合程度过当的情况。
当某个模型过度的学习训练数据中的细节和噪音,以至于模型在新的数据上表现很差,我们称过拟合发生了。这意味着训练数据中的噪音或者随机波动也被当做概念被模型学习了。而问题就在于这些概念不适用于新的数据,从而导致模型泛化性能的变差。
过拟合更可能在无参数非线性模型中发生,因为学习目标函数的过程是易变的具有弹性的。同样的,许多的无参数器学习算法也包括限制约束模型学习概念多少的参数或者技巧。
例如,决策树就是一种无参数机器学习算法,非常有弹性并且容易受过拟合训练数据的影响。这种问题可以通过对学习过后的树进行剪枝来解决,这种方法就是为了移除一些其学习到的细节。
机器学习中的欠拟合
欠拟合指的是模型在训练和预测时表现都不好的情况。
一个欠拟合的机器学习模型不是一个良好的模型并且由于在训练数据上表现不好这是显然的。
欠拟合通常不被讨论,因为给定一个评估模型表现的指标的情况下,欠拟合很容易被发现。矫正方法是继续学习并且试着更换机器学习算法。虽然如此,欠拟合与过拟合形成了鲜明的对照。
机器学习中好的拟合
理想上,你肯定想选择一个正好介于欠拟合和过拟合之间的模型。
这就是我们学习的目标,但是实际上很难达到。
为了理解这个目标,我们可以观察正在学习训练数据机器学习算法的表现。我们可以把这个过程划分为分别是训练过程和测试过程。
随着时间进行,算法不断地学习,模型在训练数据和测试数据上的错误都在不断下降。但是,如果我们学习的时间过长的话,模型在训练数据上的表现将继续下降,这是因为模型已经过拟合并且学习到了训练数据中的不恰当的细节以及噪音。同时,测试数据集上的错误率开始上升,也即是模型的泛化能力在下降。
这个完美的临界点就处于测试集上的错误率开始上升时,此时模型在训练集和测试集上都有良好的表现。
你可以用你自己喜爱的机器学习算法来实践这个实验。而在实践中这通常是无用的,因为在测试数据上运用这个技巧来选择训练停止的时机,这意味着这个测试集对于我们并不是“不可见的”或者单独的衡量标准。数据的一些知识(许多有用的知识)已经泄露到了训练过程。
通常有两种手段可以帮助你找到这个完美的临界点:重采样方法和验证集方法。
如何限制过拟合
过拟合和欠拟合可以导致很差的模型表现。但是到目前为止大部分机器学习实际应用时的问题都是过拟合。
过拟合是个问题因为训练数据上的机器学习算法的评价方法与我们最关心的实际上的评价方法,也就是算法在位置数据上的表现是不一样的。
当评价机器学习算法时我们有两者重要的技巧来限制过拟合:
使用重采样来评价模型效能
保留一个验证数据集
最流行的重采样技术是k折交叉验证。指的是在训练数据的子集上训练和测试模型k次,同时建立对于机器学习模型在未知数据上表现的评估。
验证集只是训练数据的子集,你把它保留到你进行机器学习算法的最后才使用。在训练数据上选择和调谐机器学习算法之后,我们在验证集上在对于模型进行评估,以便得到一些关于模型在未知数据上的表现的认知。
对于机器学习,使用交叉验证在未知数据上进行验证模型效能是一种良好的标准。如果你拥有数据,使用验证集也是一种良好的实践。
进一步阅读
如果你想学习更多关于机器学习中的泛化、过拟合和欠拟合的知识,本节列举了一些相关的推荐资源。
维基百科上的泛化
维基百科上过拟合
维基百科上的归纳推理
维基百科上的感应问题
Quora上的过拟合的直观解释
总结
本文中你学习了机器学习就是以感应方法来解决问题。
你学习了泛化是一种关于模型学习到的知识在未知数据上表现程度的概念描述。最后你学习了机器学习中的术语:泛化中的过拟合与欠拟合:
- 过拟合:在训练数据上表现良好,在未知数据上表现差。
- 欠拟合:在训练数据和未知数据上表现都很差
-
什么是欠拟合和过拟合
先看三张图片,这三张图片是线性回归模型 拟合的函数和训练集的关系
- 第一张图片拟合的函数和训练集误差较大,我们称这种情况为
欠拟合
- 第二张图片拟合的函数和训练集误差较小,我们称这种情况为
合适拟合
- 第三张图片拟合的函数完美的匹配训练集数据,我们称这种情况为
过拟合
类似的,对于逻辑回归同样也存在欠拟合和过拟合问题,如下三张图
2. 如何解决欠拟合和过拟合问题
欠拟合问题,根本的原因是特征维度过少,导致拟合的函数无法满足训练集,误差较大。
欠拟合问题可以通过增加特征维度来解决
过拟合问题,根本的原因则是特征维度过多,导致拟合的函数完美的经过训练集,但是对新数据的预测结果则较差。
解决过拟合问题,则有2个途径
- 减少特征维度; 可以人工选择保留的特征,或者模型选择算法
- 正则化; 保留所有的特征,通过降低参数θ的值,来影响模型
3. 正则化
回到前面
过拟合
例子, h(x) = θ0 + θ1x1 + θ2x2 + θ3x3 + θ4x4从图中可以看出,解决这个过拟合问题可以通过消除特征x3和x4的影响, 我们称为对参数的
惩罚
, 也就是使得参数θ3, θ4接近于0。最简单的方法是对代价函数进行改造,例如
这样在求解最小化代价函数的时候使得参数θ3, θ4接近于0。
正则化
其实就是通过对参数θ的惩罚来影响整个模型4. 线性回归使用正则化
前面几篇文章中,线性回归的
代价函数
J(θ)表达式如下正则化后,代价函数J(θ)表达式如下,注意j从1开始
注意λ值不能设置过大,否则会导致求出的参数除了θ0,其它θ1,θ2 ... θn值约等于0,导致预测函数h(x)出现极大偏差
我们的目标依然是求J(θ)最小值,我们还是用
梯度下降算法
和正规方程
求解最小化J(θ)1. 梯度下降算法(注意需要区分θ0和其它参数的更新等式)
2. 正规方程
对于正规方程来,需要修改等式如下
系数λ 所乘的矩阵为 (n+1)*(n+1)维
5. 逻辑回归使用正则化
和线性回归模型类型,逻辑回归也可以通过正则化来解决过拟合问题。
逻辑回归的
代价函数
J(θ)表达式如下正则化逻辑回归的代价函数,是在等式后加上一项,注意j从1开始
同样的用
梯度下降算法
求解最小化J(θ),也需要做改变不同的是逻辑回归模型中的预测函数 h(x)和线性回归不同
今天看了Andrew Ng cs229 Machine Learning 的公开课,很有收获,虽然对于视频中公式等的推导还是“晕”,但是,这是一步很好的开端!万事开头难!
术语
- hypothesis 假设
- regularization 正则化
- convex 凸
- cost function 成本函数
- polynominal 多项式
- fit the parameter 拟合参数
过拟合(overfitting or high variance)
过拟合又叫高偏差
现象:
就是模型太过复杂,力求覆盖每个数据,对训练集预测效果非常好!但是,泛化能力不好,一旦用测试集测试,预测结果却并不好!!!
线性回归和logistic回归都存在欠拟合和过拟合的问题。
原因
过拟合问题的出现常常因为下面两个原因:
1. 变量多(feature)
2. 数据少
3. 函数过于复杂解决办法:
- reduce features(人工选择重要的特征或者模型自动选择)
- regularization-正则化1
吴提出的观点:
越小的参数 θ ,假设就越简单
欠拟合(high bias)
指不能很好地拟合数据,一般是因为模型函数太简单或者特征较少。
参考
- 第一张图片拟合的函数和训练集误差较大,我们称这种情况为