机器学习(6)特征工程与多项式回归

一、特征工程(Feature Engineering)

1. 定义

特征工程 是指:

通过对原始特征进行转换、组合或提取,生成新的、更能表达数据规律的特征,从而提升模型性能。

机器学习中有句话:

"数据和特征决定了机器学习的上限,模型只是逼近这个上限。"

2. 特征工程的核心思想

  • 用已有的原始特征 x1​,x2​,...,xn​ 生成新的组合特征;

  • 让模型能更好地捕捉非线性关系;

  • 在保持模型简单的前提下,提高拟合能力。

3. 示例:房价预测中的特征构造

假设我们原本只有两个特征:

特征 含义
x1​ 房屋长度(m)
x2​ 房屋宽度(m)

可以生成新的特征:

含义:房屋面积(平方米)

这样,新的特征 x3​ 捕捉了原始特征间的交互关系,模型就能更好地学习面积与房价之间的非线性映射。

4. 其他常见特征工程方法

方法 示例 含义
交叉特征 捕捉交互作用
多项式特征 表达非线性关系
对数/平方根 缩小数值范围
离散化 房价区间分类 简化连续变量
独热编码(One-hot) 城市名称 → [0,1] 向量 表示类别型特征

二、多项式回归(Polynomial Regression)

1. 背景

线性回归假设输入与输出之间是线性关系:

但在很多真实问题中,关系往往是非线性的,比如:

"面积增加带来的房价提升不是恒定的,而是先快后慢。"


2. 思路

通过添加多项式特征,将原来的线性模型扩展为非线性模型

虽然包含了平方、立方项,但模型本质上仍是线性的 ------因为它对参数 w1​,w2​,w3​ 是线性的。


3. 多项式特征示例

假设原始特征只有一个 x:

原特征 扩展特征
x

模型变为:

这样,曲线就能更好地拟合复杂数据。


4. 代码实现(以房价为例)

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

# 模拟数据
x = np.linspace(0, 10, 30).reshape(-1, 1)
y = 2 + 1.5*x - 0.3*(x**2) + np.random.randn(30,1)*2

# 生成二次多项式特征
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(x)

# 拟合模型
model = LinearRegression()
model.fit(X_poly, y)

# 预测
y_pred = model.predict(X_poly)

# 可视化
plt.scatter(x, y, color='blue', label='Data')
plt.plot(x, y_pred, color='red', label='Polynomial Fit')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

输出结果:红色曲线是一条平滑的二次曲线,比单纯的直线拟合效果更好。


5. 多项式回归的优缺点

优点 缺点
能拟合非线性数据 容易过拟合
模型形式简单 高阶特征导致计算量上升
可用线性回归求解 需要进行特征缩放

6. 模型关系总结

模型 特征形式 是否线性
线性回归 x 线性
多项式回归 参数线性、输入非线性
特征交叉回归 表达交互关系

三、例子:房价的多项式回归预测

1. 问题

假设房价 yyy 与房屋面积 x 的关系并非简单线性:

面积(㎡) 房价(万元)
50 100
80 160
100 200
120 240
150 260
180 270

你会发现:当面积增大时,房价增长逐渐放缓 ,属于典型的非线性关系


2. 一阶线性回归拟合

线性模型:

拟合后发现,高面积段误差较大(欠拟合)。


3. 二阶多项式回归拟合

扩展特征:

模型变为:

此时曲线能更好地贴合真实趋势,误差显著降低。


4. 可视化结果

python 复制代码
# 房价数据
x = np.array([50, 80, 100, 120, 150, 180]).reshape(-1,1)
y = np.array([100, 160, 200, 240, 260, 270])

# 多项式拟合
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(x)

model = LinearRegression()
model.fit(X_poly, y)
y_pred = model.predict(X_poly)

plt.scatter(x, y, label='True data')
plt.plot(x, y_pred, color='r', label='Polynomial Regression (degree=2)')
plt.xlabel('Area (m²)')
plt.ylabel('Price (10k yuan)')
plt.legend()
plt.show()

输出结果:是一条弯曲的红线,在中高段能更好地拟合真实房价走势。


四、 总结

内容 含义 举例
特征工程 构造新特征提高模型表现 面积 = 长 × 宽
多项式回归 增加高次项拟合非线性关系
特征交互 表达特征之间的关系
相关推荐
weisian1511 小时前
Java并发编程--47-分布式ID生成器:雪花算法(Snowflake)与时钟回拨问题
java·算法·时钟回拨·雪花算法id
隔壁大炮1 小时前
Day07-RNN层(循环网络层)
人工智能·pytorch·python·rnn·深度学习·神经网络·计算机视觉
itzixiao1 小时前
L1-066 猫是液体(5分)[java][python]
java·开发语言·python·算法
ytttr8731 小时前
MATLAB SIFT图像配准实现
算法·机器学习·matlab
小饕2 小时前
从 Word2Vec 到多模态:词嵌入技术的演进全景
人工智能·算法·机器学习
海参崴-2 小时前
AVL树完整实现与深度解析
算法
一个爱编程的人2 小时前
一个数是不是素数
数据结构·算法
吻等离子2 小时前
机器学习基本概念篇(含思维导图)
人工智能·机器学习
Hui_AI7202 小时前
基于RAG的农产品GEO溯源智能问答系统实现
开发语言·网络·人工智能·python·算法·创业创新
lwf0061642 小时前
FFM (Field-aware Factorization Machine) 学习日记
算法·机器学习