机器学习(课堂笔记)Day07:多项式回归

目录

0x00 什么是多项式回归

0x01 scikit-learn中的多项式回归

0x02 过拟合和欠拟合

0x03 为什么要有训练数据集 与测试数据集

0x04 学习曲线

0x05 验证数据集与交叉验证

0x06 k-folds 交叉验证

0x07 偏差方差权衡

0x08 模型泛化与岭回归

0x09 LASSO Regularization

0x0A L1 ,L2 和弹性网络


0x00 什么是多项式回归

线性回归假设数据之间存在线性关系,那么当数据之间不存在线性关系时,应该用什么来拟合数据呢?  多项式回归

例如:

机器学习(课堂笔记)Day07:多项式回归

从x的角度来看 y=ax^2 +bx +c 是一个多项式回归,但是如果将x^2 看成一个特征 ,x看成另一个特征,那么 y=ax^2 +bx +c  仍旧是一个线性回归。

编程实现:

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

0x01 scikit-learn中的多项式回归

机器学习(课堂笔记)Day07:多项式回归

 

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

0x02 过拟合和欠拟合

过拟合:overfitting 算法所训练出来的模型过多的表达了数据间的噪音关系。模型为了拟合所有的样本点,变得过于复杂了
欠拟合:underfitting 算法所训练出来的模型不能完整表述数据关系

以猫和狗的识别为例:

如果机器学习算法认为 有眼睛就是狗,显然是欠拟合

如果机器学习算法认为 有眼睛...毛发为黄色的是狗,显然是过拟合。毛发为黄色只是训练数据的特征,这个特征不是一般性的特征

机器学习(课堂笔记)Day07:多项式回归

 

下面的例子中:我们的样本点是用2次方程加上一点噪音生成的,如果用一次方程去拟合,就是欠拟合,如果用高于二次方程的高次方程去拟合,就很有可能过拟合

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

0x03 为什么要有训练数据集与测试数据集

之前过拟合的曲线,如果我们取x=2.5,那么得到y_predict= 0.5左右,很明显和其他样本点不在一个趋势上。虽然过拟合曲线将现有的样本点拟合的非常好,但是对于新样本,过拟合曲线就不能很好的预测了。我们称这种模型的泛化能力不是很好

机器学习(课堂笔记)Day07:多项式回归

 

对训练数据拟合程度有多好是没有意义的,我们真正需要的是模型的泛化能力,所以我们需要将原本的数据分离为训练数据与测试数据。如果用训练数据训练出来的模型,对测试数据也有很好的结果的话,我们就说我们的模型泛化能力是很强的。

机器学习(课堂笔记)Day07:多项式回归

编程:

机器学习(课堂笔记)Day07:多项式回归

0x04 学习曲线

学习曲线:随着训练样本的逐渐增多,算法训练出的模型的预测准确率的变化曲线

机器学习(课堂笔记)Day07:多项式回归

 

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

0x05 验证数据集与交叉验证

之前我们将我们现有的数据集分为训练数据集和测试数据集,用测试数据集来测试模型的泛化能力,但是这样仍然存在一个问题:我们可能只是针对特定测试数据集拟合的很好,也就说,针对特定测试数据集过拟合。

解决方案一:

将现有的数据集分为三部分:

训练数据:用来训练模型

验证数据:用来测试训练出来的模型,不断调整超参数,保证训练出来的模型针对验证数据已经达到最优

测试数据:作为衡量最终模型性能的数据集

机器学习(课堂笔记)Day07:多项式回归

解决方案二:交叉验证

机器学习(课堂笔记)Day07:多项式回归

代码:

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

0x06 k-folds 交叉验证

把训练集分为k份,称为k-folds cross validation

缺点:每次需要训练k个模型,相当于整体性能慢了k倍

留一法:loo-cv leave-one-out cross validation

把训练数据集一共有m个样本,我们就将其分成m份,每次都将m-1份样本用于训练,然后去用模型测试剩下的一份样本,称为留一法。

