机器学习数据预处理--连续变量分箱

news2024/11/28 15:58:49

文章目录

  • 原理概念
    • 等宽分箱
    • 等频分箱
    • 聚类分箱
    • 有监督分箱

原理概念

连续变量分箱即对连续型字段进行离散化处理,也就是将连续型字段转化为离散型字段。连续字段的离散过程如下所示:

在这里插入图片描述
连续变量的离散过程也可以理解为连续变量取值的重新编码过程,在很多时候,连续变量的离散化也被称为连续变量分箱。需要注意的是,离散之后字段的含义将发生变化,原始字段Income代表用户真实收入状况,而离散之后的含义就变成了用户收入的等级划分,0表示低收入人群、1表示中等收入人群、2代表高收入人群。连续字段的离散化能够更加简洁清晰的呈现特征信息,并且能够极大程度减少异常值的影响(例如Income取值为180的用户),同时也能够消除特征量纲影响,当然,最重要的一点是,对于很多线性模型来说,连续变量的分箱实际上相当于在线性方程中引入了非线性的因素,从而提升模型表现。当然,连续变量的分箱过程会让连续变量损失一些信息,而对于其他很多模型来说(例如树模型),分箱损失的信息则大概率会影响最终模型效果。

等宽分箱

所谓等宽分箱,需要先确定划分成几分,然后根据连续变量的取值范围划分对应数量的宽度相同的区间,并据此对连续变量进行分箱。例如上述Income字段取值在[0,180]之间,现对其进行等宽分箱分成三份,则每一份的取值范围分别是[0,60),[60,120),[120,180],连续字段将据此进行划分,分箱过程如下所示:
在这里插入图片描述
当然,我们也可以在sklearn的预处理模块中调用KBinsDiscretizer转化器实现该过程:

from sklearn import preprocessing

# 转化为列向量(这里需要注意,一列特征必须以列向量呈现,才能够被KBinsDiscretizer正确识别)
income = np.array([0, 10, 180, 30, 55, 35, 25, 75, 80, 10]).reshape(-1, 1)

# 三分等宽分箱,strategy选择'uniform'
dis = preprocessing.KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
dis.fit_transform(income)
# 运行结果
#	array([[0.],
#	       [0.],
#	       [2.],
#	       [0.],
#	       [0.],
#	       [0.],
#	       [0.],
#	       [1.],
#	       [1.],
#	       [0.]])

#	当然,在分箱结束后,可以通过.bin_edges_查看分箱依据(每个箱体的边界)
dis.bin_edges_
# array([array([  0.,  60., 120., 180.])], dtype=object)

等频分箱

在等频分箱的过程中,需要先确定划分成几分,然后选择能够让每一份包含样本数量相同的划分方式。
在这里插入图片描述

from sklearn import preprocessing

# 转化为列向量(这里需要注意,一列特征必须以列向量呈现,才能够被KBinsDiscretizer正确识别)
income = np.array([0, 10, 180, 30, 55, 35, 25, 75, 80, 10]).reshape(-1, 1)

# 两分等频分箱,strategy选择'quantile'
dis = preprocessing.KBinsDiscretizer(n_bins=2, encode='ordinal', strategy='quantile')
dis.fit_transform(income)
#	array([[0.],
#	       [0.],
#	       [1.],
#	       [0.],
#	       [1.],
#	       [1.],
#	       [0.],
#	       [1.],
#	       [1.],
#	       [0.]])

dis.bin_edges_
# array([array([  0. ,  32.5, 180. ])], dtype=object)

聚类分箱

所谓聚类分箱,指的是先对某连续变量进行聚类(往往是KMeans聚类),然后用样本所属类别作为标记代替原始数值,从而完成分箱的过程。这里我们仍然可以通过income数据来模拟该过程,此处我们使用KMeans对其进行三类别聚类:
在这里插入图片描述

from sklearn import preprocessing

# 转化为列向量(这里需要注意,一列特征必须以列向量呈现,才能够被KBinsDiscretizer正确识别)
income = np.array([0, 10, 180, 30, 55, 35, 25, 75, 80, 10]).reshape(-1, 1)

