集成学习案例二 —— 蒸汽量预测

集成学习案例二 —— 蒸汽量预测

1 研究问题

本案例的主要研究问题是如何根据锅炉的工况,预测其产生的蒸汽量,下面对该问题的背景及该案例的具体数据情况进行简要的介绍。

1.1 背景介绍

火力发电的基本原理是:燃料在燃烧时加热水生成蒸汽,蒸汽压力推动汽轮机旋转,然后汽轮机带动发电机旋转,产生电能。在这一系列的能量转化中,影响发电效率的核心是锅炉的燃烧效率,即燃料燃烧加热水产生高温高压蒸汽。

锅炉的燃烧效率的影响因素很多,包括锅炉的可调参数,如燃烧给量,一二次风,引风,返料风,给水水量;以及锅炉的工况,比如锅炉床温、床压,炉膛温度、压力,过热器的温度等。

该案例便是基于以上工业指标特征,对锅炉蒸汽量的进行预测,从而得到这个锅炉的发电效率的重要指标信息。由于信息安全等原因,我们使用的是经脱敏后的锅炉传感器采集的数据(采集频率是分钟级别)。

1.2 数据信息

数据分成训练数据和测试数据,其中包括从 V0V37383838 个字段作为特征变量,target 作为目标变量。我们需要利用训练数据训练出模型,预测出测试数据的目标变量。

最终的评价指标为均方误差 MSE ,即:Score=1n∑i=1n(yi−y∗)2\text{Score} = \dfrac{1}{n} \sum\limits_{i=1} ^n (y_i - y ^*)^2Score=n1i=1n(yiy)2

2 数据探索性分析

首先需要对数据进行探索性分析( Exploratory Data Analysis, EDA ),以及根据分析结果进行对应的数据预处理。

2.1 加载数据

# 加载数据包
import warnings
warnings.filterwarnings("ignore")
import matplotlib.pyplot as plt
import seaborn as sns

# 模型
import pandas as pd
import numpy as np
from scipy import stats
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV, RepeatedKFold, cross_val_score,cross_val_predict,KFold
from sklearn.metrics import make_scorer,mean_squared_error
from sklearn.linear_model import LinearRegression, Lasso, Ridge, ElasticNet
from sklearn.svm import LinearSVR, SVR
from sklearn.neighbors import KNeighborsRegressor
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor,AdaBoostRegressor
from xgboost import XGBRegressor
from sklearn.preprocessing import PolynomialFeatures,MinMaxScaler,StandardScaler

# 加载数据
data_train = pd.read_csv('train.txt',sep = '\t')
data_test = pd.read_csv('test.txt',sep = '\t')

#合并训练数据和测试数据
data_train["oringin"]="train"
data_test["oringin"]="test"
data_all=pd.concat([data_train,data_test],axis=0,ignore_index=True)

2.2 探索数据分布

核密度估计kernel density estimation )是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。

这里使用 kdeplot 绘制核密度估计图进行初步的数据分析,可以比较直观的看出数据样本本身的分布特征:

for column in data_all.columns[0:-2]:
    g = sns.kdeplot(data_all[column][(data_all["oringin"] == "train")], color="Red", shade=True)
    g = sns.kdeplot(data_all[column][(data_all["oringin"] == "test")], ax=g, color="Blue", shade=True)
    g.set_xlabel(column)
    g.set_ylabel("Frequency")
    g = g.legend(["train","test"])
    plt.show()

可以看出特征 V5V9V11V17V22V28 中训练集数据分布和测试集数据分布不均,所以我们需要删除这些特征数据:

data_all.drop(["V5","V9","V11","V17","V22","V28"], axis=1, inplace=True)

2.3 特征相关性

查看特征之间的相关性(相关程度):

data_train1=data_all[data_all["oringin"]=="train"].drop("oringin",axis=1)
plt.figure(figsize=(20, 16))  # 指定绘图对象宽度和高度
colnm = data_train1.columns.tolist()  # 列表头
mcorr = data_train1[colnm].corr(method="spearman")  # 相关系数矩阵,即给出了任意两个变量之间的相关系数
mask = np.zeros_like(mcorr, dtype=np.bool)  # 构造与mcorr同维数矩阵 为bool型
mask[np.triu_indices_from(mask)] = True  # 角分线右侧为True
cmap = sns.diverging_palette(220, 10, as_cmap=True)  # 返回matplotlib colormap对象,调色板
g = sns
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值