sklearn(9):天池蒸汽项目预测

本文介绍了在天池蒸汽项目中使用sklearn进行预测的整体思路,包括数据预处理、特征选择、模型建立与优化。通过特征相关性分析、归一化和Boxcox变换改善数据分布,采用Ridge回归去除异常点。实验中比较了不同模型的r2和MSE,探讨了减小MSE的策略,如调整预测值分布和超参数调优。
摘要由CSDN通过智能技术生成

整体思路

  • 导入数据后,将训练集和测试集粘合
  • 特征搜索,通过观察每个特征下训练集和测试集的数据的取值范围以及分布情况,将分布不均匀的特征项删除
  • 特征相关性处理:将每一个特征与训练集的目标值计算相关性,删除相关性低且分布不均匀的特征,note:可以通过生成heatmap的方式观察每个特征与目标值之间的相关性或相关系数
  • 数据处理:对数据进行归一化,并使用boxcox方法使每一个特征下的数据集更加正态分布化
  • 使用ridge回归算法训练测试集,将异常点(噪声)删除,提高测试准确度
  • 算法模型的建立:通过字典建立尽可能多地预测模型观测训练集在每一个模型下的r2和mse从而减少那些对于该数据集预测不准确的模型,保留那些r2较大,mse较小的值。
  • 用保留下的算法模型fit训练集对测试集的特征数据集进行预测,将每一组预测值添加到列表中,并去列表下所有预测值的平均数。
  • 储存预测值

其他可能减小MSE的方法

  • 将每个算法预测出的值作为新特征加入到原始数据集和测试集中。
  • 将预测值通过数学计算变得更加拟合正态分布。
  • 对预测模型的超参数进行调参。

代码1:使用标准化进行预测

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,RidgeCV,ElasticNet
from sklearn.neighbors import KNeighborsRegressor
from sklearn.ensemble import GradientBoostingRegressor,RandomForestRegressor,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,minmax_scale
import warnings
from scipy import stats
warnings.filterwarnings("ignore")

#数据聚合
train=pd.read_csv("zhengqi_train.txt",sep="\t")
test=pd.read_csv("zhengqi_test.txt",sep="\t")
train["origin"]="train"
test["origin"]="test"


data_all=pd.concat([train,test])
#print(data_all.shape) #(4813, 40)
#print(data_all.head())

'''特征探索'''
#38个特征,将一些不重要的特征删除
#特征分布情况,训练和测试数据特征分布不均匀,删除
'''
plt.figure(figsize=(9,6))
for i,col in enumerate(data_all.columns[:-2]):
    #密度图
    cond_train=data_all["origin"]=="train" #检索属于训练集的
    train_col=data_all[col][cond_train] #取出训练集的每一列
    cond_test = data_all["origin"] == "test"
    test_col = data_all[col][cond_test]
    # axes=plt.subplot(38,1,i+1)
    ax=sns.kdeplot(train_col,shade=True)
    sns.kdeplot(test_col,shade=True,ax=ax)
    plt.legend(["train","test"])
    plt.xlabel(col)
    plt.show()
plt.figure(figsize=(9,6))
for col in data_all.columns[:-2]:
    g=sns.FacetGrid(data_all,col="origin")
    g.map(sns.distplot,col) #distribute
# plt.show()
'''
drop_labels=["V11","V17","V22","V5"]
data_all=data_all.copy()
data_all.drop(drop_labels,axis=1,inplace=True)
print(data_all.shape)

'''相关性系数'''
#方差是协方差的一种特殊形式
cov=data_all.cov() #协方差
corr=data_all.corr()#相关系数

#查看特征和目标值的相关系数
cond=corr.loc["target"].abs()<0.1 #把特征与目标之间相关系数小于0.1的删除
# print(corr.loc["target"].index[cond])
#Index(['V14', 'V21', 'V25', 'V26', 'V32', 'V33', 'V34']

'''通过与密度图做对比,删除v14,v21特征'''
drop_labels_1=["V14","V21"]
data_all.drop(drop_labels_1,axis=1,inplace=True)
print(data_all.shape)

'''热图'''
# plt.figure(figsize=(20,16))
# mcorr=train.corr()
# mask=np.zeros_like(mcorr,dtype=np.bool)
# mask[np.triu_indices_from(mask)]&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值