# 两分等频分箱,strategy选择'kmeans'
dis = preprocessing.KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='kmeans')
dis.fit_transform(income)
#	array([[0.],
#	       [0.],
#	       [2.],
#	       [0.],
#	       [1.],
#	       [0.],
#	       [0.],
#	       [1.],
#	       [1.],
#	       [0.]])
dis.bin_edges_
#	array([array([  0.  ,  44.16666667, 125.   , 180.   ])],  dtype=object)

有监督分箱

当然,无论是等宽/等频分箱,还是聚类分箱,本质上都是进行无监督的分箱,即在不考虑标签的情况下进行的分箱。而在所有的分箱过程中,还有一类是有监督分箱,即根据标签取值对连续变量进行分箱。在这些方法中,最常用的分箱就是树模型分箱。

import matplotlib.pyplot as plt
from sklearn import preprocessing
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier

# 转化为列向量(这里需要注意,一列特征必须以列向量呈现,才能够被KBinsDiscretizer正确识别)
income = np.array([0, 10, 180, 30, 55, 35, 25, 75, 80, 10]).reshape(-1, 1)
# 可以以income为特征,y为标签训练决策树:
y = np.array([1, 1, 0, 1, 0, 0, 0, 1, 0, 0])

clf = DecisionTreeClassifier().fit(income, y)

plt.figure(figsize=(6, 2), dpi=150)
tree.plot_tree(clf)

在这里插入图片描述
那么根据上述结果,如果需要对income进行三类分箱的话,则可以选择32.5和65作为切分点,对数据集进行切分:
在这里插入图片描述

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

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

相关文章

Qt环境搭建+简单程序实现

