数据分箱 baggingboosting onehot独热编码 woe编码 sklearn的ensemble(集成学习)

news2025/1/27 7:15:47

目录

数据分箱就是将连续变量离散化。

bagging&boosting

onehot独热编码

 独热编码的结果如下:

woe编码

WOE编码的基本原理

步骤一:计算WOE

步骤二:应用WOE

WOE编码的优点

示例

数据示例

步骤一:计算每个类别的违约率

步骤二:计算WOE值

步骤三:应用WOE编码

 模块介绍:万能的ensemble(集成学习)


数据分箱就是将连续变量离散化。

数据分箱(Data Binning)是一种常见的数据预处理技术,它将连续的数据值重新划分为几个“箱子”或区间,从而将连续变量转换为有序的分类变量。这种技术在数据分析和机器学习中非常有用,因为它可以帮助简化数据、减少噪声影响、提高模型训练效率,并且可以使某些类型的分析和建模变得更加容易

数据分箱(Data Binning)是一种数据预处理技术,它涉及将一组数据值分配到几个连续的区间(箱子)中。这个过程通常用于以下几种情况:

  1. 数据简化:通过将大量的数据点分组到较少的箱子中,可以简化数据集,使得数据更加容易理解和分析。

  2. 异常值处理:分箱可以帮助识别和处理异常值,例如,可以将超出正常范围的值归入一个单独的箱子。

  3. 平滑数据:分箱可以用来平滑数据,减少噪声的影响,特别是在数据挖掘和机器学习中。

  4. 数据离散化:对于某些算法,特别是决策树和规则学习算法,分箱可以将连续变量转换为离散变量,从而更适合算法的应用。

数据分箱的步骤通常包括:

  • 确定箱子的数量:这可以通过主观判断,或者使用一些统计方法,如等宽分箱、等频分箱或基于聚类的方法来决定。
  • 分配数据到箱子:根据确定的箱子边界,将数据点分配到相应的箱子中。
  • 处理边界值:确定如何处理那些落在箱子边界上的数据点,通常可以选择向上或向下分配。

数据分箱后的箱子可以用箱子的中值、平均值、边界值或其它统计量来代表箱子内的所有数据点,这取决于具体的应用场景和分析目的。在实施数据分箱时,需要谨慎考虑分箱策略,因为不恰当的分箱可能会导致信息的丢失或引入偏差。

 

 

 

 

import pandas as pd

# 客户信息 DataFrame
customers_df = pd.DataFrame({
    'CustomerID': [1, 2, 3, 4],
    'CustomerName': ['Alice', 'Bob', 'Charlie', 'David'],
    'Time':[10,20,30,40]
})

# 订单信息 DataFrame
orders_df = pd.DataFrame({
    'OrderID': [100, 101, 102, 103],
    'CustomerID': [1, 2, 3, 5],
    'OrderAmount': [200, 150, 300, 250],
    'Time':[10,20,30,80]
})
display(customers_df)
display(orders_df)

pd.merge(customers_df,orders_df,
         on=["CustomerID","Time"]#这里on=列名组成的列表,但只能是二者共有的列名
         #on表示在这些列使用连接
         ,how='right')#这里how表示取右侧的行。右侧customerID为1235,
#所以合并后的customerID只有1235,没有左边列表的ID4

orders_df = pd.DataFrame({
    'OrderID': [100, 101, 102, 103],
    'CustomerID': [1, 2, 3, 5],
    'OrderAmount': [200, 150, 300, 250],
    'Time':[10,20,30,80]
})
data_cut=pd.cut(orders_df['OrderAmount'],100)
data_cut

 

pd.cut(待分享的pd【指定索引】,分成多少个箱子)

返回值个数=样本个数,即某样本属于哪个箱子 

bagging&boosting

随机森林模型是Bagging算法的一个代表,而AdaBoost和GBDT(Gradient Boosting Decision Tree,梯度提升决策树)是Boosting算法的代表。

Bagging(Bootstrap Aggregating)算法:

Bagging是一种集成学习技术,它通过结合多个模型来提高预测的稳定性和准确性。以下是Bagging的主要步骤:

  1. 数据采样:从原始数据集中进行有放回的随机抽样,生成多个不同的训练子集。
  2. 模型训练:使用这些子集分别训练多个独立的模型(例如决策树)。
  3. 结果聚合:对于分类问题,通常采用投票机制来决定最终的类别;对于回归问题,则采用平均或中位数来聚合模型的预测结果。

