[python数据处理系列]详解独热编码与标签编码的区别及在Pandas中的实现

目录

一、独热编码与标签编码的区别

二、创建数据集

三、独热编码实现

(一) 自动将所有分类变量进行独热编码

(二) 对指定列进行独热编码

(三) 对进行独热编码的列采用布尔型表示

四、查看数据类型

五、对数据进行独热编码后,数据变成了什么类型

一、独热编码与标签编码的区别

独热编码适用于类别之间无顺序或大小关系时,而标签编码适用于类别之间有明确的顺序关系时。

独热编码(One-Hot Encoding)和标签编码(Label Encoding)是数据预处理中的两种常见方法,它们主要用于处理分类数据。以下是具体分析:

1. 独热编码:
  - 适用于类别之间没有顺序或大小关系的情况。它为每个类别创建一个新的二进制特征,对于每个样本,只有一个二进制特征为1(表示它属于该类别),其他特征为0。
  - 这种方法可以防止模型错误地解释类别之间的顺序或大小关系,因为所有类别都是平等的,没有内在的顺序。
  - 例如,如果一个特征是颜色,它有三个值:红、蓝、绿,独热编码会将它们分别表示为[1, 0, 0]、[0, 1, 0]、[0, 0, 1],这样模型就不会错误地认为红色小于蓝色等。

2. 标签编码:
  - 适用于类别之间存在明确的顺序关系时。它将不同的类别使用唯一的数字来表示,例如,红=1,黄=2,蓝=3。
  - 这种方法适用于类别之间有自然顺序的情况,比如评分等级(低、中、高)。
  - 标签编码可能会导致模型学习到错误的关系,比如在上面的颜色例子中,模型可能会错误地认为“红<黄<蓝”,这可能不是我们想要模型学习的关系。

在实际应用中,选择哪种编码方式取决于数据的特点和模型的需求。如果类别之间没有顺序关系,或者你不希望模型学习到任何顺序关系,那么独热编码是更好的选择。如果类别之间有自然的顺序,或者你需要保持这种顺序,那么标签编码可能更合适。不过,在使用标签编码时,需要注意可能引入的模型偏差问题。

二、创建数据集

其中week和state这两列是分类变量

import pandas as pd
a=pd.DataFrame()
a["平均值"]=[123,456,789,159,357,852,159]
a["中位数"]=[159,159,258,369,357,159,852]
a["week"]=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
a["state"]=["1","2","3","1","2","3","1"]
a

三、独热编码实现

(一) 自动将所有分类变量进行独热编码

这种方法是自动识别数据表中的分类变量,然后将所有的分类变量自动实现独热编码

# 独热编码 one-hot
a1 = pd.get_dummies(a)#帮你判断哪一列是字符串,自动地帮你把字符串直接展开
#a2 = pd.get_dummies(a).astype(int)#输出打印体会一下加不加.astype(int)的区别
a1

(二) 对指定列进行独热编码

a3 = pd.get_dummies(a, columns=['week'])
a3

(三) 对进行独热编码的列采用布尔型表示

# 对'state'列进行独热编码
a_encoded = pd.get_dummies(a['state'])# 将独热编码后的整数型数据转换为布尔型
a_encoded_bool = a_encoded.astype(bool)# 将转换后的独热编码列和原始的DataFrame合并
a_final = pd.concat([a[['平均值', '中位数', 'week']], a_encoded_bool], axis=1)

四、查看数据类型

在Pandas中,object数据类型指的是字符串类型

使用pd.get_dummies(a)进行独热编码后,数据类型出现了unit8类型,这可能是因为Pandas在进行独热编码时,默认将非零值转换为整数类型。这里的unit8实际上是指无符号的8位整数类型(uint8),它与标准整数类型(int)在存储和处理上有所不同。

