这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战
在某些回归问题中会遇到过度拟合的问题而导致他们的表现欠佳。
什么是过度拟合?
对于线性回归中的房价问题,我们给出一个数据集:
如果对其进行拟合:
可以明显看出这个的拟合效果并不好,我们称之为: underfit 欠拟合,或者被称为 high bias 高偏差。
使用二阶拟合良好。
但是如果使用一个四阶多项式,这似乎完美地拟合了数据,因为这条曲线通过了所有的数据点,但是我们主观上知道这并没有很好地拟合数据,这种情况就被称为 overfit 过度拟合,或者说 high variance 高方差。
逻辑回归也是如此:
Overfitting: If we have too many features, the learned hypothesis may fit the training set very well , but fail to generalize to new examples (predict prices on new examples).
过渡拟合的问题概括的说,将会在变量x多的时候出现,这是训练的假设能很好地拟合训练集,所以你的代价函数非常接近于0。但你是你可能会得到这样的曲线:它努力拟合样本数据导致其无法泛化到新样本当中。
所谓泛化就是一个假设模型应用到新样本中的能力。
对于过度拟合有两个办法来解决:
- Reduce number of features
- Manually select which features to keep
- Model selection algorithm (later in course)
- 减小选取变量的数量
- 人工选择保留哪些变量
- 模型选择算法,该算法会自动选择哪些特征需要保留,哪些特征要舍弃
这个方法的缺点是你需要放弃一些特征量,也就意味着你放弃了一些关于问题的信息。例如也许所有的特征变量都是有用的,我们就不能随意舍弃。
-
Regularization
- Keep all the features but reduce magnitude /values of parameters
- Works well when we have a lot of features, each of which contributes a bit to predicting y
-
正则化
- 保留所有的特征变量,但是减少量级或者参数的大小
- 当我们特征量很多的时候这个方法非常有效,其中每一个变量都会对预测y值产生一点影响。
正则化
又回到这个问题:
二阶时候能对其进行拟合,效果良好。
但是更高阶却会出现过拟合现象。
对于这个例子我们知道和是没必要的,那我们在的代价函数中加入惩罚项,使和变得非常小。
怎么让这两项变得特别小,怎么加一个“惩罚项”:在代价函数后边给这两项加上巨大的系数,比如加上1000。那这两项的代价函数就会变成:,后边多出来这一块就是“惩罚项”。
代价函数是干嘛用的?求最小值,将得到最小值时候θ的值作为预测函数的θ。
加上惩罚项以后,带着两个1000的系数,怎么才能让代价函数取得较小的值?那就需要和变得特别小,甚至于接近于0。既然现在和都是极小的数接近于0,那带回预测函数中,,这样就变成了二阶函数加上一些也别小的项,那后两项特别小的就可以忽略不计,又回到了近似于二阶函数的样子。
参数值θ较小意味着一个更简单的假设模型。比如上边的例子中,加入惩罚项之后和接近于0,我们得到了一个更简单的假设模型(四次变二次)。
正则化:
Regularization.
Small values for parameters .
- "Simpler" hypothesis
- Less prone to overfitting
正则化思想就是当我们为所有参数项都加上惩罚项,那么就相当于尽量去简化这个假设模型。因为越多的参数值接近于0,我们得到的预测模型就会越平滑、简单。
- 就是正则化项,其作用是来缩小每个参数的值。从开始哦,因为测试证明不管你加不加,最后结果差别都不大,所以一般都从开始正则化。
- 是正则化参数,作用是控制两个不同目标之间的取舍。
- 第一个目标:与目标函数的第一项有关,就是如何更好的拟合训练集
- 第二个目标:尽量保持参数值较小,保持预测模型简单,与正则化有关
- :注意选择,可以联想考虑一下之前的学习速率α
- 如果太大:我们对这些参数惩罚程度太大,导致所有才参数值都有接近于0,那最后预测函数就会接近于一个常数函数,会造成欠拟合。
- 如果太小:惩罚了和没惩罚一个样。
之前举的例子只是借用了正则化的思想,告诉你如何缩小参数θ,现在举个正则化的例子:
Housing:
- Features:
- Parameters:
还是预测房屋价格,假设现在有100个特征值,有101个参数θ,假设测试数据有70组。
正则化之后其代价函数写为: