天池工业蒸汽量预测代码及详解

本文详细介绍了参与天池工业蒸汽量预测比赛的过程,从赛题背景、数据梳理到建模过程。通过分析数据,剔除特征,建立并比较了多种回归模型(如KNN、线性回归、随机森林等),最终选择最优模型进行预测,得出预测误差。文章强调了特征选择和模型融合的重要性,并分享了不同建模阶段的预测误差,为后续优化提供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、赛题介绍

赛题背景

火力发电的基本原理是:燃料在燃烧时加热水生成蒸汽,蒸汽压力推动汽轮机旋转,然后汽轮机带动发电机旋转,产生电能。在这一系列的能量转化中,影响发电效率的核心是锅炉的燃烧效率,即燃料燃烧加热水产生高温高压蒸汽。锅炉的燃烧效率的影响因素很多,包括锅炉的可调参数,如燃烧给量,一二次风,引风,返料风,给水水量;以及锅炉的工况,比如锅炉床温、床压,炉膛温度、压力,过热器的温度等。

赛题描述

经脱敏后的锅炉传感器采集的数据(采集频率是分钟级别),根据锅炉的工况,预测产生的蒸汽量。

数据说明

数据分成训练数据(train.txt)和测试数据(test.txt),其中字段”V0”-“V37”,这38个字段是作为特征变量,”target”作为目标变量。选手利用训练数据训练出模型,预测测试数据的目标变量,排名结果依据预测结果的MSE(mean square error)。

结果提交

选手需要提交测试数据的预测结果(txt格式,只有1列预测结果)。

结果评估

预测结果以mean square error作为评判标准。

赛题数据
https://tianchi.aliyun.com/competition/entrance/231693/information

2、数据梳理

官方页面提供了两个 txt 格式的数据,一个作为训练集’zhengqi_train.txt’是我们建模的依据,另一个为最后评分的‘zhengqi_test.txt’。
现在我们查看数据具体情况:
在这里插入图片描述
在这里插入图片描述
其中 train 数据包含从 V0-V37 的 38 个特征,以及目标值 target;test 则只包含从 V0-V37 的 38 个特征;
很明显这是一个回归问题,我们将采取各类回归模型来进行建模;

此次数据建模中,我们的核心思想是,采用多种建模方式来一一测试 MSE 值,最后选取 MSE 值较小的几类模型,通过平均的方式获得最后的目标值;

3、建模过程

导包

import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.linear_model import LinearRegression,Lasso,Ridge,ElasticNet
from sklearn.neighbors import KNeighborsRegressor
from sklearn.ensemble import RandomForestRegressor,GradientBoostingRegressor,AdaBoostRegressor,ExtraTreesRegressor
from xgboost import XGBRegressor
from lightgbm import LGBMRegressor

from sklearn.svm import SVR

from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split

from sklearn.preprocessing import MinMaxScaler,StandardScaler,PolynomialFeatures

import warnings
warnings.filterwarnings('ignore')

导入数据

test=pd.read_csv('zhengqi_test.txt',sep='\t')
train=pd.read_csv('zhengqi_train.txt',sep='\t')

构建数据标签、数据合并

train['origin']='train'
test['origin']='test'
data=pd.concat([train,test])

特征探索
绘制出训练集与测试集中各个特征的核密度分布;
将训练集特征与测试集特征绘制在一个图表中的好处是,可以看出测试集与训练集的特征分布对比情况,且可以迅速挑选出特征不明显的予以剔除;

plt.figure(figsize=(10,38*6))
for i,col in enumerate(data.columns[:-2]):
    cond=data['origin']=='train'
    train_col=data[col][cond]    
    cond=data['origin']=='test'
    test_col=data[col][cond]
    axes = plt.subplot(38,1,i+1)
    ax=sns.kdeplot(train_col,shade=True)
    sns.kdeplot(test_col,shade=True,ax=ax)

在这里插入图片描述删除特征
由上图可知,V5、V11、V17、V22四个特征,测试集与训练集中数据分布有较大差异,为了避免影响最后的训练模型,将其予以剔除;

rop_lables=['V5','V11','V17','V22']
data.drop(drop_lables,axis=1,inplace=True)

相关性系数
通过相关性系数,获取训练集中与目标值target相关性不高的特征,并予以剔除;

train_corr=train.corr()
cond=abs(train_corr['target'])<0.1
drop_lables=train_corr.loc['target'].index[cond]
#查看分布 分布良好的特征暂时不删除
drop_lables=['V14','V21']
data.drop(drop_lables,axis=1,inplace=True)

绘制相关性系数热力图

plt.figure(figsize=(20,18))

mask = np.zeros_like(train_corr, dtype=np.bool)  # 构造与mcorr同维数矩阵 为bool型
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值