Bagging的关键特点是每个模型都是在不同的数据子集上训练的,这有助于减少模型的方差,避免过拟合。

Boosting算法:

Boosting是一种逐步增强模型预测力的策略,通过连续地训练模型来关注前一个模型错误分类或预测的样本。以下是Boosting的主要步骤:

  1. 初始化模型:通常从一个简单的模型开始,这个模型对训练数据的预测能力很弱。
  2. 迭代训练:在每一轮迭代中,都会训练一个新的模型,这个模型会特别关注前一个模型预测错误的样本。
  3. 模型组合:每个模型都会根据自己的预测能力赋予一个权重,所有模型的加权预测结果将作为最终的预测。

Boosting的关键特点是模型是顺序训练的,每个新模型都在尝试纠正前一个模型的错误,这有助于减少模型的偏差。

总结:

  • Bagging:并行化处理,每个模型独立训练,最后汇总结果,主要目的是减少方差。
  • Boosting:顺序化处理,每个模型基于前一个模型的性能进行训练,逐步提高性能,主要目的是减少偏差。

这两种集成学习方法在机器学习中都非常流行,它们可以应用于各种不同的机器学习任务,并且通常能够提供比单个模型更好的性能。

onehot独热编码

这段代码使用了scikit-learn库中的OneHotEncoder类来进行独热编码。 

  1. from sklearn.preprocessing import OneHotEncoder 这一行导入了scikit-learn库中的预处理模块,并从中导入OneHotEncoder类。OneHotEncoder用于将分类特征转换为二进制编码形式。

  2. enc = OneHotEncoder() 这一行创建了OneHotEncoder类的实例,并将其赋值给变量enc。这样就可以使用该实例对数据进行独热编码了。

  3. enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) 这一行调用了enc对象的fit方法,并传入了一个包含多个列表的列表作为参数。这些列表代表了要被独热编码的特征值。fit方法会根据这些特征值来确定哪些类别需要进行编码。

  4. enc.transform([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]).toarray() 这一行调用了enc对象的transform方法,并传入了一个与上一行相同的列表作为参数。transform方法会对传入的列表进行独热编码,并将其转换为NumPy数组格式。最后,.toarray()方法将转换后的结果强制转换为NumPy数组类型。

综上所述,这段代码的主要作用是对给定的特征值进行独热编码,并将其转换为NumPy数组格式。

 独热编码的结果如下:

[[1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
 [0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0],
 [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0],
 [0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]]

这个结果是通过以下步骤计算得出的:

  1. 独热编码器拟合数据enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])。这一步确定了每个特征的类别数量。在这个例子中,有三个特征,每个特征的类别数量分别是:第一个特征有2个类别(0和1),第二个特征也是2个类别(0和1),第三个特征有3个类别(0, 1, 和 2)。

  2. 转换数据enc.transform([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])。这一步将原始数据转换为独热编码格式。

  3. 转换结果.toarray()将结果转换为NumPy数组。

每个特征的独热编码如下:

  • 第一个特征(0和1)有两个类别,所以需要2位来表示。
  • 第二个特征(0和1,2)同样有3个类别,也需要3位来表示。
  • 第三个特征(0, 1, 2,3)有4个类别,所以需要4位来表示。

因此,每个样本(原始数据中的一个列表)将被转换为一个长度为2 + 3 + 4 = 9的向量。但为什么结果是9位呢?这是因为独热编码器默认会添加一个偏置列(即第一个列),以确保每个样本至少有一个特征为1,从而避免数据稀疏性带来的问题。所以,最终每个样本的独热编码向量长度为8位(7位特征 + 1位偏置)。

看点在这里 

第三个特征出现了3、0、1、1,被认为只需要三位,所以不是找最大的 者、 

woe编码

WOE编码(Weight of Evidence Encoding)是一种用于分类变量编码的方法,主要用于机器学习中的特征工程阶段。它通过计算每个类别的权重证据(WOE)来对类别进行编码,而不是简单地使用标签编码或独热编码。这种方法能够保留原类别信息的同时,也考虑到了不同类别之间的相关性。

WOE编码的基本原理

步骤一:计算WOE

对于每一个类别 �c,我们首先计算它的WOE值。WOE值的计算公式如下:

其中:

  • �(�)P(c) 是类别 �c 的先验概率,即该类别出现的频率。
  • �(good)P(good) 是“好”类的先验概率,通常指目标变量的正例比例。
