3. 基础模型回顾:线性回归、决策树、支持向量机在环境预测中的应用

各位同学,咱们今天聊聊三个老朋友——线性回归、决策树、支持向量机。说实话,这三个模型在环境预测里,就像工具箱里的扳手、螺丝刀和电钻。各有各的脾气,也各有各的绝活。

我刚开始做环境预测那会儿,总觉得模型越复杂越好。后来被现实狠狠教育了一顿。你想想看,有时候一个简单的线性回归,反而比那些花里胡哨的深度学习模型更靠谱。为什么?因为环境数据太脏了,太乱了。

3.1 线性回归:简单但别小看它

线性回归,说白了就是找一条直线,让所有数据点到这条线的距离之和最小。嗯,就这么简单。

在环境预测里,我经常用它做两件事:

  • 趋势分析:比如PM2.5浓度随时间的变化趋势
  • 相关性分析:比如气温和臭氧浓度的关系

举个实际例子。我曾经帮一个工业园区做空气质量预测。他们想看看风速和污染物扩散的关系。我直接用线性回归拟合了一下,R²达到了0.78。虽然不算特别高,但足够说明问题了。

核心公式:y = wx + b

其中w是权重,b是偏置。说白了,就是找一条最合适的直线。

# 一个简单的线性回归示例
from sklearn.linear_model import LinearRegression
import numpy as np

# 假设我们有风速和PM2.5的数据
wind_speed = np.array([2, 4, 6, 8, 10]).reshape(-1, 1)
pm25 = np.array([150, 120, 90, 60, 30])

model = LinearRegression()
model.fit(wind_speed, pm25)

print(f"斜率: {model.coef_[0]:.2f}")
print(f"截距: {model.intercept_:.2f}")

避坑指南:我曾经犯过一个低级错误——直接用线性回归预测非线性关系。比如气温和臭氧浓度,其实是U型关系,用线性回归拟合,结果惨不忍睹。所以,先画个散点图看看趋势,再做决定。

3.2 决策树:像做决策一样做预测

决策树,你可以把它想象成一个「如果-那么」的规则集合。比如:如果温度大于30度,那么臭氧浓度高;如果温度小于30度,那么臭氧浓度低。就这么一层层分下去。

我个人特别喜欢决策树的一点是——它完全不需要数据标准化。你想想看,环境数据里,有的变量是温度(0-40度),有的是湿度(0-100%),有的是风速(0-20m/s)。用线性回归,你得先标准化。但决策树不用,它只管分叉。

我记得有一次做水质预测,数据里有pH值、溶解氧、浊度等十几个指标。用决策树跑了一遍,发现最重要的分叉点是溶解氧。嗯,这个结果和专家经验完全吻合。

小技巧:决策树容易过拟合,尤其是深度太大的时候。我一般把最大深度限制在5-8层,效果最好。

# 决策树示例
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split

# 假设我们有环境特征数据
X = np.random.rand(100, 5)  # 5个特征
y = np.random.rand(100)     # 目标变量

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

tree = DecisionTreeRegressor(max_depth=5, min_samples_leaf=10)
tree.fit(X_train, y_train)

print(f"训练集R²: {tree.score(X_train, y_train):.3f}")
print(f"测试集R²: {tree.score(X_test, y_test):.3f}")

3.3 支持向量机:小样本的救星

支持向量机(SVM),这个名字听起来挺唬人。其实核心思想很简单:找一个超平面,把不同类别的数据分开,而且让这个超平面离两边数据都尽可能远。

在环境预测里,SVM特别适合处理小样本问题。为什么?因为环境监测站点有限,有时候一个城市只有十几个监测点。用深度学习?数据量不够。用线性回归?非线性关系拟合不好。这时候,SVM就派上用场了。

我做过一个项目,只有30个监测点的数据,要预测整个区域的空气质量。用SVM配合RBF核函数,效果出奇的好。R²达到了0.85,比决策树高了将近10个百分点。

关键参数

  • C:惩罚系数,越大越容易过拟合
  • gamma:RBF核的参数,控制单个样本的影响范围
  • kernel:核函数,常用的是RBF和线性核
# SVM示例
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler

# SVM对数据尺度敏感,一定要标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

svm = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=0.1)
svm.fit(X_train_scaled, y_train)

print(f"SVM测试集R²: {svm.score(X_test_scaled, y_test):.3f}")

避坑指南:我曾经用SVM时,忘了标准化数据,结果模型完全跑偏。SVM对数据尺度非常敏感,不像决策树那么「皮实」。所以,标准化这步千万别省。

3.4 三个模型的对比

说了这么多,咱们来做个对比。我根据自己的经验,整理了一个表格:

特性 线性回归 决策树 支持向量机
数据量要求 中等 中等 小样本表现好
是否需要标准化
可解释性
非线性拟合能力 强(配合核函数)
过拟合风险 中等
训练速度 中等

你想想看,在实际项目中该怎么选?我的建议是:

  • 如果数据量少(几十个样本),优先试SVM
  • 如果数据量大(几千个样本),决策树或线性回归都行
  • 如果关系简单(线性关系),线性回归就够了
  • 如果关系复杂(非线性),决策树或SVM

3.5 知识体系图

下面这张图,是我自己画的。它把这三个模型的核心逻辑串起来了。你看一眼,就能明白它们各自的位置。

基础模型在环境预测中的应用 线性回归 决策树 支持向量机 特点 • 简单直观,可解释性强 • 适合线性关系 • 对异常值敏感 特点 • 无需数据标准化 • 可解释性高 • 容易过拟合 特点 • 小样本表现好 • 需要标准化 • 核函数选择关键 典型应用场景 趋势分析 | 相关性分析 | 分类预测 | 回归预测 | 异常检测 集成学习:取长补短,提升预测精度

这张图你看懂了吗?三个模型各有千秋。线性回归简单,决策树灵活,SVM稳健。但说实话,单独用任何一个,都有短板。这就是为什么我们要学集成学习——把它们的优点结合起来。

我的经验:在实际项目中,我很少只用单个模型。通常的做法是:先用线性回归做个baseline,再用决策树看看特征重要性,最后用SVM做精细调优。三个模型的结果一对比,心里就有底了。

好了,这一章就到这里。记住一句话:没有最好的模型,只有最合适的模型。下一章,咱们聊聊怎么把这些基础模型组合起来,做成集成模型。


专注资料整理