首先,我们来解释一下为什么会出现uint8类型:

  • 独热编码的默认行为:在使用pd.get_dummies()函数进行独热编码时,如果没有指定dtype参数,Pandas会将生成的独热编码列的数据类型设置为布尔型(bool),即True和False。然而,在某些情况下,Pandas可能会将这些布尔值进一步转换为整数类型,以便于进行数学计算和提高存储效率。
  • 数据类型的自动转换:Pandas在处理数据时,会根据数据的内容自动选择合适的数据类型。在这种情况下,由于独热编码后的列只包含0和1,因此Pandas选择了uint8类型,这是最小宽度足以存储这些值的整数类型。

其次,如果您希望独热编码后的列使用标准的整数类型(int),可以通过指定dtype参数来实现:

  • 指定dtype参数:在调用pd.get_dummies()函数时,可以通过设置dtype=int来指定独热编码列的数据类型为整数型。例如:a1 = pd.get_dummies(a, dtype=int)。这样就可以确保独热编码后的列使用标准的整数类型。

总结来说,独热编码后出现uint8类型是因为Pandas在没有明确指定数据类型时,根据数据内容自动选择了最适合的整数类型。如果您希望使用标准的整数类型,可以在pd.get_dummies()函数中通过dtype参数来指定。

五、对数据进行独热编码后,数据变成了什么类型

对数据进行独热编码处理之后,原本的分类数据会被转换为数值型数据,具体来说,转化后的数据通常是以0和1组成的稀疏矩阵或DataFrame。在Pandas中,经过pd.get_dummies()函数处理后,产生的新列的数据类型通常是float64,这是因为即使所有值仅为0或1,Pandas也会默认使用浮点数类型来表示这些值。

然而,如果后续手动调用.astype(int)方法,则可以把这些0和1的值转换为整数类型int。在机器学习领域中,无论是浮点数类型还是整数类型对于大多数算法来说都可以被接受,因为0和1代表的含义是相同的——即类别是否存在或是否选择该特征。不过在某些情况下,特别是当你希望减少存储空间或者根据项目需求必须使用整数时,可能会选择将独热编码后的数据转换为整数类型。

对数据进行独热编码处理后,数据变成了稀疏的二元特征类型。

独热编码(One-Hot Encoding)是一种数据预处理技术,它主要用于将类别型特征转换成数值型特征,以便机器学习模型能够处理。具体来说,对于每一个特征,如果它有m个可能的值,那么经过独热编码后,就会变成m个二元特征,每个二元特征只有0和1两种状态。这些二元特征互斥,每次只有一个被激活,即只有一个特征值为1,其余都为0。这样的编码方式确保了算法是基于向量空间中的度量来进行计算,使得非偏序关系的变量取值不具有偏序性,并且在欧氏空间中是等距的。

在实际应用中,独热编码通常会导致数据集的维度显著增加,因为每个类别都会对应一个新的二元特征。例如,如果一个特征有5个可能的值,独热编码后会产生5个新的二元特征。这种高维稀疏数据结构在存储和计算上可能会带来挑战,但它有助于模型更好地理解和区分不同的类别。

总的来说,独热编码是一种有效的方法,用于将分类数据转换为模型可处理的数值型数据,尤其是在处理非数值型的类别特征时。然而,需要注意的是,在使用独热编码时,应该考虑到它可能会增加数据的维度,以及对存储和计算资源的影响。

 

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

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

相关文章

Python 数据结构和算法实用指南(三)

原文&#xff1a;zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第七章&#xff1a;哈希和符号表 我们之前已经看过数组和列表&#xff0c;其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效…

如何利用pg_dump和pg_restore迁移从一个PostgreSQL服务器到另一个服务器,同时保持一致性与高效性?

文章目录 解决方案1. 使用pg_dump导出数据2. 将导出的数据复制到目标服务器3. 使用pg_restore导入数据保持一致性与高效性的策略一致性高效性 示例代码导出数据复制数据到目标服务器在目标服务器上解压并导入数据 PostgreSQL数据库的迁移是一个常见的任务&#xff0c;特别是在升…

