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

【机器学习】阿里云天池竞赛——工业蒸汽量预测(3) 利用这个方法,LightGBM可以在构造一个叶子的直方图后,可以用非常微小的代价得到它兄弟叶子的直方图,在速度上可以提升一倍。首先,最明显就是内存消耗的降低,直方图算法不仅不需要额外存储预排序的结果,而且可以只保存特征离散化后的值,而这个值一般用 8 位整型存储就足够了,内存消耗可以降低为原来的1/8。在遍历数据的时候,根据离散化的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。将待预测的数据集输入到训练好的模型中,得到预测结果。 阅读详情

机器学习经典赛题:工业蒸汽量预测(6):特征优化

6.1 特征优化的方法

好的特征对于模型性能有着至关重要的影响。可以通过合成特征、对特征做简单变换、用决策树创造新特征、特征组合等方法对特征进行优化。

6.1.1 合成特征

从一个或者多个输入特征衍生来的特征(标准化和缩放法创建的特征不算),主要包含以下几个类型:
(1)将一个特征与其本身或者其他特征相乘(特征组合)
(2)两个特征相除
(3)对连续特征进行分箱,以分为多个区间分箱。

6.1.2 特征的简单变换

  1. 数值特征的变换和组合
    常用的数值特征的变换和组合如下:
    (1)多项式特征(polynomial feature)
    (2)比例特征(ratio feature): X 1 / X 2 X1/X2 X1/X2
    (3)绝对值(absolute value)
    (4) m a x ( X 1 , X 2 ) max(X1,X2) max(X1,X2), m i n ( X 1 , X 2 ) min(X1,X2) min(X1,X2), X1 or X2
  2. 类别特征与数值特征的组合
    用N1和N2表示数值特征,C1和C2表示类别特征,利用pandas的groupby创建以下几种新特征(其中,C2还可以是离散化了的N1):
    (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)
    注意:freq(C1)不需要进行groupby操作也有意义。
    如果讲这种方法和线性组合等基础特征工程结合(仅用于决策树),则可以得到更多有意义的特征,如下:
    (1)N1-median(N1)_by(C1)
    (2)N1-mean(N1)_by(C1)

6.1.3 用决策树创造新特征

在决策树系列(单棵决策树、GBDT、随机森林)的算法中,由于每一个样本都会被映射到决策树的一片叶子上,因此可以把样本经过每一棵决策树映射后的index(自然数)或one-hot-vector(哑编码得到的稀疏矢量)作为一项新的特征加入模型中。
具体实现采用sklearn和xgboost中的apply()和decision_path()。

6.1.4 特征组合

特征组合是指将单独的特征进行组合(相乘或求笛卡尔积)而形成的合成特征,有助于表示非线性关系。

  1. 对非线性规律进行编码
    由于通过采用随机梯度下降法可以有效地训练线性模型,因此在使用扩展的线性模型时,辅以特征组合一直都是训练大规模数据集的有效方法。可以创建很多不同种类的特征组合,例如:

    • [A x B]:将两个特征的值相乘
    • [A x B x C x …]:几个特征的值相乘
    • [A x A]:对单个特征的值求平方形成的特征
  2. 组合独热向量
    机器学习模型很少会组合连续特征,但是却经常组合独热特征向量,将独特特征矢量的特征组合视为逻辑连接。例如country:usa AND language:spanish

对大规模数据集使用特征组合时学习高度复杂模型的一种有效策略,而神经网络可提供另一种策略。

  1. 使用分桶特征列训练模型
    分桶特征:是以一定方式将连续型数据特征划分到不同的桶(箱)中,可以理解为对连续型特征的一种离散化处理。

如果要为分桶特征定义特征列,可以使用bucketized_column( 而不是numerical_column),该列数字作为输入并使用boundaries参数中指定的分桶边界 将其转化为分桶特征。

6.2 特征优化实战

6.2.1 导入数据

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 np

train_data_file = "../data/zhengqi_train.txt"
test_data_file = "../data/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')

6.2.2 特征构造方法

#定义特征构造方法
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
}

6.2.3 特征构造函数

#特征构造函数
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_features
    return train_data, test_data

6.2.4 特征降维处理

#基于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']

6.2.5 模型训练和评估

使用LightGBM模型对新构造的特征进行模型训练和评估。

#模型训练与评估
#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=2022,
        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-----')

运行结果:

...
-----
 训练MSE
 [0.00017012122282987903, 0.003986113221006774, 0.004653503140174019, 1.6944261550293392e-05, 0.0019608822664788713] 
 0.002157512822407967 
-----
-----
 预测MSE
 [0.09929753449545065, 0.1250100344303853, 0.09311309275116833, 0.10307589284589647, 0.09883896847504547] 
 0.10386710459958923 
-----

将代码运行得到的5折交叉验证的各折叠训练MSE、预测MSE及平均MSE,与上一节未作特征优化的结果(训练MSE平均值为0.006117279317883938,预测MSE平均值为0.10952066075608168)对比,可以发现MSE得到进一步降低。

参考资料

[1] 《阿里云天池大赛赛题解析——机器学习篇》

【机器学习】阿里云天池竞赛——工业蒸汽量预测(1) 其首先是利用从有效数据集中识别出的关系来评估缺失值,然后用计算的该变量所有已知值得平均值或中值(定量属性)或众数(定性属性)来替换给定属性得缺失值,此方法也是最常用的方法。例如,在某个数据集中需要预测缺失的年龄值,为了预测缺失项的价值,我们可以提取名称中的称呼(Master、Mr、Mrs、Miss)作为新变量。生成的新变量可能与目标变量有更好的相关性,有助于进行数据分析。黑色粗条中间的白点表示中位数,粗条的顶边和底边分别表示上四分位数和下四分位数,通过边的位置所对应的y轴的数值就可以看到四分位数的值。 阅读详情

相关推荐

IEC103协议实战指南:报文解析与传输优化策略

本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。

r2s3t4的博客 541

工业蒸汽量预测

本文主要介绍阿里云天池大数据平台的学习赛——工业蒸汽量预测。文章内容来自《阿里云天池大赛赛题解析》以及我自己的理解。涉及到的技术点包括数据分析、缺失值、异常值的处理、新变量生成、多种数据可视化(KDE、线性回归、直方图、Q-Q图、箱形图)以及特征变量之间的相关性计算、热力图展示因内容较多,此后会不断更新

L1142456160的博客 5047

为什么你的Nginx配置SM2国密SSL证书失败?这些坑我都帮你踩过了

本文针对Nginx配置SM2国密SSL证书的常见失败原因,提供了详细的排查与解决方案。核心在于使用支持国密算法的Nginx版本(如集成Tongsuo库),正确处理从阿里云等平台获取的证书格式,并正确配置ssl_ciphers等关键参数。文章还解释了浏览器兼容性差异及双证书部署等进阶场景,帮助运维和开发人员高效完成国密合规改造。

weixin_29228203的博客 385

工业蒸汽量预测-特征工程

本篇是《阿里云天池大赛赛题解析-机器学习篇》的第一部分工业蒸汽量预测的第三章-特征工程的内容,并附带了一些知识点的网页链接。内有数据预处理、特征降维等内容。

L1142456160的博客 1970

相场断裂模型中的各向异性机制:从裂纹密度到驱动力的数值实现

