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

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


四、 总结

内容 含义 举例
特征工程 构造新特征提高模型表现 面积 = 长 × 宽
多项式回归 增加高次项拟合非线性关系
特征交互 表达特征之间的关系
相关推荐
leoufung1 小时前
贪心算法理论与应用——以股票买卖问题为例
算法·贪心算法
瞻邈1 小时前
LION运行笔记
人工智能·深度学习
墨雪不会编程1 小时前
数据结构—排序算法篇三
数据结构·算法·排序算法
CoovallyAIHub1 小时前
外科医生离手术世界模型还有多远?首次提出SurgVeo基准,揭示AI生成手术视频的惊人差距
深度学习·算法·计算机视觉
t198751281 小时前
基于ELM算法在近红外光谱和拉曼光谱数据处理
算法
大千AI助手2 小时前
参考先验(Reference Priors)详解:理论与Python实践
人工智能·机器学习·贝叶斯·大千ai助手·参考先验·贝叶斯推断·先验
xqlily2 小时前
Prover9/Mace4 的形式化语言简介
人工智能·算法
资深web全栈开发2 小时前
二分搜索中 `right = mid` 而非 `right = mid + 1` 的解释
算法·rust·二分搜索
狮子也疯狂3 小时前
基于Django实现的智慧校园考试系统-自动组卷算法实现
python·算法·django