23.组件注册方式

组件注册方式 一个 Vue 组件在使用前需要先被“注册”&#xff0c;这样 Vue 才能在渲染模板时找到其对应的实现。组件注册有两种方式&#xff1a;全局注册和局部注册 全局注册 import { createApp } from vue import App from ./App.vue import GlobalComponent from ".…

一文搞懂对比度、清晰度、锐度、通透性怎么描述,说点能看懂的!

1.对比度是指的画面的明暗反差程度,增加对比度,画面中亮的地方会更亮,暗的地方会更暗,明暗反差增强。 2.锐度只作用于物体的边缘,但原理不同,主要是通过在边缘增加黑白相间的高对比线条“隔离带”,并不是渐变的,而是两边明暗反差非常分明的,影响范围小于清晰度,让边缘…

4月21敲一篇猜数字游戏,封装函数,void,无限循环,快去体验体验

今天敲一篇猜数字游戏 目录 今天敲一篇猜数字游戏 1.打开先学goto语句&#xff1a; 2.开干&#xff1a; 首次我们学习随机数&#xff1a; 讲解一下&#xff1a; 改用srand; 加入时间变量&#xff1a; 获取时间&#xff1a;哈​编辑 3.我本来想已近够完美了&#xff0…

如何在群晖NAS部署office系统办公服务并实现无公网IP远程编辑文件

文章目录 本教程解决的问题是&#xff1a;1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是&#xff1a; 1.Word&#xff0c;PPT&#xff0c;Excel等重要文件存在本地环境&#xff0c;如何在编…

基于springboot,vue学生在线学习系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 权限划分 管理员&#xff0c;教师&#xff0c;学生 管理员&#xff1a; 学生管理&#xff1a;新增学生&#xff0c;编辑学生&#xff0c;删除学生 教师管理&#xff1a;新增教师&#xff0c;编辑教师&#xff0c;删除…

pyskl手势/动作识别的实现与pytorch cuda环境部署保姆教程

恭喜你&#xff0c;找到这篇不需要翻墙就能够成功部署的方法。在国内布置这个挺麻烦的&#xff0c;其他帖子会出现各种问题不能完全贯通。便宜你了。。 实话5年前我用1080训练过一个基于卷积和ltsm的手势识别&#xff0c;实话实说感觉比现在效果好。是因为现在的注意力都在tra…

Spring(下)

接上篇&#xff0c;从第八个问题讲起 八.Spring工厂创建复杂对象 1.什么是复杂对象 简单对象就是可以直接new出来的&#xff0c;也就是直接调用构造方法创建 所以复杂对象就是不能直接通过调用构造方法创建。就比如JDBC中的Connection 2.三种方法 &#xff08;1&#xff…

游戏测试之常见控制技能(下)

备注&#xff1a;未经博主允许禁止转载 个人笔记&#xff08;整理不易&#xff0c;有帮助&#xff0c;收藏点赞评论&#xff0c;爱你们&#xff01;&#xff01;&#xff01;你的支持是我写作的动力&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_w…

Linux--Linux常用命令

Linux常用命令 前言Linux命令格式命令讲解1、ls:查看当前目录下所有的内容语法:ls[-al][dir]2、pwd: 查看当前所在目录3、cd : 切换目录4、touch[文件名] : 如果文件不存在新建文件5、mkdir: 创建目录6、rm: 删除指定文件7、rmdir: 删除空目录8、cat:用于显示文件内容9、m…

vue3图片展示实战

首先得有一个vue3项目 教程&#xff1a; vue3项目搭建 我测试存在两种方式可以将本地图片进行展示到页面 public文件夹下可以直接导入src下的asset文件夹下得图片需要在 script 标签内声明再导入网页图片不可导入&#xff0c;应该是存在一种限制 1&#xff0c;创建文件demo1I…