断裂力学是研究材料在载荷作用下裂纹萌生与扩展规律的基础学科,其核心在于理解材料失效的能量准则与路径选择。传统方法通常预设裂纹路径,而相场断裂模型通过引入连续的相场变量,将裂纹模拟转化为一个能量最小化问题,能够自发预测裂纹的萌生、扩展与分叉,在工程失效分析中具有重要价值。当材料具有显著的方向依赖性时,如单晶、复合材料或轧制金属板,各向同性假设会失效,此时需引入各向异性机制。该机制的核心在于改造两个关键部分:一是裂纹密度函数,通过引入各向异性张量来定义不同方向上形成裂纹微结构的能量成本;二是临界能量释放率(断裂

weixin_31421613的博客 297

PPL文档——Excel制作的甘特图加上动态今日线

当很多项目需要跟踪进度时,我们介绍一种在Excel中创建甘特图。

qq_34777858的博客 7064

天池赛:工业蒸汽量预测

每一次的比赛都能学到新的东西,都能得到提升。

weixin_46685991的博客 2996

python实现语音信号的分帧、加窗、预处理

语音信号实现分帧、加窗、预处理音频文件读取预加重分帧加窗 音频文件读取 librosa是非常强大的python语音信号处理库。 读取音频: 使用语句librosa.load(path, sr=22050, mono=True, offset=0.0, duration=None)读取音频文件,默认的采样率是22050,若要保留音频的原始采样率,使用sr=None。 其中: path:表示音频文件的路径 sr:表示采样率 mono:bool,是布尔类型,表示是否将信号转换为单声道 offset:float,后

weixin_45272908的博客 1万+

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

在选择一个模型进行训练后,如何判断模型的优势及优化模型的性能呢?一般可以从以下几个方面进行优化:欠拟合(高偏差)、过拟合(高方差)和正常拟合三种学习曲线:模型融合,即先产生一组个体学习器,再用某种策略将他们结合起来,以加强模型效果。随着集成中个体分类器数目的增加,集成学习器的错误率也会呈指数级下降,最终趋于零。综合个体学习器的优势是能够降低预测误差,优化整体模型的性能。而且个体学习器的准确性越高,多样性越大,模型融合的提升效果越好。按个体学习器的关系,模型融合技术可以分为两类: (1)个体学习器不存在强依赖

小哲的博客 2401

Android Display Graphics #1 整体框架介绍一

手机屏上显示的内容,2D或3D ,如果是 3D 的,不管是 App 还是游戏,或者简单的图片界面,底层都是通过 GPU、 通过 OpenGL(ES)绘制出来的。是Java层的一个类,提供了一系列API,使用这些API可以实现各种的产品经理要求的效果。显示的不同阶段对这块内存的叫法不同,在上层可以是Window、ANnativeWindow、Surface、SurfaceView、layer、buffer,这些本质上没啥区别,可以广泛意义上理解为用于显示内容的那块内存,只不过各个阶段的操作接口不同。

oDwyane03的博客 1385

面经-2023-禾赛-FPGA工程师

面经-2023-禾赛-FPGA工程师

w0shishabi的博客 2969

天池大赛——工业蒸汽量预测

从0开始学大数据分析与机器学习,简简单单写下竞赛心得。本文使用了多种机器学习回归算法,也运用了深度学习pytorch搭建神经网络来进行回归计算。 一、背景介绍 本文记录的是工业蒸汽量赛题,链接:AI训练营计算机视觉-阿里云天池 赛题背景 火力发电的基本原理是:燃料在燃烧时加热水生成蒸汽,蒸汽压力推动汽轮机旋转,然后汽轮机带动发电机旋转,产生电能。在这一系列的能量转化中,影响发电效率的核心是锅炉的燃烧效率,即燃料燃烧加热水产生高温高压蒸汽。锅炉的燃烧效率的影响因素很多,包括锅炉的可调参数,如燃烧给量,

weixin_43406384的博客 1576

MIKE 21 教程 2.9 初始条件(Initial Conditions),边界条件Boundary Conditions),解耦(Decoupling)

本节讲解初始条件与边界条件的设置。这两个模块如设置有误则极易出现模型崩溃。

Hello Word 4800

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

特征工程的处理流程为首先去掉无用特征,接着去除冗余的特征,如共线特征,并利用存在的特征、转换特征、内容中的特征以及其他数据源生成新特征,然后对特征进行转换(数值化、类别转换、归一化等),最后对特征进行处理(异常值、最大值、最小值,缺失值等)以符合模型的使用。在前面的数据探索中,通过KDE分布对比了特征变量在两个数据集中的分布情况,这里不再重复过程。使用相关系数法,先要计算各个特征对目标值的相关系数及相关系数的P值,然后根据阈值筛选特征。”,具体来说,特征越好、灵活性越强,构建的模型越简单、性能越出色。

小哲的博客 2037

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

数据关系是样本的分布规律,或者是特征与对应样本之间的关系。当一个模型恰到好处地表达了数据关系时,认为这个模型拟合效果好。欠拟合(underfitting)也叫高偏差(bias),是指算法所训练的模型不能完整地表达数据关系。在这种情况下,一般可通过增加额外的特征、增加多项式特征、减少λ\lambdaλ的值等方法来优化模型。过拟合(overfitting)也叫高方差(variance),指的是算法所训练的模型过多地表达了数据关系,此时很有可能表达的是数据间的噪声关系。在这种情况下,一般可通过收集更多的数据、使用

小哲的博客 2214

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

阿里云天池比赛-工业蒸汽量预测:智能优化能源管理的关键一步

