工业蒸汽量预测(速通三)

工业蒸汽量预测(三)

  • 特征优化
    • 1特征优化的方法
      • 1.1合成特征
      • 1.2特征的简单变换
      • 1.3用决策树创造新特征
      • 1.4特征组合
  • 模型融合
    • 1模型优化
      • 1.1模型学习曲线
      • 1.2模型融合提升技术
      • 1.3预测结果融合策略
      • 1.4其他提升方法

特征优化

1特征优化的方法

可以通过合成特征、对特征做简单变换、用决策树创造新特征、特征组合等方法对特征进行优化。

1.1合成特征

合成特征是指不在输入特征之列,而是丛一个或多个输入特征衍生而来的特征。通过标准化或缩放单独创建的特征不属于合成特征。

合成特征包括以下类型:

(1)将一个特征与其本身或其他特征相乘(称为特征组合)。

(2)两个特征相除

(3)对连续特征进行分桶(分箱),以分为多个区间分箱。

1.2特征的简单变换

数值特征的变换和组合:

任何针对单独特征列的单调变换(如对数),都不适用于决策树类算法。

特征的线性组合(linear combination)仅适用于决策树以及基于决策树的集成学习算法(如Gradient Boosting,随机森林),因为树模型不擅长捕获不同特征之间的相关性。而SVM、线性回归、神经网络等模型自身可以线性组合。

常用的数值特征的变换和组合如下:
在这里插入图片描述
类别特征与数值特征的组合:

在这里插入图片描述
在这里插入图片描述

仅仅将已有的类别特征和数值特征进行以上的有效组合,就能增加大量优秀的可用特征。如果将这种方法和线性组合等基础特征工程方法结合(仅用于决策树),则可以得到更多有意义的特征,如下:

在这里插入图片描述

//特征构造
epsilon = 1e-5
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

1.3用决策树创造新特征

在这里插入图片描述

1.4特征组合

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

对非线性规律进行编码:

在这里插入图片描述
在这里插入图片描述

组合独热矢量:

在这里插入图片描述

使用分桶特征列训练模型:

分桶特征:是以一定方式将连续型数值特征划分到不同的桶(箱)中,可以理解为是对连续型特征的一种离散化处理方式。

举例说明,我们可以将某地的人口(population) 特征分为以下3个分桶:

bucket_ 0 (< 5000):对应人口分布较少的街区。
bucket_ 1 (5000~ 25000):对应人口分布适中的街区。
bucket 2 (> 25000):对应人口分布较多的街区。

在这里插入图片描述

模型融合

1模型优化

在选择一个模型进行训练后,如何判断模型的优劣及优化模型的性能呢?

一般可以从以下几方面进行优化:研究模型学习曲线,判断模型是否过拟合或者欠拟合并做出相应的调整;对模型权重参数进行分析,对于权重绝对值高或低的特征,可以进行更细化的工作,也可以进行特征组合:进行Bad-Case分析,针对错误的例子确定是否还有地方可以修改挖掘:进行模型融合。

1.1模型学习曲线

出现高偏差,表明模型太过简单,没有能力学习到样本的底层规律,此时训练集和验证集的准确率都会很低。

出现高方差,表明模型太过复杂,学习太过,在训练集上的准确率较好,但是在验证集上的泛化能力较差,验证集的准确率较低,两个准确率相差较大。

在这里插入图片描述

1.2模型融合提升技术

模型融合,即先产生一组个体学习器,再用某种策略将它们结合起来,以加强模型效果。

按照个体学习器的关系,模型融合提升技术可以分为两类:

(1)个体学习器间不存在强依赖关系可同时生成的并行化方法,代表是Bagging 方法和随机森林

(2)个体学习器间存在强依赖关系必须串行生成的序列化方法,代表是Boosting方法

Bagging 方法和随机森林:

Bagging方法是从训练集中抽样得到每个基模型所需要的子训练集,然后对所有基模型预测的结果进行综合,产生最终的预测结果,如图1-7-3所示。

在这里插入图片描述

Bagging方法采用的是自助采样法( Bootstrap sampling),即对于m个样本的原始训练集,每次先随机采集一 个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集。由于是随机采样,因此每次的采样集和原始的训练集不同,和其他采样集也不同,这样就可以得到多个不同的弱学习器。

