天池数据--工业蒸汽量预测

背景分析

赛题描述

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

数据说明

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

一、数据分析

1、导入库及数据

#导入库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.utils import shuffle

#导入数据
file_input=r'D:\tianchi test\gongye zhengqi\zhengqi_train.txt'
file_input2=r'D:\tianchi test\gongye zhengqi\zhengqi_test.txt'
output_file=r'D:\tianchi test\gongye zhengqi\output_file.csv'
data_train=np.loadtxt(file_input,skiprows=1)
data_test=np.loadtxt(file_input2,skiprows=1)
data_train=pd.DataFrame(data_train)
data_test=pd.DataFrame(data_test)


2、数据探索

变量y为连续变量,在特征筛选时,转为y1变量,进行特征筛选。

#数据探索
print(data_train.info())
print(data_test.info())
print(data_train.describe().T)      
#数据无缺失,数据基本上在1-10之间。
#V5、V17、V22标准偏差0.51,其他接近1
#V3、V5、V9、V11等多个变量平均值为负数。
#V5最大值为0.4,最小值为-2.18;V27最大值为0.925,最小值为-1.16
#V37预测结果,结果最小值为-3.0,最大值为2.5。产生蒸汽量存在负值,有点奇怪。。。

print(data_train.head(2))

shuffle(data_train)    #打乱样本数据
X=data_train.iloc[:,:-1].values
y=data_train.iloc[:,-1].values   #y为连续变量,如何处理??

#参数意义不明,绘图没有意义。
#变量y为连续变量,不便于进行变量筛选,观察y分布,并对y进行离散化处理进行变量筛选。

plt.hist(y,bins=50)
plt.show()
#变量y服从偏态分布,数值在0-1区间较为集中。因此,用astype(int)得到的数据分布为0较多。
#y=data_train.iloc[:,-1].values.astype(int) #用该方法处理得到的数据不好。

 y1=list(map(lambda x:round(x,1)*10,y))   #增加list显示数据,考虑数据取整

3、变量特征筛选

变量特征筛选有很多方法,

方法一:采用了linearSVC  、SelectFromModel,变量由37个减少至27个。

#筛除特征变量
#直接进行样本挑选,37个变量太多。
#采用linearsvc方法
from sklearn.svm import LinearSVC
from sklearn.feature_selection import SelectFromModel
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y1)   
model = SelectFromModel(lsvc, prefit=True)
X_new = model.transform(X)
print(X_new.shape)    #线形回归后,剩余27个变量

方法二:决策树筛选变量

#采用决策树模型,筛选变量
from sklearn.ensemble import ExtraTreesClassifier  #决策树回归模型
from sklearn.feature_selection import SelectFromModel
clf= ExtraTreesClassifier()  # 建立决策树回归模型,筛选变量
clf.fit(X, y1)
print(clf.feature_importances_)   
model = SelectFromModel(clf, prefit=True)
X_new = model.transform(X)
print(X_new.shape)   #用决策树处理后,剩余18个变量

4、训练模型

#采用随机森林回归预测分析
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
from sklearn.ensemble import RandomForestRegressor, ExtraTreesRegressor, GradientBoostingRegressor
rfr = RandomForestRegressor()
rfr.fit(X_new, y)
print(y)
y_predict = rfr.predict(X_new)
print(y_predict)
#模型评估
#原函数拟合情况
print("随机森林回归的默认评估值为:", rfr.score(X_new, y))
print("随机森林回归的R_squared值为:", r2_score(y, y_predict))
print("随机森林回归的均方误差为:", mean_squared_error(y, y_predict))
print("随机森林回归的平均绝对误差为:", mean_absolute_error(y, y_predict))

线形回归筛选27个变量,预测结果:

随机森林回归的默认评估值为: 0.9749813299237589
随机森林回归的R_squared值为: 0.9749813299237589
随机森林回归的均方误差为: 0.02421440105263158
随机森林回归的平均绝对误差为: 0.10688171745152354

决策树筛选18个变量,预测结果:

随机森林回归的默认评估值为: 0.9759216030226235
随机森林回归的R_squared值为: 0.9759216030226235
随机森林回归的均方误差为: 0.02330435468144044
随机森林回归的平均绝对误差为: 0.10703961218836565

决策树筛选能提高一些精度。

5、模型预测

#test数据集上的拟合情况
#对test数据集进行变换
X_test_new = model.transform(data_test)
print(X_test_new.shape)
#拟合结果导出
y_test_predict =pd.DataFrame(rfr.predict(X_test_new)/10)
print(y_test_predict)
y_test_predict.to_csv(output_file, index=False)

二、总结

自己运行代码走了一遍,刚看了几个大佬的视频分享,存在以下几个问题:

1、原有数据的分布特征未弄明白。(1)V5变量在训练集和测试集上的分布完全不一样,有可能导致存在过拟合。该变量处理应考虑筛除。(2)变量之间的相关性特征分析需补充考虑

2、数据kfolds交叉验证。一开始未考虑进去,后期需进一步修正。

3、不同的预测方法对比。各类方法应都分析看看。

4、集成算法应用。将各类算法进行组合,以提高预测精度。

本次训练的目的重点是如何来完善数据分析的思路,进一步得到提高。完整的将数据走一遍,打call,继续努力。

三、第一次的成绩

最终成绩果然不怎么样,果然是对样本过拟合了。

分数不佳,再接再厉哈。

第一次导入的时候,应该是txt的格式不对,所以没有记录上成绩。

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值