【Sklearn驯化-多项式特征】一文搞懂机器学习中多项式特征提取,PolynomialFeatures使用技巧
本次修炼方法请往下查看
🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站
🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验。
🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100% 。
📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。
下滑查看解决方法
🎯 1. 基本介绍
在机器学习中,许多算法基于线性模型,但现实世界的数据往往具有非线性特征。PolynomialFeatures 是 scikit-learn 库中的一个预处理步骤,它可以从现有特征中生成新的特征,这些新特征是原始特征的幂次组合,从而允许模型学习数据中的非线性模式。
💡 2. 公式推导
给定一个特征向量 x = [x1, x2, …, xn],PolynomialFeatures 将生成原始特征的所有幂次组合,直到指定的次数 d。生成的特征集合可以表示为:
f
e
a
t
u
r
e
s
=
[
x
1
,
x
2
,
x
3
,
.
.
.
.
.
,
x
n
,
x
1
2
,
x
2
2
,
.
.
.
.
x
n
2
,
.
.
.
.
]
features = [x1,x2,x3,.....,xn,x1^2, x2^2,....xn^2,....]
features=[x1,x2,x3,.....,xn,x12,x22,....xn2,....]
其中,k 和 l 是非负整数,且 k + l ≤ d。
💡 3. 代码实践
我们构建一个简单的数据来通过上述的方法提取特征,具体的代码如下所示:
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 生成模拟回归数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建PolynomialFeatures实例,指定多项式的度数
poly_features = PolynomialFeatures(degree=2)
# 转换训练集和测试集特征
X_train_poly = poly_features.fit_transform(X_train)
X_test_poly = poly_features.transform(X_test)
# 创建线性回归模型实例
lin_reg = LinearRegression()
# 训练模型
lin_reg.fit(X_train_poly, y_train)
# 在测试集上进行预测
y_pred = lin_reg.predict(X_test_poly)
# 计算MSE
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差(MSE): {mse:.2f}")
💡 4. 注意事项
- 多项式特征会显著增加特征的数量,特别是当特征维度较高或多项式的度数较大时。这可能导致维数灾难。
- 特征的缩放对多项式转换很敏感,因此在应用 PolynomialFeatures 之前,通常需要对特征进行标准化或归一化。
- 选择合适的多项式度数是关键,过高或过低的度数都可能影响模型的性能。
💡 5. 总结
PolynomialFeatures 是 scikit-learn 中一个强大的工具,它允许模型通过增加多项式特征来捕捉数据中的非线性关系。通过本博客的代码示例,我们学习了如何使用 PolynomialFeatures 进行特征转换、训练和评估模型。希望这篇博客能够帮助你更好地理解并应用多项式特征转换技术。