Qt是什么 Qt是一个跨平台的C图形用户界面应用程序框架。 框架的本质就是一群大佬发明的让菜鸡写出来的代码也也比较规范 也就是限制程序员的自由,让程序员写出来的代码规范。 库和框架有相似性。 库是被程序员调用的,(程序员是主体&…

PyTorch 2.2 中文官方教程(二)

在 YouTube 上介绍 PyTorch PyTorch 介绍 - YouTube 系列 原文:pytorch.org/tutorials/beginner/introyt.html 译者:飞龙 协议:CC BY-NC-SA 4.0 介绍 || 张量 || 自动微分 || 构建模型 || TensorBoard 支持 || 训练模型 || 模型理解 作者&a…

05 - python操作JSON

JSON认识 JSON,一种轻量级的文本数据交换格式,比XML更小更快,更易解析,爬虫经常要获取接口数据,接口数据就是JSON格式的。 格式示例 # 格式1:JSON 对象 {"name": "李嘉图", "a…

pytorch索引和切片

目录 1. 按索引方式取数据2. 以python切片方式取数据3. 指定index取数据4. ...代表除其前后指定维度外的所有维度5. masked_select() 使用掩码选择元素6. take 矩阵打平后选取 1. 按索引方式取数据 a[0,0,2,4] 其中0,0,2,4是索引从0开始 2. …

3.0 Hadoop 概念

本章着重介绍 Hadoop 中的概念和组成部分,属于理论章节。如果你比较着急可以跳过。但作者不建议跳过,因为它与后面的章节息息相关。 Hadoop 整体设计 Hadoop 框架是用于计算机集群大数据处理的框架,所以它必须是一个可以部署在多台计算机上…

灵活应对:策略模式在软件设计中的应用

策略模式是一种行为型设计模式,它允许定义一系列算法,并将每个算法封装起来,使它们可以互换使用。策略模式让算法的变化独立于使用算法的客户端,使得在不修改原有代码的情况下切换或扩展新的算法成为可能。 使用策略模式的场景包…

无人机遥感技术在地质灾害监测应用分析,多旋翼无人机应急救援技术探讨

地质灾害是指在地球的发展演变过程中, 由各种自然地质作用和人类活动所形成的灾害性地质事件。给人民的生命和财产安全带来严重威胁,因此有必要开展地质灾害预测预报、灾害应急和风险区划 遥感技术的快速发展为我们提供了一种获取实时灾害信息的可靠手段…

使用WPS制作三线表

点击边框和底纹点击1、2、3、4并且应用于表格点击确定 再次选中表格点击右键表格属性选择边框和底纹 选中表格第一行右键点击表格属性选择边框和底纹 如果表格中存在虚线

离线数仓-数据治理

目录 一、前言 1.1 数据治理概念 1.2 数据治理目标 1.3 数据治理要解决的问题 1.3.1 合规性 元数据合规性 数据质量合规性 数据安全合规性 1.3.2 成本 存储资源成本 计算资源成本 二、数据仓库发展阶段 2.1 初始期 2.2 扩张期 2.3 缓慢发展期 2.4 变革期 三、…

基于hadoop+spark的大规模日志的一种处理方案

概述: CDN服务平台上有为客户提供访问日志下载的功能,主要是为了满足在给CDN客户提供服务的过程中,要对所有的记录访问日志,按照客户定制的格式化需求以小时为粒度(或者其他任意时间粒度)进行排序、压缩、打包,供客户进行下载,以便进行后续的核对和分析的诉求。而且CDN…

判断和循环 - switch语句和练习

switch语句格式 switch(表达式) {case 值1:语句体1;break;case 值2:语句体2;break;...default:语句体n1;break; }执行流程: 首先计算表达式的值。依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中…

vue项目线上页面刷新报404 解决方法

一.修改配置文件 nginx.conf ,并重新加载或重启 我的nginx版本是1.9.9 location / {try_files $uri $uri/ /index.html; }原因: 打包后的dist下只有一个 index.html 文件及一些静态资源,这个是因为Vue是单页应用(SPA),只有一个…

《Python 网络爬虫简易速速上手小册》第6章:Python 爬虫的优化策略(2024 最新版)

文章目录 6.1 提高爬虫的效率6.1.1 重点基础知识讲解6.1.2 重点案例:使用 asyncio 和 aiohttp 实现异步爬虫6.1.3 拓展案例 1:利用 Scrapy 的并发特性6.1.4 拓展案例 2:使用缓存来避免重复请求 6.2 处理大规模数据爬取6.2.1 重点基础知识讲解…

新加坡大带宽服务器优势特点

随着互联网技术的不断进步,大带宽服务器在满足高速数据传输需求方面发挥着越来越重要的作用。新加坡,作为全球互联网基础设施的重要枢纽,其大带宽服务器在全球范围内备受关注。本文将深入探讨新加坡大带宽服务器的优势特点,以及如…

蓝桥杯每日一题----区间dp

前言 暂时没啥好说的,直接进入正题吧 引入 涂色PAINT 读题发现要求的是使一段区间满足要求的最小操作次数,考虑用动态规划去做。 第一步:考虑缩小规模,这里的规模其实就是区间长度,那么dp数组应该可以表示某个区间&…

白话 Transformer 原理-以 BERT 模型为例

白话 Transformer 原理-以 BERT 模型为例 第一部分:引入 1-向量 在数字化时代,数学运算最小单位通常是自然数字,但在 AI 时代,这个最小单元变成了向量,这是数字化时代计算和智能化时代最重要的差别之一。 举个例子:银行在放款前,需要评估一个人的信用度;对于用户而…

解析Python中HTTP代理的常见问题

在Python编程中,HTTP代理是一个经常被提及的概念,尤其在处理网络请求和爬虫时。但与此同时,使用HTTP代理也经常会遇到一些令人头疼的问题。接下来,就让我们一起解析一下Python中使用HTTP代理时常见的那些问题。 1. 代理服务器无响…

06、全文检索 -- Solr -- Solr 全文检索之在图形界面管理 Core 的 Schema(演示对 普通字段、动态字段、拷贝字段 的添加和删除)

目录 Solr 全文检索之管理 Schema使用Web控制台管理Core的Schema3 种 字段解释:Field:普通字段Dynamic Field:动态字段Copy Field:拷贝字段 演示:添加 普通字段( Field )演示:添加 动…

CSS写渐变边框线条

box-sizing: border-box; border-top: 1px solid; border-image: linear-gradient(to right, red, blue) 1;

建筑行业数字化:从设计到运维的全面革新

随着科技的快速发展,数字化技术在各行各业中的应用越来越广泛。建筑行业作为传统产业,也在积极拥抱数字化技术,以提高效率、降低成本并实现可持续发展。本文将主要探讨建筑行业数字化的几个关键领域,包括建筑设计数字化、施工管理…