目录

多项式回归

什么是多项式回归

sklearn实现多项式回归

实战——多项式回归结合Pipeline管道机制

什么是Pipeline管道机制

sklearn实现管道机制

过拟合与欠拟合

什么是过拟合、欠拟合

模型正则化(Regularization)

范数、L1正则化与L2正则化

岭回归与Lasso回归

什么是岭回归与Lasso回归

岭回归与Lasso回归的形式

解决过拟合问题的方法

实战——岭回归的sklearn实现

实战——LASSO回归的sklearn实现


多项式回归

image-20220514092539757

什么是多项式回归

从本质上讲,多项式回归模型是线性回归模型的一种。

实际应用中,我们遇到的数据并不总是线性的,这时如果我们还拿线性模型去拟合,模

型的效果就会大打折扣。不过不用担心,此时,仍然可以使用线性回归的方法来拟合非线性

的数据,只不过我们要先对输入数据做一些处理。这样就出现了所谓的“多项式回归”。

例如:

  • 一元m次多项式回归方程为:

y^=b0+b1x+b2x2+...+bmxm

  • 二元二次多项式回归方程为:

    y^=b0+b1x1+b2x2+b3x12+b4x22+b5x1x2

在实际应用中,常常可以通过多项式回归扩展已有特征,从而解决非线性问题

sklearn实现多项式回归

在sklearn中实现多项式回归使用sklearn.preprocessing.PolynomialFeatures

在PolynomialFeatures(degree)中,degree参数代表多项式回归中特征的最高次数

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures


X = np.arange(1,11).reshape((-1,2))


# 使用最高次为2次的多项式回归对象
poly = PolynomialFeatures(degree=2)
X2 = poly.fit_transform(X) # 拟合并添加新特征
# 观察X2特征
print(X2)

实战——多项式回归结合Pipeline管道机制

image-20220514113332616

什么是Pipeline管道机制

管道机制在机器学习算法中得以应用的根源在于,重复使用某些固定操作。

管道机制实现了对全部步骤的流式化封装和管理(streaming workflows with pipelines)。

注意:

管道机制更像是编程技巧的创新,而非算法的创新。

sklearn实现管道机制

在sklearn中实现管道机制,使用的是sklearn.pipeline.Pipeline

import numpy as np
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import PolynomialFeatures


# 构造数据集
x = np.random.uniform(-3,3,size=100)
X = x.reshape((-1,1))
y = 0.5 * x**2 + x + 2 + np.random.normal(size=100)
# 使用Pipeline封装多个重复操作
pipeline = Pipeline([
   ("poly",PolynomialFeatures(degree=2)),  # 多项式回归操作
   ("std_scaler",StandardScaler()), # 特征标准化操作
   ("lin_reg",LinearRegression()) # 线性回归操作
])
pipeline.fit(X,y) # 分别经过管道的顺序操作
y_predict = pipeline.predict(X) # 预测
# 绘图
plt.scatter(x,y)  # 原数据特征与标签绘制散点图
plt.plot(np.sort(x),y_predict[np.argsort(x)],color='r')
plt.show()

过拟合与欠拟合

image-20220514103303972

什么是过拟合、欠拟合
  • 过拟合:算法所训练的模型过多地表达了数据的噪音
  • 欠拟合:算法所训练的模型不能完整表述数据关系

image-20220514103512391

注意:

过拟合在训练集上表现良好,但在测试集上却表现较差

模型正则化(Regularization)

image-20220514105814522

正则化( Regularization)的目的在于提高模型在未知测试数据上的泛化力,限制参数的大

小,减少泛化误差,是解决过拟合的一种重要方法。

范数、L1正则化与L2正则化
  • 范数

    假设x是一个向量,它的Lp范数定义

||x||p=(∑i|xi|p)1p

  • L1正则惩罚项:对应于L1范数

||w||1=∑i|wi|

  • L2正则惩罚项:对应于L2范数的平方

||w||22=∑iwi2

在目标函数后面添加一个“惩罚项”是正则化的常用方式,为了防止系数过大从而让模型变得复杂。在加了正则化项之后的目标函数为:

正则惩罚项J(w,b)=loss(w,b)+正则惩罚项

其中,J(w,b)是目标函数,loss(w,b)是损失函数

注意:

L1正则化能够使得损失函数中的许多参数变成0,可作为特征选择使用;

L2正则化更适用于防止模型过拟合

岭回归与Lasso回归

image-20220523221335278

什么是岭回归与Lasso回归
  • 岭回归与Lasso回归的出现是为了解决线性回归中出现的过拟合问题的
  • 岭回归引入的是L2范数惩罚项,Lasso回归引入的是L1范数惩罚项
  • Lasso回归能够使得损失函数中的许多θ均变成0,可作为特征选择使用

岭回归与Lasso回归的形式
  • 线性回归的损失函数

J(θ)=12m∑i=1m(hθ(x(i))−y(i))2

  • 岭回归的损失函数

J(θ)=12m∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2

  • Lasso回归的损失函数

J(θ)=12m∑i=1m(hθ(x(i))−y(i))2+λ∑j=1n|θj|

其中,λ称为正则化参数,如果λ选取过大,会把所有参数θ均最小化,造成欠拟合,如果

λ选取过小,会导致对过拟合问题解决不当

解决过拟合问题的方法
  • 降低模型的复杂度
  • 降低“噪音”(去除无效样本和无效特征)
  • 增加训练样本数
  • 使用验证集(目的是调整最合适的超参数)
  • 模型正则化

实战——岭回归的sklearn实现

image-20220523223822482

sklearn中使用sklearn.linear_model.Ridge实现岭回归

可以使用Pipeline管道机制将岭回归封装到操作中

def ridge_regression(degree,alpha):
  return Pipeline([
     ("poly",PolynomialFeatures(degree=degree)),
     ("std",StandardScaler()),
     ("ridge",Ridge(alpha=alpha)) # 岭回归使用Ridge实现
   ])

实战——LASSO回归的sklearn实现

image-20220523224536784

sklearn中使用sklearn.linear_model.Lasso实现Lasso回归

可以使用Pipeline管道机制将岭回归封装到操作中

def LassoRegression(degree, alpha):
  return Pipeline([
     ("poly", PolynomialFeatures(degree=degree)),
     ("std_scaler", StandardScaler()),
     ("lasso_reg", Lasso(alpha=alpha)) # Lasso回归使用Lasso实现
   ])

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