线性回归 特征扩展的原理与python代码的实现

简介: 在线性回归中,多项式扩展是种比较常见的技术,可以通过增加特征的数量和多项式项的次数来提高模型的拟合能力。举个例子,多项式扩展可以将一个包含 n 个特征的样本向量 x 扩展为一个包含 k 个特征的样本向量,其中 k 可以是 n 的任意多项式。例如,如果我们使用二次多项式扩展,可以将样本向量[x1, x2]扩展为一个包含原始特征和交叉项的新特征向量,例如 [x1, x2, x1^2, x2^2, x1*x2]。这些新特征可以捕捉到更丰富的特征组合和非线性关系,从而提高模型的拟合能力。

1 多项式扩展的作用


在线性回归中,多项式扩展是种比较常见的技术,可以通过增加特征的数量和多项式项的次数来提高模型的拟合能力。


举个例子,多项式扩展可以将一个包含 n 个特征的样本向量 x 扩展为一个包含 k 个特征的样本向量,其中 k 可以是 n 的任意多项式。例如,如果我们使用二次多项式扩展,可以将样本向量[x1, x2]扩展为一个包含原始特征和交叉项的新特征向量,例如 [x1, x2, x1^2, x2^2, x1*x2]。这些新特征可以捕捉到更丰富的特征组合和非线性关系,从而提高模型的拟合能力。


在多项式扩展后,我们可以使用线性回归模型来拟合扩展后的数据,并计算模型的拟合误差来评估模型的性能。通常,随着多项式项的增加,模型的拟合误差会降低,但同时也可能过度拟合训练数据,并在新数据上表现较差。


因此,在使用多项式扩展时需要注意平衡模型的拟合能力和泛化能力,并使用正则化等技术来避免过度拟合。


2 多项式扩展的函数


在Python中,可以使用 Scikit-learn 库中的 PolynomialFeatures 类来进行多项式扩展。


PolynomialFeatures 类可以将原始特征矩阵 X 转换为包含多项式特征的新特征矩阵。在转换过程中,PolynomialFeatures 可以指定扩展的次数,也就是多项式的最高次数。例如,如果指定次数为 2,PolynomialFeatures 将原始特征矩阵 X 扩展为包含所有一次项、二次项和交叉项的新特征矩阵。


2.1 接收参数


PolynomialFeatures用于创建一个多项式扩展类,其接收参数为:


degree:指定多项式的最高次数。默认为 2。

interaction_only:布尔值,表示是否仅包含交叉项。如果将其设置为 True,则仅包含原始特征之间的交叉项,而不包括原始特征本身(比如x 2 x^{2}x 2 这种)。默认为 False。nclude_bias:布尔值,表示是否包含常数项。如果将其设置为 True,则在扩展特征矩阵中包含常数项,即所有元素都为 1 的一列。默认为 True。

创建类后,fit_transform 方法用于将原始特征矩阵 X 转换为多项式扩展后的新特征矩阵 X_poly。该函数的接收参数为原始数据,即:

X_poly = poly.fit_transform(X)
1

这里的fit_transform函数实际为fit函数+transform函数。当我们执行预测时,单独使用transform函数即可(见2.2中的例子)。

作为sklearn中的fit函数,该函数同样可以接收y,只不过y在被函数接收后不会进行任何计算。


ae663d807ba9ee3d51deef115a777fbc.png

2.2 多项式扩展示例


这里提供一个简单的二项式扩展的例子。

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
# 创建一些虚拟数据
X = np.array([[1, 2], [3, 4], [5, 6]])
# 定义二次多项式扩展器
poly = PolynomialFeatures(degree=2)
# 进行二次多项式扩展
X_poly = poly.fit_transform(X)
# 打印扩展后的特征矩阵
print(X_poly)

代码中,我们首先创建了一个包含 3 个样本和 2 个特征的虚拟数据集 X。然后,我们创建了一个 PolynomialFeatures 对象,并将其次数设置为 2。接下来,我们使用 fit_transform 方法将 X 扩展为一个包含所有一次项、二次项和交叉项的新特征矩阵 X_poly。最后,我们打印出扩展后的特征矩阵 X_poly,结果如下:


7415a47cbb480c4ac908fe848ea7f202.png


3 多项式扩展的完整实例


此处以波士顿房价数据集为例。该数据集目前可以直接从sklearn.datasets数据集中导出。导出是会有未来版本警告,即未来的版本由于伦理问题会删除该数据集,目前大家直接忽视警告即可。

完整代码如下:

# 从Scikit-learn库中导入波士顿房价数据集  
from sklearn.datasets import load_boston  
# 导入所需的类和函数  
from sklearn.preprocessing import PolynomialFeatures  
from sklearn.linear_model import LinearRegression  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import mean_squared_error  
# 加载波士顿房价数据集  
boston = load_boston()  
# 提取特征和目标变量  
X = boston.data  # 特征矩阵  
y = boston.target  # 目标变量(房价)  
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=66)  
# 多项式扩展  
poly = PolynomialFeatures(degree=2)  # 创建一个2次多项式特征扩展器  
X_train_poly = poly.fit_transform(X_train)  # 对训练集进行多项式扩展  
X_test_poly = poly.transform(X_test)  # 对测试集进行多项式扩展  
# 拟合多项式回归模型  
model = LinearRegression()  # 创建一个线性回归模型  
model.fit(X_train_poly, y_train)  # 在扩展后的训练集上拟合线性回归模型  
# 在测试集上进行预测并计算MSE  
y_pred = model.predict(X_test_poly)  # 对扩展后的测试集进行预测  
mse = mean_squared_error(y_test, y_pred)  # 计算MSE  
# 打印MSE  
print(mse)


相关文章
|
7月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
364 100
|
7月前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
542 95
|
7月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
387 88
|
7月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
1256 68
|
8月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1215 102
|
8月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
456 104
|
8月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
353 103
|
8月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
347 82
|
7月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
457 3
|
7月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
676 3

推荐镜像

更多