随机森林是对Bagging方法的改进,其改进之处有两点:基本学习器限定为决策树;除了在Bagging的样本上加上扰动,在属性上也加上扰动,相当于在决策树学习的过程中引入了随机属性选择。对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含 k个属性的子集,然后从这个子集中选择一个最优属性用于划分。

#将LinearRegression,LGB,RandomForestRegressor三个模型融合
# 3个模型融合
def model_mix(pred_1, pred_2, pred_3):result = pd.DataFrame(columns=['LinearRegression', 'LGB', 'RandomForestRegressor', 'Combine'])for a in range(10):for b in range(10):for c in range(1,10):test_pred = (a * pred_1 + b * pred_2 + c * pred_3) / (a + b + c)mse = mean_squared_error(test_target, test_pred)result = result.append([{'LinearRegression': a,'LGB': b,'RandomForestRegressor': c,'Combine': mse}],ignore_index=True)return resultmodel_combine = model_mix(linear_predict, LGB_predict, RandomForest_predict)model_combine.sort_values(by='Combine', inplace=True)
print(model_combine.head())

Boosting方法:

Boosting方法的训练过程为阶梯状,即基模型按次序一一进行训练(实现上可以做到并行),基模型的训练集按照某种策略每次进行一定的转换,然后对所有基模型预测的结果进行线性综合,产生最终的预测结果,如图1-7-4所示。

在这里插入图片描述

Boosting方法中著名的算法有AdaBoost算法和提升树(Boosting Tree)系列算法。在提升树系列算法中,应用最广泛的是梯度提升树(Gradient Boosting Tree),下 面逐一简要介绍。

(1) AdaBoost算法:是加法模型、损失函数为指数函数、学习算法为前向分布算法时的
二分类算法。

(2)提升树:是加法模型、学习算法为前向分布算法时的算法,基本学习器限定为决策树。对于二分类问题,损失函数为指数函数,就是把AdaBoost算法中的基本学习器限定为二叉决策树:对于回归问题,损失函数为平方误差,此时拟合的是当前模型的残差。

(3)梯度提升树:是对提升树算法的改进。提升树算法只适合于误差函数为指数函数和平方误差,而对于一般的损失函数,梯度提升树算法可以将损失函数的负梯度在当前模型的值作为残差的近似值。

在这里插入图片描述

model = 'GradientBoosting'
metal_models[model] = GradientBoostingRegressor()param_grid = {'n_estimators':[150,250,350],'max_depth':[1,2,3],'min_samples_split':[5,6,7]}metal_models[model], cv_score, grid_results = train_model(metal_models[model], param_grid=param_grid, X=metal_x_train,y=metal_y_train,splits=splits, repeats=1)cv_score.name = model
score_models = score_models.append(cv_score)
model = 'XGB'
metal_models[model] = XGBRegressor()param_grid = {'n_estimators':[100,200,300,400,500],'max_depth':[1,2,3],}metal_models[model], cv_score,grid_results = train_model(metal_models[model], param_grid=param_grid, X=metal_x_train,y=metal_y_train,splits=splits, repeats=1)cv_score.name = model
score_models = score_models.append(cv_score)

1.3预测结果融合策略

Voting:

Voting (投票机制)分为软投票和硬投票两种,其原理采用少数服从多数的思想,此方法可用于解决分类问题。

(1)硬投票:对多个模型直接进行投票,最终投票数最多的类为最终被预测的类。

(2)软投票:和硬投票原理相同,其增加了设置权重的功能,可以为不同模型设置不同
权重,进而区别模型不同的重要度。

Averaging和Ranking:

Averaging的原理是将模型结果的平均值作为最终的预测值,也可以使用加权平均的方法。但其也存在问题:如果不同回归方法预测结果的波动幅度相差比较大,那么波动小的回归结果在融合时起的作用就比较小。

Ranking的思想和Averaging的一致。 因为上述平均法存在一定的问题, 所以这里采用了把排名平均的方法。如果有权重,则求出n个模型权重比排名之和,即为最后的结果。

Blending:

Blending是把原始的训练集先分成两部分,如70%的数据作为新的训练集,剩下30%的数据作为测试集。

在第一层中,我们用70%的数据训练多个模型,然后去预测剩余30%数据的label。在第二层中,直接用30%的数据在第一层预测的结果作为新特征继续训练即可。

