上一篇《天池学习赛:工业蒸汽量预测4——模型验证》

目录

  • 1 特征优化的方法
    • 1.1 合成特征
    • 1.2 特征变换
    • 1.3 用决策树创造新特征
    • 1.4 特征组合
  • 2 赛题特征优化代码

1 特征优化的方法

1.1 合成特征

从一个或者多个输入特征衍生来的特征(标准化和缩放法创建的特征不算),主要包含以下几个类型:

(1)将一个特征与其本身或者其他特征相乘(特征组合)
(2)两个特征相除
(3)对连续特征进行分箱,以分为多个去加分箱

1.2 特征变换

1 数值特征的变换和组合

常用的数值特征的变换和组合如下:
(1)多项式特征
(2)比例特征
(3)绝对值
(4)max(x1,x2), min(x1,x2), x1 orx2

2 类别特征与数值特征的组合
用N1N2表示数值特征,C1C2表示类别特征
利用pandas的groupby创建以下几种新特征:
(1)中位数 median(N1)_by(C1)
(2)算数平均数 mean(N1)_by(C1)
(3)众数 mode(N1)_by(C1)
(4)最小值 min(N1)_by(C1)
(5)最大值 max(N1)_by(C1)
(6)标准差 std(N1)_by(C1)
(7)方差 var(N1)_by(C1)
(8)频数 freq(C2)_by(C1)

1.3 用决策树创造新特征

sklearn和xgboost中的apply()和decision_path()

1.4 特征组合

1 对非线性规律进行编码
2 组合独热矢量
3 使用分桶特征列训练模型

2 赛题特征优化代码

import pandas as pd
from sklearn.decomposition import PCA
from sklearn.model_selection import KFold
from sklearn.metrics import mean_squared_error
import lightgbm as lgb
import numpy as nptrain_data_file = "./zhengqi_train.txt"
test_data_file = "./zhengqi_test.txt"
train_data=pd.read_csv(train_data_file,sep='\t',encoding='utf-8')
test_data=pd.read_csv(test_data_file,sep='\t',encoding='utf-8')#定义特征构造方法
epsilon=1e-5#组交叉特征,可以自己定义,如增加x*x/y,log(x)/y等
func_dict={'add':lambda x,y:x+y,'mins':lambda x,y:x-y,'div':lambda x,y:x/(y+epsilon),'multi':lambda x,y:x*y
}#特征构造函数
def auto_features_make(train_data,test_data,func_dict,col_list):train_data,test_data=train_data.copy(),test_data.copy()for col_i in col_list:for col_j in col_list:for func_name,func in func_dict.items():for data in [train_data,test_data]:func_features=func(data[col_i],data[col_j])col_func_features='-'.join([col_i,func_name,col_j])data[col_func_features]=func_featuresreturn train_data,test_data#特征降维PCA
train_data2,test_data2=auto_features_make(train_data,test_data,func_dict,col_list=test_data.columns)
pca=PCA(n_components=500)
train_data2_pca=pca.fit_transform(train_data2.iloc[:,0:-1])
test_data2_pca=pca.transform(test_data2)
train_data2_pca=pd.DataFrame(train_data2_pca)
test_data2_pca=pd.DataFrame(test_data2_pca)
train_data2_pca['target']=train_data2['target']
x_train2=train_data2[test_data2.columns].values
y_train2=train_data2['target']#模型训练与评估
#5折交叉检验
folds=5
kf=KFold(n_splits=folds,shuffle=True,random_state=2019)#记录训练和预测MSE
MSE_DICT={'train_mse':[],"test_mse":[]}#线下训练预测
for i,(train_index,test_index) in enumerate(kf.split(x_train2)):#LGB模型lgb_reg=lgb.LGBMRegressor(learning_rate=0.01,max_depth=-1,n_estimators=5000,boosting_type='gbdt',random_state=2019,objective='regression',)#切分训练集和预测集x_train_kfold=x_train2[train_index]x_test_kfold=x_train2[test_index]y_train_kfold=y_train2[train_index]y_test_kfold=y_train2[test_index]#模型训练lgb_reg.fit(X=x_train_kfold,y=y_train_kfold,eval_set=[(x_train_kfold,y_train_kfold),(x_test_kfold,y_test_kfold)],eval_names=['train','test'],early_stopping_rounds=100,eval_metric='MSE',verbose=50)#训练集和预测集预测y_train_kfold_predict=lgb_reg.predict(x_train_kfold,num_iteration=lgb_reg.best_iteration_)y_test_kfold_predict=lgb_reg.predict(x_test_kfold,num_iteration=lgb_reg.best_iteration_)print('第{}折 训练和预测 训练MSE 预测MSE'.format(i))train_mse=mean_squared_error(y_train_kfold_predict,y_train_kfold)print('-----\n','训练MSE\n',train_mse,'\n-----')test_mse=mean_squared_error(y_test_kfold_predict,y_test_kfold)print('-----\n','预测MSE\n',test_mse,'\n-----')MSE_DICT["train_mse"].append(train_mse)MSE_DICT['test_mse'].append(test_mse)
print('-----\n', '训练MSE\n',MSE_DICT['train_mse'], '\n',np.mean(MSE_DICT['train_mse']),'\n-----')
print('-----\n', '预测MSE\n',MSE_DICT['test_mse'], '\n',np.mean(MSE_DICT['test_mse']),'\n-----')





