红酒分类案例中使用分箱处理

news2025/1/20 12:02:14

红酒分类案例中使用分箱处理

描述

在建立分类模型时,通常需要对连续特征进行离散化(Discretization)处理 ,特征离散化后,模型更加稳定,降低了过拟合风险。离散化也叫分箱(binning),是指把连续的特征值划分为离散的特征值(划分为不同的箱子),比如把0-100分的考试成绩由连续数值转换为80以上、60~80之间、60以下三个分箱值(可以用0、1、2或独热编码表示),分箱后有助于提升分类模型的表现。

本任务的实践内容包括:

1、学习并熟悉Scikit-learn中的分箱处理类KBinsDiscretizer。

2、在红酒预测案例中引入分箱处理,对比分类模型的性能。

源码下载

环境

  • 操作系统:Windows 10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    scikit-learn	0.24.2
    numpy           1.19.5
    pandas          1.1.5
    ipython         7.16.3
    

分析

本任务涉及以下环节:

A)熟悉KBinsDiscretizer的参数及分箱策略

B)加载并观察红酒数据集

C)建立KNN分类模型,评估成绩

D)进行分箱预处理

E)对比模型在分箱后数据上的表现

实施

1、熟悉Scikit-learn的分箱功能

1、生成一组随机成绩

2、分别使用等宽、等频、聚类等策略以及独热编码方式进行分箱

from sklearn.preprocessing import KBinsDiscretizer
import numpy as np

# 随机生成一组成绩
np.random.seed(seed=1)
score = np.random.randint(0, 100, 12)
score.sort() # 排序
print(score)

# 等宽分箱(uniform),分4箱(n_bins),每个箱的数值宽度相同,数字顺序编码(ordinal)
bins =KBinsDiscretizer(n_bins=[4], encode='ordinal', strategy='uniform')
X = bins.fit_transform(score.reshape(-1, 1))
print(X.T)

# 等频分箱(uniform),分4箱(n_bins),每个箱的元素个数相同,数字顺序编码(ordinal)
bins =KBinsDiscretizer(n_bins=[4], encode='ordinal', strategy='quantile')
X = bins.fit_transform(score.reshape(-1, 1))
print(X.T)

# 聚类分箱(kmeans),分4箱,每个箱中的值到其1维K均值聚类簇心的距离相同,数字顺序编码(ordinal)
bins =KBinsDiscretizer(n_bins=[4], encode='ordinal', strategy='kmeans')
X = bins.fit_transform(score.reshape(-1, 1))
print(X.T)

# 等宽分箱(uniform),分4份(n_bins),每份数值宽度相同,独热编码(onehot)
bins =KBinsDiscretizer(n_bins=[4], encode='onehot', strategy='uniform')
X = bins.fit_transform(score.reshape(-1, 1))
print(X.toarray())

结果如下:

[ 1  5  9 12 16 37 64 71 72 75 76 79]
[[0. 0. 0. 0. 0. 1. 3. 3. 3. 3. 3. 3.]]
[[0. 0. 0. 1. 1. 1. 2. 2. 2. 3. 3. 3.]]
[[0. 0. 0. 0. 0. 1. 2. 2. 2. 3. 3. 3.]]
[[1. 0. 0. 0.]
 [1. 0. 0. 0.]
 [1. 0. 0. 0.]
 [1. 0. 0. 0.]
 [1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]
 [0. 0. 0. 1.]]

2、加载查看红酒数据集

from sklearn.datasets import load_wine
from sklearn.model_selection import  train_test_split
from sklearn.neighbors import KNeighborsClassifier
from IPython.display import display
import pandas as pd

# 加载、查看wine数据集
wine = load_wine()
df = pd.DataFrame(wine.data, columns=wine.feature_names)
display(df)

结果如下:

请添加图片描述

3、对比分箱前后KNN分类模型的性能

