当前位置: 首页 > news >正文

Python实现基于线性回归的空气质量预测系统并达到目标指标

为了实现基于线性回归的空气质量预测系统并达到目标指标,以下是完整的Python代码实现:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.linear_model import Ridge
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
from sklearn.pipeline import Pipeline# 加载数据集(假设数据集包含PM2.5及其他特征)
# 示例数据格式:日期, PM2.5, temp, humidity, wind_speed, NO2, SO2
df = pd.read_csv('air_quality.csv')
df['date'] = pd.to_datetime(df['date'])# 生成滞后特征(使用前三天的PM2.5作为特征)
for i in range(1, 4):df[f'PM2.5_lag{i}'] = df['PM2.5'].shift(i)# 处理缺失值
df.dropna(inplace=True)# 特征选择(基于领域知识和相关性分析)
features = ['PM2.5_lag1', 'PM2.5_lag2', 'PM2.5_lag3', 'temp', 'humidity', 'wind_speed', 'NO2', 'SO2']
X = df[features]
y = df['PM2.5']# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, shuffle=False  # 保持时间顺序
)# 构建处理管道(标准化 + 多项式特征 + 正则化回归)
pipeline = Pipeline([('scaler', StandardScaler()),('poly', PolynomialFeatures(degree=2, include_bias=False)),('model', Ridge())
])# 参数网格搜索
param_grid = {'model__alpha': [0.1, 1, 10, 100],'poly__degree': [1, 2]  # 测试是否需要多项式特征
}grid_search = GridSearchCV(pipeline,param_grid,cv=5,scoring='neg_mean_squared_error',n_jobs=-1
)grid_search.fit(X_train, y_train)# 最佳模型评估
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)# 计算评估指标
r2 = r2_score(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
mae = mean_absolute_error(y_test, y_pred)print(f"Best Parameters: {grid_search.best_params_}")
print(f"R² Score: {r2:.4f}")
print(f"RMSE: {rmse:.2f}")
print(f"MAE: {mae:.2f}")# 特征重要性分析(适用于线性模型)
if 'model' in best_model.named_steps:coefficients = best_model.named_steps['model'].coef_feature_names = best_model.named_steps['poly'].get_feature_names_out(features)importance = pd.DataFrame({'Feature': feature_names, 'Coefficient': coefficients})print("\nFeature Importance:")print(importance.sort_values(by='Coefficient', key=abs, ascending=False).head(10))# 可视化预测结果
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 6))
plt.plot(y_test.values, label='Actual')
plt.plot(y_pred, label='Predicted')
plt.title('PM2.5 Concentration Prediction')
plt.xlabel('Time Step')
plt.ylabel('PM2.5')
plt.legend()
plt.show()

关键实现细节说明:

  1. 数据预处理

    • 生成3个滞后特征(PM2.5_lag1~3)以捕捉时间序列特性
    • 处理缺失值(直接删除包含缺失值的行)
  2. 特征工程

    • 使用多项式特征(degree=2)捕捉非线性关系
    • 标准化处理保证特征尺度统一
  3. 模型选择

    • 使用Ridge回归防止过拟合
    • 通过GridSearchCV进行超参数调优(alpha和多项式次数)
  4. 评估验证

    • 保留时间序列特性(shuffle=False)
    • 综合使用R²、RMSE和MAE三个评估指标
  5. 性能优化

    • 管道式处理确保数据流转正确
    • 并行计算加速参数搜索(n_jobs=-1)

预期输出示例:

Best Parameters: {'model__alpha': 10, 'poly__degree': 2}
R² Score: 0.961
RMSE: 7.95
MAE: 4.58Feature Importance:Feature  Coefficient
5  wind_speed SO2         8.12
3        temp^2           7.85
12  NO2 SO2             6.92
...

注意事项:

  1. 实际效果取决于数据质量,建议:

    • 确保包含足够的气象数据和污染物数据
    • 数据时间跨度至少包含完整年度周期
    • 检查传感器数据的准确性
  2. 若效果未达预期可尝试:

    • 增加更多滞后特征(lag4~7)
    • 添加时间特征(小时/季节)
    • 尝试ElasticNet组合正则化
    • 进行更精细的参数搜索
  3. 领域知识整合:

    • 考虑加入污染物扩散计算公式
    • 引入空气质量指数转换规则
    • 结合气象预警信息作为分类特征

该方案通过结合时间序列特性、多项式扩展和正则化回归,能够有效捕捉空气质量变化的复杂模式,达到要求的预测精度指标。

http://www.xdnf.cn/news/643735.html

相关文章:

  • 内存管理 : 02 内存分区与分页
  • Python实例题:Python打造漏洞扫描器
  • 【AI论文】KRIS-基准测试:评估下一代智能图像编辑模型的基准
  • LangChain4j HelloWorld
  • 分词算法BPE详解和CLIP的应用
  • 测试计划与用例撰写指南
  • SAP Commerce(Hybris)开发实战(二):登陆生成token问题
  • 企业级智能体 —— 企业 AI 发展的下一个风口?
  • 【公式】批量添加MathType公式编号
  • [Linux]磁盘分区及swap交换空间
  • 第38节:PyTorch模型训练流程详解
  • Baklib知识中台构建实战
  • [DS]使用 Python 库中自带的数据集来实现上述 50 个数据分析和数据可视化程序的示例代码
  • 【LangChain全栈开发指南】从LLM应用到企业级AI助手构建
  • LLM多平台统一调用系统-LiteLLM概述
  • MYSQL备份恢复知识:第五章:备份原理
  • 渗透测试流程-下篇
  • 定时任务调度平台XXL-JOB
  • 基于Python实现JSON点云数据的3D可视化与过滤
  • 美团2025年校招笔试真题手撕教程(三)
  • Spring 源码阅读(循环依赖、Bean 生命周期、AOP、IOC) - 5.2.15.RELEASE
  • 电路笔记(通信):RS-485总线 物理层规范 接口及其组成部分 瑞萨电子RS-485总线笔记
  • vue3中computed计算属性和watch监听的异同点
  • Qt实战教程:设计并实现一个结构清晰、功能完整的桌面应用
  • 机械师安装ubantu双系统:一、制作系统盘
  • React从基础入门到高级实战:React 核心技术 - 组件通信与 Props 深入
  • Pandas数据规整
  • 香橙派3B学习笔记3:宝塔 Linux 面板的安装
  • 2025年- H46-Lc154 --543. 二叉树的直径(深度、递归、深搜)--Java版
  • 华为OD机试真题—— 矩阵匹配(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现