步骤二:应用WOE

一旦计算出所有类别的WOE值,就可以将这些值作为新的特征加入到模型中进行训练。

WOE编码的优点

  1. 数值稳定性:由于WOE是基于对数变换的,它可以处理不平衡的数据分布,并且比直接使用类别标签更加稳定。
  2. 可解释性:WOE保留了原始类别信息的含义,使得模型更容易理解和解释。
  3. 减少维度:相比于独热编码,WOE可以显著降低特征空间的维度,因为它不需要为每个类别创建一个新的特征。

示例

假设我们有如下的数据集:

类别目标变量
A1
B0
C1
D0

我们可以按照上述步骤计算每个类别的WOE值,然后将其应用到我们的模型中。

请注意,WOE编码通常用于信用评分、欺诈检测等金融领域,在这些领域中,我们需要有效地处理大量的分类变量。

WOE(Weight of Evidence)编码通常用于金融风险模型,特别是在信用评分模型中。以下是一个简化的例子,说明如何计算WOE值并将其应用于数据。

数据示例

假设我们有一个关于贷款申请的数据集,包含两个特征:Education(教育程度)和Loan Default(是否违约)。Loan Default是目标变量,取值为1(违约)或0(未违约)。

EducationLoan Default
Bachelor0
Master0
PhD1
Bachelor0
Master1
Bachelor1

步骤一:计算每个类别的违约率

首先,我们需要计算每个教育类别的违约率(违约客户数/该类别总客户数)和非违约率。

EducationDefault CountTotal CountDefault RateNon-Default Rate
Bachelor201000.200.80
Master151500.100.90
PhD5500.100.90

步骤二:计算WOE值

WOE值的计算公式是

假设整个数据集的违约率是0.15,非违约率是0.85,我们可以计算每个教育类别的WOE值:

EducationDefault RateNon-Default RateWOE
Bachelor0.200.800.4055
Master0.100.90-0.5108
PhD0.100.90-0.5108

步骤三:应用WOE编码

现在,我们可以用计算出的WOE值替换原始的Education类别。

EducationLoan DefaultWOE (Education)
Bachelor00.4055
Master0-0.5108
PhD1-0.5108
Bachelor00.4055
Master1-0.5108
Bachelor10.4055

这样,原始的类别变量Education就被转换成了数值变量WOE (Education),可以用于建模。WOE编码有助于模型更好地理解每个类别与目标变量的关系。

 

具体列式

根据你给出的数据,我们可以计算出每个教育类别的WOE值。以下是计算过程:

Bachelor

  • 违约率:0.20
  • 整体违约率:0.15
  • 非违约率:0.85
  • WOE = log(0.20 / 0.15) - log(0.80 / 0.85)

Master

  • 违约率:0.10
  • 整体违约率:0.15
  • 非违约率:0.85
  • WOE = log(0.10 / 0.15) - log(0.90 / 0.85)

PhD

  • 违约率:0.10
  • 整体违约率:0.15
  • 非违约率:0.85
  • WOE = log(0.10 / 0.15) - log(0.90 / 0.85)

将这些值代入公式中,我们可以得到每个教育类别的WOE值。

 

 

 模块介绍:万能的ensemble(集成学习)