优点:完全不受随机的影响,最接近模型真正的性能指标

缺点:m个中选1个,一共有m种情况,也就说我们需要训练m个模型来交叉验证,计算量巨大

0x07 偏差方差权衡

区分偏差和方差:

机器学习(课堂笔记)Day07:多项式回归

高偏差:模型准确率一直很低

高方差:模型准确率忽高忽低,即针对某些样本预测准确率很高,针对某些样本预测准确率很低。

模型误差 = 偏差(Bias)+方差(Variance)+不可避免的误差

导致偏差的主要原因:

对问题本身的假设不正确,如:非线性数据使用线性回归,例如:欠拟合

高方差:

数据的一点点扰动,都会较大的影响模型,通常原因:使用的模型太复杂,没有学习到本质,而是学习到了许多噪音,例如高阶多项式回归,过拟合

有一些算法天生是高方差的算法,例如kNN(数据敏感)

非参数学习算法通常都是高方差算法。因为不对数据进行任何假设

有一些算法天生是高偏差算法,如线性回归

参数学习通常都是高偏差算法,因为对数据具有极强的假设。

大多数算法具有相应的参数,可以调整偏差和方差,例如kNN中的k,如线性回归中使用多项式回归

偏差和方差通常是矛盾的

降低偏差,会提高方差

降低方差,会提高偏差

机器学习算法的主要挑战,来自于方差。

解决高方差的通常手段:

1.降低模型的复杂度

2.减少数据的维度,降噪

3.增加样本数

4.使用验证集

5.模型正则化

0x08 模型泛化与岭回归

模型正则化 Regularization: 限制参数的大小

机器学习(课堂笔记)Day07:多项式回归

我们之前的损失函数是:

机器学习(课堂笔记)Day07:多项式回归

即使样本值 和 用theta算出来的值的均方误差尽可能的小

但是当我们过拟合的时候,很有可能导致theta非常的大, 即曲线某些部分会非常陡峭,如下图:

机器学习(课堂笔记)Day07:多项式回归

我们如何才能让theta不要过大呢?加入模型正则化,修改损失函数。

机器学习(课堂笔记)Day07:多项式回归

即将theta1到thetaN的平方和加入到损失函数中,让我们在最小化损失函数的时候考虑到模型参数的大小,不要让曲线太陡峭

为什么没有theta0呢?因为theta0不是任何一个特征值的参数,theta0只是曲线的截距,决定了曲线的高低,而不会决定曲线的陡峭和缓和。

前面的1/2加不加都可以,只是为了求导后正好可以与theta头上的2约掉,方便计算。

α 是一个新的超参数,α代表了 theta平方和 占整个损失函数的比重的多少。我们有多重视对模型陡峭程度的优化。

以上这种模型正则化的方式称为 岭回归(Ridge Regression)

代码示例:

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

0x09 LASSO Regularization

LASSO: Least Absolute Shrinkage and Selection Opeartor Regression

机器学习(课堂笔记)Day07:多项式回归

代码:

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

如果一部分theta变为0了,就说明LASSO认为这些特征是完全没有用的,

但是有时会将一些原本有用的特征的参数变为0

机器学习(课堂笔记)Day07:多项式回归

机器学习(课堂笔记)Day07:多项式回归

0x0A L1 ,L2 和弹性网络

机器学习(课堂笔记)Day07:多项式回归

L1正则 L2正则:

Lp范数:xi到原点的明科夫斯基距离

机器学习(课堂笔记)Day07:多项式回归

L0正则:

让非零theta的个数尽可能少

机器学习(课堂笔记)Day07:多项式回归

实际用L1取代,因为L0正则的优化是一个NP难的问题

弹性网:Elastic Net

在均方误差之后,既添加了一个L1正则项又添加了一个L2正则项

只不过又添加了一个超参数 r ,来表示这两项的比例:

机器学习(课堂笔记)Day07:多项式回归

 

 

 

 

上一篇:Python基础 day07--集合


下一篇:day07数组