下一篇《天池学习赛:工业蒸汽量预测6——模型融合》

天池学习赛:工业蒸汽量预测5——特征优化相关推荐

  1. 天池学习赛:工业蒸汽量预测2——特征工程

    上一篇<天池学习赛:工业蒸汽量预测1--数据探索> 目录 1.特征工程 1.1 预处理 1.2 特征处理 1.3 特征降维 1.3.1 特征选择 1.3.2 线性降维 2.赛题代码 3 结 ...

  2. 天池大赛之工业蒸汽量预测(有史以来最全面)

    目录 1.导包与数据挖掘 1.1导包 1.2 数据载入 1.3 数据合并 1.4 数据分布 1.5 特征清洗 1.6 特征可视化 1.7 相关性系数 1.8 归一化 1.9 Box-Cox变换对连续变 ...

  3. 天池比赛:工业蒸汽量预测

    https://tianchi.aliyun.com/competition/entrance/231693/introduction 偶然看到一句话:最重要的是提特征,特征决定上限,模型只是无限逼近 ...

  4. 天池学习赛:工业蒸汽量预测4——模型验证

    上一篇<天池学习赛:工业蒸汽量预测3--模型训练>中已经是使用了几种机器学习的模型,接下来将介绍一些模型的评价方法. 目录 1 模型评估的方法 2 模型调参 3 赛题模型验证与调参 3.1 ...

  5. 天池学习赛:工业蒸汽量预测3——模型训练

    接上一篇<天池学习赛:工业蒸汽量预测2--特征工程> 数据划分: from sklearn.model_selection import train_test_split #切分数据new ...

  6. 天池学习赛:工业蒸汽量预测1——数据探索

    目录 0.赛题介绍 1.数据分析知识 2.代码实现 0.赛题介绍 火力发电的基本原理是:燃料在燃烧时加热水生成蒸汽,蒸汽压力推动汽轮机旋转,然后汽轮机带动发电机旋转,产生电能.在这一系列的能量转化中, ...

  7. python建模大赛算法_Python数据分析kaggle-Titanic+天池-工业蒸汽量预测建模算法

    做数据分析许久了, 简单写写比赛的数据分析项目思路 一 使用逻辑回归/随机森林等对kaggle比赛项目 "给出泰坦尼克号上的乘客的信息, 预测乘客是否幸存"进行简单的数据分析过程, ...

  8. 【机器学习】阿里云天池竞赛——工业蒸汽量预测(2)

    机器学习经典赛题:工业蒸汽量预测(2) 机器学习经典赛题:工业蒸汽量预测(2) 3.1 特征工程的重要性和处理 3.2 数据预处理和特征处理 3.2.1 数据预处理 3.2.2 特征处理 3.3 特征 ...

  9. 【机器学习】阿里云天池竞赛——工业蒸汽量预测(4)

    机器学习经典赛题:工业蒸汽量预测(4) 机器学习经典赛题:工业蒸汽量预测(4):模型验证(模型评估与调参) 5.1 模型评估的概念和方法 5.1.1 欠拟合与过拟合 5.1.2 模型的泛化与正则化 5 ...

最新文章

  1. 并发编程-17AQS同步组件之 Semaphore 控制并发线程数的信号量
  2. 终于弄明白 i = i++和 i = ++i 的区别了!
  3. linkedin软件 iPad pro 2018 和huawei mate 30内存使用的对比情况
  4. DDD关键知识点整理汇总
  5. Java黑皮书课后题第4章:*4.17(一个月的天数)编写一个程序,提示用户输入一个年份和一个月份名称的前3个字母(第一个字母使用大写形式),显示该月中的天数。如果月份非法则显示出错信息
  6. 阿里女员工遭遇「杀猪盘」背后的思考
  7. 图解金山网盾3.6下载保护实现原理
  8. 数据库sql创建标量值函数_使用JSON_VALUE()从JSON数据中提取标量值
  9. Python 之 向上取整、向下取整以及四舍五入函数
  10. linux持续检测进程脚本,用于检测进程的shell脚本代码小结
  11. Javascript 调用MSAgent(调用office助手显示动画)
  12. 测试服务器带宽的几种常用方法
  13. Revel模板引擎Template基本语法
  14. 01 计算机网络概念
  15. python中ttk_ttk/Python中的按钮图像问题
  16. 第十五周项目一----哈希表的运算及实现
  17. 国产肠胃养护猫粮还可以
  18. 学计算机英语的心得体会,英语学习心得体会
  19. 一行代码引发的集群服务宕掉的血案分析
  20. java 经纬度计算_java 实现经纬度计算

热门文章

  1. 力扣 26.删除有序数组中的重复元素
  2. 深度解读SSH免密登录
  3. batch入门教程(4)
  4. 算法导论9.1-1找第二小的元素
  5. 使用FFTW的fftw_plan_dft_c2r_1d()由于未归一化结果错误的解决方案
  6. Android中JNI编程出现“Invalid arguments ' Candidates are: void * malloc(?) '”的解决方案
  7. 使用 ONNX 模型做预测
  8. 使用jupyterthemes插件定制jupyter notebook界面
  9. 三层交换机对链路层数据帧的处理
  10. 配置 iTerm2 记录