在scikit-learn(通常简称为sklearn)库中,ensemble模块是一个提供集成学习方法的模块。集成学习方法通过结合多个基学习器(通常是决策树)来构建更加强大和鲁棒的模型。这个模块包含了多种流行的集成学习算法,如下:

  1. Bagging方法:

    • BaggingClassifier: 用于分类的Bagging集成。
    • BaggingRegressor: 用于回归的Bagging集成。
  2. 随机森林:

    • RandomForestClassifier: 用于分类的随机森林算法。
    • RandomForestRegressor: 用于回归的随机森林算法。
  3. Extra-Trees:

    • ExtraTreesClassifier: 用于分类的Extra-Trees(极度随机树)算法。
    • ExtraTreesRegressor: 用于回归的Extra-Trees算法。
  4. AdaBoost:

    • AdaBoostClassifier: 用于分类的AdaBoost算法。
    • AdaBoostRegressor: 用于回归的AdaBoost算法。
  5. 梯度提升:

    • GradientBoostingClassifier: 用于分类的梯度提升决策树(GBDT)算法。
    • GradientBoostingRegressor: 用于回归的梯度提升决策树算法。
  6. VotingClassifier: 用于分类的投票/堆叠集成,可以组合多个不同的分类器。

  7. StackingClassifierStackingRegressor`: 用于分类和回归的堆叠集成,通过堆叠多个不同的模型来提高性能。

ensemble模块中的这些类都是高级API,它们封装了复杂的集成学习过程,使得用户可以很容易地在自己的数据集上应用这些强大的机器学习技术。使用这些类通常涉及以下步骤:

  1. 实例化一个集成学习对象,指定所需的参数(例如基学习器的数量、类型等)。
  2. 使用fit方法在训练数据上训练模型。
  3. 使用predict方法对新数据进行预测。
  4. 使用score方法评估模型在测试数据上的性能。

这些集成学习方法通常能够提供比单个模型更好的泛化能力和鲁棒性,因此在机器学习竞赛和实际应用中非常受欢迎。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业微信开发010_使用WxJava企业微信开发框架_封装第三方应用企业微信开发003_并且实现多企业授权访问---企业微信开发012

继续来看吧,上一节,已经把config部分,代码都拿过来了: 并且把企业微信第三方应用开发部分,对应的config的配置,mutiltp 代码拿过来了,并且把yml中的配置也给出了. 然后,这里说一下config中的内容,到时候自己看也可以看懂 其实就是封装了,当系统启动,加载企微模块,这个时候,会…

Office2021下载与安装保姆级教程【Office Tool Plus】

Office Tool Plus安装Office2021 下载Office Tool Plus安装OfficeⅠ. 清除旧版本Ⅱ. 配置安装参数Ⅲ. 安装许可证Ⅳ. 激发(JH)Office 本文介绍使用Office Tool Plus工具下载、安装、部署Office 2021全过程。 下载Office Tool Plus OfficeToolPlus是一个…

Unity在WebGL中拍照和录视频

原工程地址https://github.com/eangulee/UnityWebGLRecoder Unity版本2018.3.6f1,有点年久失修了 https://github.com/xue-fei/Unity.WebGLRecorder 修改jslib适配了Unity2021 效果图 录制的视频 Unity在WebGL中拍照和录视频

【外文原版书阅读】《机器学习前置知识》1.线性代数的重要性,初识向量以及向量加法

目录 ​编辑 ​编辑 1.Chapter 2 Why Linear Algebra? 2.Chapter 3 What Is a Vector? 个人主页:Icomi 大家好,我是Icomi,本专栏是我阅读外文原版书《Before Machine Learning》对于文章中我认为能够增进线性代数与机器学习之间的理解的…

SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识

1. Spring Boot项目构建 1.1. 简介 基于官方网站https://start.spring.io进行项目的创建. 1.1.1. 简介 Spring Boot是基于Spring4框架开发的全新框架,设计目的是简化搭建及开发过程,并不是对Spring功能上的增强,而是提供了一种快速使用Spr…

【PyTorch】4.张量拼接操作

个人主页:Icomi 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术,能够处理复杂的数据模式。通过 PyTorch&#xff0…

新电脑安装系统找不到硬盘原因和解决方法来了

有不少网友反馈新电脑采用官方u盘方式装win10或win100出现找不到硬盘是怎么回事?后来研究半天发现是bios中开启了rst(vmd)模式。如果关闭rst模式肯定是可以安装的,但这会影响硬盘性能,有没有办法解决开启rst模式的情况安装win10或win11呢&…

「 机器人 」仿生扑翼飞行器中的“被动旋转机制”概述

前言 在仿生扑翼飞行器的机翼设计中,模仿昆虫翼的被动旋转机制是一项关键技术。其核心思想在于:机翼旋转角度(攻角)并非完全通过主动伺服来控制,而是利用空气动力和惯性力的作用,自然地实现被动调节。以下对这种设计的背景、原理与优势进行详细说明。 1. 背景:昆虫的被动…

Android GLSurfaceView 覆盖其它控件问题 (RK平台)

平台 涉及主控: RK3566 Android: 11/13 问题 在使用GLSurfaceView播放视频的过程中, 增加了一个播放控制面板, 覆盖在视频上方. 默认隐藏setVisibility(View.INVISIBLE);点击屏幕再显示出来. 然而, 在RK3566上这个简单的功能却无法正常工作. 通过缩小视频窗口可以看到, 实际…

【C++】类和对象(五)

1、初始化列表 作用&#xff1a;C提供了初始化列表语法&#xff0c;用来初始化属性。 语法&#xff1a; 构造函数&#xff08;&#xff09;&#xff1a;属性1&#xff08;值1&#xff09;&#xff0c;属性2&#xff08;值2&#xff09;...{}示例&#xff1a; #include<i…

Maven的下载安装配置

maven的下载安装配置 maven是什么 Maven 是一个用于 Java 平台的 自动化构建工具&#xff0c;由 Apache 组织提供。它不仅可以用作包管理&#xff0c;还支持项目的开发、打包、测试及部署等一系列行为 Maven的核心功能 项目构建生命周期管理&#xff1a;Maven定义了项目构建…

Mysql主从复制+MHA实验笔记[特殊字符]

目录 基本概念 工作原理 优势 环境准备&#xff1a;四台centos-其中三台mysql&#xff0c;一台MHA 配置一主两从 安装MHA 配置无密码认证 配置MHA 模拟master故障 基本概念 MySQL 主从复制&#xff1a;是 MySQL 数据库中实现数据冗余、数据备份和高可用性的重要技术手…

面向长文本的多模型协作摘要架构:多LLM文本摘要方法

多LLM摘要框架在每轮对话中包含两个基本步骤:生成和评估。这些步骤在多LLM分散式摘要和集中式摘要中有所不同。在两种策略中,k个不同的LLM都会生成多样化的文本摘要。然而在评估阶段,多LLM集中式摘要方法使用单个LLM来评估摘要并选择最佳摘要,而分散式多LLM摘要则使用k个LLM进行…

Python中容器类型的数据(上)

若我们想将多个数据打包并且统一管理&#xff0c;应该怎么办? Python内置的数据类型如序列(列表、元组等)、集合和字典等可以容纳多项数据&#xff0c;我们称它们为容器类型的数据。 序列 序列 (sequence) 是一种可迭代的、元素有序的容器类型的数据。 序列包括列表 (list)…

[Qt]系统相关-网络编程-TCP、UDP、HTTP协议

目录 前言 一、UDP网络编程 1.Qt项目文件 2.UDP类 QUdpSocket QNetworkDatagram 3.UDP回显服务器案例 细节 服务器设计 客户端设计 二、TCP网络编程 1.TCP类 QTcpServer QTcpSocket 2.TCP回显服务器案例 细节 服务器设计 客户端设计 三、HTTP客户端 1.HTTP…

信息系统管理工程师第6-8章精讲视频及配套千题通关双双发布,附第14章思维导图

这一周发文少&#xff0c;不是我在偷懒&#xff0c;而是在和信管的视频及千题通关“”浴血奋战 &#xff0c;特别是第8章卡了我很久&#xff0c;因为内容实在太多&#xff0c;精讲视频估计都差不多4个小时了&#xff0c;还好终于在春节前拿下&#xff0c;提供给小分队的同学&am…

npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported

vue 启动项目时&#xff0c;npm run serve 报下面的错&#xff1a; error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:133:10) at FSReqCallback.readFileAfterClose [as on…

Excel 技巧21 - Excel中整理美化数据实例,Ctrl+T 超级表格(★★★)

本文讲Excel中如何整理美化数据的实例&#xff0c;以及CtrlT 超级表格的常用功能。 目录 1&#xff0c;Excel中整理美化数据 1-1&#xff0c;设置间隔行颜色 1-2&#xff0c;给总销量列设置数据条 1-3&#xff0c;根据总销量设置排序 1-4&#xff0c;加一个销售趋势列 2&…

力扣算法题——11.盛最多水的容器

目录 &#x1f495;1.题目 &#x1f495;2.解析思路 本题思路总览 借助双指针探索规律 从规律到代码实现的转化 双指针的具体实现 代码整体流程 &#x1f495;3.代码实现 &#x1f495;4.完结 二十七步也能走完逆流河吗 &#x1f495;1.题目 &#x1f495;2.解析思路…

微服务学习-服务调用组件 OpenFeign 实战

1. OpenFeign 接口方法编写规范 1.1. 在编写 OpenFeign 接口方法时&#xff0c;需要遵循以下规范 1.1.1.1. 接口中的方法必须使用 RequestMapping、GetMapping、PostMapping 等注解声明 HTTP 请求的类型。 1.1.1.2. 方法的参数可以使用 RequestParam、RequestHeader、PathVa…