Blending的优点: Blending比Stacking简单(不用进行k次交叉验证来获得stacker feature),避开了一些信息泄露问题,因为generlizers和stacker使用了不一样的数据集。

Blending的缺点:
(1)使用了很少的数据(第二阶段的blender只使用了训练集10%的数据量)。
(2) blender 可能会过拟合。

说明:对于实践中的结果而言,Stacking 和Blending的效果差不多。

Stacking:

Stacking的基本原理是用训练好的所有基模型对训练集进行预测,将第j个基模型对第i个训练样本的预测值作为新的训练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后对测试集进行预测,如图1-7-5所示。

Stacking是一种分层模型集成框架。以两层为例:第一层由多个基学习器组成,其输入为原始训练集;第二层的模型则是以第一层基学习器的输出作为训练集进行训练,从而得到完整的Stacking模型。

Stacking 两层模型都使用了全部的训练集数据。

在这里插入图片描述

说明:在做Stacking 的过程中,如果将第一层模型的预测值和原始特征合并加入第二层模型的训练中,则可以使模型的效果更好,还可以防止模型的过拟合。

1.4其他提升方法

通过对权重或者特征重要性的分析,可以准确找到重要的数据和字段及相关的特征方向,并可以朝着此方向继续细化,同时寻找这个方向更多的数据,还可以做相关的特征组合,这些都可以提高模型的性能。

通过Bad-Case分析,可以有效找到预测不准确的样本点,进而回溯分析数据,寻找相关的原因,从而找到提高模型精度的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/142021.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】力扣364.周赛题解

Halo&#xff0c;这里是Ppeua。平时主要更新C&#xff0c;数据结构算法&#xff0c;Linux与ROS…感兴趣就关注我bua&#xff01; 1.最大二进制奇数 &#x1f349;题目&#xff1a; &#x1f349;例子&#xff1a; &#x1f349; 题解: 首先看题目,最大二进制奇数,在一个二…

MQ - 31 基础功能: 优先级队列的设计

文章目录 导图概述什么是优先级队列如何设计实现优先级队列业务实现优先级队列的效果内核支持优先级队列RabbitMQ 中优先级队列的实现总结导图 概述 当我们需要在业务中对消息设置优先级,让优先级高的消息能被优先消费,此时就需要用到消息队列中优先级队列的特性。 为了了解…

前后端分离vue简介

vue简介 vue是一个渐进式js框架&#xff0c;用于构建用户界面&#xff0c;其主要特点是易学易用、轻量、灵活和高效。Vue.js由前Google工程师尤雨溪&#xff08; Evan You&#xff09;在2014年创建&#xff0c;它的核心库只关注视图层&#xff0c;是一款非常优秀的MVVM框架&…

Azure AD混合部署,通过 Intune 管理设备,实现条件访问

一、设备同步到AAD上面 1、配置 AAD Connect 2、选择 3、下一步 4、配置本地 企业管理员 5、配置成功 二、通过 组策略把设备同步到 Intune 上面 1、创建一条组策略 2、设置 &#xff08;1&#xff09;计算机配置 → 管理模板 → Windows 组件 → MDM → 使用默认 Azure AD …

增强for循环和一般for循环的对比使用

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。个人B站主页热爱技术的小郑 &#xff0c;视频内容主要是对应文章的视频讲解形式。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘…

spring源码解析——IOC之自定义标签解析

概述 之前我们已经介绍了spring中默认标签的解析&#xff0c;解析来我们将分析自定义标签的解析&#xff0c;我们先回顾下自定义标签解析所使用的方法&#xff0c;如下图所示&#xff1a; 我们看到自定义标签的解析是通过BeanDefinitionParserDelegate.parseCustomElement(ele…

【赘婿国漫】从网络文学,到热播动漫,种马文属性或许是最大优点

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 《赘婿》第一季结束以来&#xff0c;有关该剧的讨论就一直没有停止过。这部由网络小说改编而来的国漫&#xff0c;虽然收获了不俗的收视成绩&#xff0c;但也引发了许多争议。在原著作者的控制范围之外&#x…

智慧银行:数字化金融时代的引领者

在当今数字化的时代&#xff0c;金融行业正经历着一场前所未有的变革。传统的银行模式已经不再适用&#xff0c;取而代之的是智慧银行的新兴概念。智慧银行不仅仅是数字化的银行&#xff0c;更是一个全新的金融服务范式&#xff0c;将科技与金融相结合&#xff0c;为客户提供更…

