机器学习(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()

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


四、 总结

内容 含义 举例
特征工程 构造新特征提高模型表现 面积 = 长 × 宽
多项式回归 增加高次项拟合非线性关系
特征交互 表达特征之间的关系
相关推荐
知花实央l3 小时前
【算法与数据结构】拓扑排序实战(栈+邻接表+环判断,附可运行代码)
数据结构·算法
lingling0094 小时前
机械臂动作捕捉系统选型指南:从需求到方案,NOKOV 度量光学动捕成优选
人工智能·算法
吃着火锅x唱着歌4 小时前
LeetCode 410.分割数组的最大值
数据结构·算法·leetcode
Blossom.1184 小时前
把AI“刻”进玻璃:基于飞秒激光量子缺陷的随机数生成器与边缘安全实战
人工智能·python·单片机·深度学习·神经网络·安全·机器学习
Benny_Tang4 小时前
题解:P7989 [USACO21DEC] Bracelet Crossings G
c++·算法
YSRM4 小时前
Leetcode+Java+图论+并查集
算法·leetcode·图论
Aurora-silas5 小时前
LLM微调尝试——MAC版
人工智能·pytorch·深度学习·macos·机器学习·语言模型·自然语言处理
XIAO·宝6 小时前
深度学习------YOLOV3
人工智能·深度学习·yolo