# 不进行分箱处理,直接拆分并使用KNN建模
X_train, X_test, y_train, y_test = train_test_split(wine.data, wine.target, random_state=0) 
knn = KNeighborsClassifier(5).fit(X_train, y_train)
score = knn.score(X_test, y_test)
print('Score without bins: %0.2f'%score) # 输出成绩

# 先进行分箱处理,再拆分建模,对比模型成绩
bins =KBinsDiscretizer(n_bins=[7 for i in range(13)], encode='ordinal', strategy='uniform')
data_bins = bins.fit_transform(wine.data)

X_train_bins, X_test_bins, y_train, y_test = train_test_split(data_bins, wine.target, random_state=0)
knn = KNeighborsClassifier(5).fit(X_train_bins, y_train)
score = knn.score(X_test_bins, y_test)
print('Score with bin: %0.2f'%score)

结果如下:

Score without bins: 0.73
Score with bin: 0.98

对连续特征进行分箱离散化后,分类模型的性能提升明显。

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

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

相关文章

Binder Driver 初探从驱动层角度来看

1:驱动概述 1.1基本简介 Binder 驱动是 Android 专用的,但底层的驱动架构与Linux 驱动一样。binder 驱动在以 misc 设备进行注册,作为虚拟字符设备,没有直接操作硬件,只是对设备内存的处理。主要是驱动设备的初始化(b…

如何刻录光盘文件

常识补充刻录机简介光盘刻录机是一种数据写入设备,利用激光将数据写到空光盘上从而实现数据的储存。其写入过程可以看做普通光驱读取光盘的逆过程。基本原理刻入数据时,利用高功率的激光束反射到盘片,使盘片上发生变化,模拟出二进…

计算机网络常见协议

文章目录 计算机网络TCP/IP协议TCP协议的三次握手和四次挥手TCP连接建立过程TCP连接断开过程为什么要三次握手?为什么要四次挥手? UDP协议HTTP协议 计算机网络 学习计算机网络,来记录一下。 TCP/IP协议 TCP/IP协议是Internet最基本的协议、…

报错-crontab -e 定时任务执行失败排查

使用 crontab -e 定时启动 jar 包服务失败,排查过程如下: 1、查看 crontab 服务 crontab -l陈列出了待执行任务列表,crontab 正常。 2、检查脚本 单独执行脚本没有问题,脚本内容为检查线程,杀死线程,重…

Python每日一练(20230419)

目录 1. N皇后 II 🌟🌟🌟 2. 迷宫问题(递归) 🌟🌟🌟 3. 体操比赛成绩统计 ※ 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

分布式ID的生成方法

问题的提出 如今随着互联网的发展,数据的量级也是呈指数的增长,从GB到TB到PB.对数据的各种操作也是愈 加的困难,如何解决这个问题呢?此时就需要做数据库集群,为了提高查询性能将一一个数据库的数据分散 到不同的数据库中存储&am…

JVM垃圾回收与调优

文章目录 1、如何判断对象可以回收1.1、 引用计数法1.2、可达性分析法1.3、五种引用类型1.3.1 、强引用1.3.2 、软、弱引用1.3.3 、虚引用、终结器引用1.3.4、 终结器引用1.3.5 、总结 2. 垃圾清除算法2.1、标记清除2.2 、标记整理2.3、 复制 3. 分代垃圾回收3.1 、新生代、老年…

Excel技能之时间,士别三日让boss刮目相看

爱因斯坦说:“复利是世界第八大奇迹。”复利离不开时间,你也离不开时间。时间是如此重要,对每个人都是公平的。 曾经的你,看日历,数手指才能算清楚日期,不懂时间函数,太烦躁了。以下用真实的使…

哪种无线耳机音质最好?盘点2023四款好音质蓝牙耳机

随着蓝牙技术的发展,近几年人们对于蓝牙耳机的需求也在不断增加。但,蓝牙耳机自始至终都是用来听的,所以音质对于一款蓝牙耳机来说还是很重要的。下面,我来给大家推荐四款好音质蓝牙耳机,可以当个参考。 一、南卡小音舱…

沉岛思想(BFS)-朋友圈思想(并查集)

本篇博客旨在记录自已笔记,同时希望可给小伙伴一些帮助。本人也是算法小白,水平有限,如果文章中有什么错误之处,希望小伙伴们可以在评论区指出来,共勉 💪。 沉岛思想: 题目: 给定一…

Sharding-JDBC之水平分库水平分表

目录 一、简介二、maven依赖三、数据库3.1、创建数据库3.2、创建表 四、配置(二选一)4.1、properties配置4.2、yml配置 五、实现5.1、实体5.2、持久层5.3、服务层5.4、测试类5.4.1、保存数据5.4.2、查询数据 一、简介 这里的水平分库分表是指 水平分库 …

台湾精锐APEX行星减速机直齿轮和斜齿轮有什么区别?如何选择?

台湾精锐APEX行星减速机是带太阳齿轮/行星齿轮/齿圈的机械装置。行星减速机是由太阳齿轮,行星齿轮的齿轮架和齿圈组成的机械装置。太阳齿轮位于中心,将扭矩传递到围绕太阳齿轮旋转的行星齿轮。行星齿轮和太阳齿轮位于齿圈内。 APEX减速机分为直齿轮和斜…

7.2 参数区间的估计

学习目标: 要学习参数的区间估计,我会采取以下步骤: 学习理论知识:首先,我会学习与参数的区间估计相关的理论知识,包括置信区间、抽样分布、中心极限定理、样本容量对置信区间的影响等。 掌握计算方法&am…

【小程序】小程序组件-2

目录 一. 滚轮选框 二. 音频组件 一. 滚轮选框 说真的,感谢微信开发者工具,让我这种笨比能够轻松学会这种看起来相当复杂的组件 picker组件的mode有几种模式,region啦,date啦,time啦,可以自行尝试 针对…

牛客社区项目

创建项目 认识Spring Spring Ioc Inversion 偶发Control 控制反转,是一种面向对象的设计思想。Dependecy Injection 依赖注入,是Ioc思想的实现方式。Ioc Container Ioc容器,是实现依赖注入的关键,本质上是一个工厂。 下面通过…

解决若依验证码异常:Error: image == null

前言 前两天在改项目突然发现若依的框架可以正常启动但是验证码加载不出来了,一直弹窗提示异常信息,下边是关于问题的描述和解决方案,没有耐心看过程的建议直接滑到最底下看解决方式 问题原因 登录页面一直提示 image null 如图 1 所示&…

最新研究!充分发挥混合量子经典算法新潜力

日本理化学研究所RIKEN的研究人员开发了一种量子计算算法,可高效准确地计算复杂材料中的原子级相互作用。物理学家理查德费曼于1981年首次提出量子计算机的应用,而该算法有可能为凝聚态物理学和量子化学带来前所未有的新局面。 量子计算机有望增强数字处…

数据格式转换(labelme、labelimg、yolo格式相互转换)

👨‍💻个人简介: 深度学习图像领域工作者 🎉总结链接: 链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括: &am…

【鸿蒙应用ArkTS开发系列】- 常量类定义和使用

本篇为入门基础知识介绍,作为代码学习记录使用,请选择性阅读。 一、常量类定义 在ArkTS中,定一个常量很简单,具体如下: export const TAB_HOME_INDEX : number 1;export const TAB_HOME_NAME : string "首…

MobileNetV2详细原理(含torch源码)

目录 MobilneNetV2原理 MobileNetV2的创新点: MobileNetV2对比MobileNetV1 MobilneNetV2源码(torch版) 训练10个epoch的效果 MobilneNetV2原理 MobileNetV2是由谷歌开发的一种用于移动设备的轻量级卷积神经网络。与传统卷积神经网络相比…