技术干货 | JMeter实现参数化的4种方式

参数化释义 什么是参数化&#xff1f;从字面上去理解的话&#xff0c;就是事先准备好数据&#xff08;广义上来说&#xff0c;可以是具体的数据值&#xff0c;也可以是数据生成规则&#xff09;&#xff0c;而非在脚本中写死&#xff0c;脚本执行时从准备好的数据中取值。 参数…

方法的重载

方法的重载 在同一个类中&#xff0c;定义了多个同名的方法&#xff0c;这些同名方法名具有同样的功能每个方法具有不同的参数类型或者参数个数&#xff0c;这些同名的方法就构成了重载关系。 简记&#xff1a;同一个类中&#xff0c;方法名相同&#xff0c;参数不同的方法。与…

编程每日一练(多语言实现):判断偶数

文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现 一、实例描述 利用单条件单分支选择语句判断输入的一个整数 是否是偶数。 运行程序&#xff0c;输入一个 整数18&#xff0c; 然后按回车键&#xff0c;将提示该数字是偶数…

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 B: 双子数

[蓝桥杯 2023 国 B] 双子数 试题 B: 双子数 【问题描述】 若一个正整数 x x x 可以被表示为 p 2 q 2 p^2 \times q^2 p2q2&#xff0c;其中 p p p、 q q q 为质数且 p ≠ q p \neq q pq&#xff0c;则 x x x 是 一个 “双子数”。请计算区间 [ 2333 , 233333333333…

1.算法——数据结构学习

算法是解决特定问题求解步骤的描述。 从1加到100的结果 # include <stdio.h> int main(){ int i, sum 0, n 100; // 执行1次for(i 1; i < n; i){ // 执行n 1次sum sum i; // 执行n次} printf("%d", sum); // 执行1次return 0; }高斯求和…

vue3 - 按需导入使用Element Plus图标、iconify图标、本地SVG/PNG图标

GitHub Demo 地址 在线预览 vue3 - 按需导入使用Element Plus图标、iconify图标、本地SVG/PNG图标 [GitHub Demo 地址](https://github.com/iotjin/jh-vue3-admin)[在线预览 ](https://iotjin.github.io/jh-vue3-admin) 一、iconify插件安装使用效果图 二、通过自动导入使用ic…

基于微信小程序的音乐播放器设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

在虚拟机上安装win10/ubuntu的教程

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一、下载软件资源 1、首先下载虚拟机Vmware_Pro17软件并正确安装&#xff1a;网盘链接 2、然后下载操作系统的镜像文件&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 二、在虚拟机上安装ubuntu系统 1…

共享门店模式:一种新兴的商业模式

共享门店模式是一种利用实体店铺的空间和资源&#xff0c;让多个品牌或商家在同一地点共同运营的商业模式。这种模式可以提高店铺的利用率&#xff0c;降低经营成本&#xff0c;增加客流量&#xff0c;实现资源的最大化利用。如果你是一个有创业想法的企业家&#xff0c;或者你…

2023-9-26 JZ52 两个链表的第一个公共节点

题目链接&#xff1a;两个链表的第一个公共节点 import java.util.*; /* public class ListNode {int val;ListNode next null;ListNode(int val) {this.val val;} }*/ public class Solution {public ListNode FindFirstCommonNode(ListNode head1, ListNode head2) {ListNo…

数据统计和分析怎么做?spss如何做好数据分析?

为什么要做数据分析?数据分析有什么意义&#xff1f;数据分析可以为企业和组织提供多方面的帮助&#xff0c;包括提高工作效率、优化业务流程、升职加薪、提高管理效率以及改进汇报效果等方面。 IBM SPSS Statistics 26是一款功能强大的统计分析软件&#xff0c;适用于Mac操作…

LabVIEW风力涡轮机的雷电流测量系统中集成高速摄像机

LabVIEW风力涡轮机的雷电流测量系统中集成高速摄像机 随着全球风电装机容量的快速增长&#xff0c;雷电活动对风力发电机组造成的损害受到更多关注&#xff0c;特别是在雷电活动强烈的地区。在冬季闪电期间&#xff0c;风力涡轮机等高层结构会受到向上的雷击。众所周知&#x…