阿里云天池比赛-工业蒸汽量预测:智能优化能源管理的关键一步 去发现同类优质开源项目:https://gitcode.com/ 项目核心功能/场景 预测工业生产中的蒸汽消耗量,提升能源利用效率。 项目介绍 在当今工业生产中,蒸汽作为重要的能源介质,其消耗量的精确预测对于提高能源使用效率和降低生产成本具有重要意义。阿里云天池比赛-工业蒸汽量预测项目,正是为了解决这一问题而发起的挑战。该项目通过提供丰富...

gitblog_06710的博客 469

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

阿里云天池大赛赛题解析——机器学习篇 | 留言赠书

国内第一本针对竞赛实操的图书:《阿里云天池大赛赛题解析——机器学习篇》,正式发售。阿里云天池7年200多场数据大赛精华提取录为什么写这本书七年前,天池团队的几名创始成员带着“让全世界没有...

我爱计算机视觉 6456

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

欠拟合、过拟合、L1正则化、L2正则化、ElasticNet联合正则化、网格搜索、随机搜索 、LGB、随机森林

小哲的博客 1504

【阿里云天池竞赛】工业蒸汽大赛

目录1、导包与数据挖掘1....

qq_36661843的博客 1110

国内首本数据竞赛图书《阿里云天池大赛赛题解析——机器学习篇》今日开启预售!

天池平台已经举办了超过 200 场来自真实业务场景的竞赛,每场赛事沉淀的课题和数据集,将在天池保留和开放。天池平台已成为在校学生踏入职场前的虚拟实践基地,也成为聚集40万数据人才,孵化2000余家数据创新工作室的数据智能大社区。 七年前,天池团队的几名创始成员带着*“让全世界没有能力Access到大数据的人可以公平地Access到大数据”*的信念,走上了建设天池的道路。 这7年间,天池举办了超过200场来自真实业务场景的竞赛。从2014年的首场天池天猫推荐算法挑战赛到2015年的阿里巴巴集团算法黄金..

博文视点(北京)官方博客 3702

贾扬清推荐,国内首本数据竞赛图书《阿里云天池大赛赛题解析——机器学习篇》今日开启预售!...

天池平台已经举办了超过 200 场来自真实业务场景的竞赛,每场赛事沉淀的课题和数据集,将在天池保留和开放。天池平台已成为在校学生踏入职场前的虚拟实践基地,也成为聚集40万数据人才,孵化2...

weixin_40920183的博客 786

【赠书】阿里巴巴副总裁贾扬清推荐,国内第一本数据竞赛相关图书正式预售...

国内第一本针对竞赛实操的图书:《阿里云天池大赛赛题解析——机器学习篇》,正式预售。阿里云天池7年200多场数据大赛精华提取录为什么写这本书七年前,天池团队的几名创始成员带着“让全世界没有...

简说Python的博客 715

机器学习竞赛入门书籍推荐

今天给大家推一本书。最近有不少粉丝朋友想打比赛,看了一下小白居多,于是今天就给大家分享一本适合新手的竞赛入门书,《阿里云天池大赛赛题解析---机器学习篇》。应该有不少人看过吧,没看过也没关系,我这不来推荐了(doge)?

学姐带你玩AI的博客 254

书里书外丨大咖论“赛”:阿里云天池 TOP 选手不得不说的那些事儿

七年前,天池团队的几名创始成员带着“让全世界没有能力Access到大数据的人可以公平地Access到大数据”的信念,走上了建设天池的道路。7年间,天池举办了超过200场来自真实业务场...

优快云资讯 3101

【送书 10 本】阿里巴巴副总裁贾扬清推荐,国内第一本数据竞赛相关图书,今天正式预售啦...

国内第一本针对竞赛实操的图书:《阿里云天池大赛赛题解析——机器学习篇》,今天正式预售了。阿里云天池7年200多场数据大赛精华提取录为什么写这本书七年前,天池团队的几名创始成员带着“让全世...

weixin_38753422的博客 559

「赠书」贾扬清推荐,国内首本数据竞赛图书

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!天池平台已经举办了超过 200 场来自真实业务场景的竞赛,每场赛事沉淀的课题和数据集,将在天池保留和开放。...

程序猿DD 723
上一篇: 【机器学习】阿里云天池竞赛——工业蒸汽量预测(5)
下一篇: 【PaperReading】Network completion via deep metric learning
镰刀韭菜
博客等级 码龄12年 2万+粉丝 853原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

镰刀韭菜

看在我不断努力的份上,支持我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值