Python中的标签编码和独热编码

news2024/10/5 18:34:36

在机器学习项目中,我们通常处理具有不同分类列的数据集,其中一些列的元素在有序变量类别中,例如列收入水平具有低,中或高的元素,在这种情况下,我们可以用1,2,3替换这些元素。其中1表示“低”,2表示“中”,3表示“高”。通过这种类型的编码,我们试图保留元素的含义,其中较高的权重被分配给具有较高优先级的元素。

标签编码

标签编码是一种用于将分类列转换为数值列的技术,以便它们可以通过仅采用数值数据的机器学习模型进行拟合。它是机器学习项目中重要的预处理步骤。

标签编码示例

假设我们在某个数据集中有一个列Height,其中包含Tall,Medium和short元素。要将此分类列转换为数值列,我们将对此列应用标签编码。在应用标签编码之后,“高度”列被转换为具有元素0、1和2的数值列,其中0是高的标签,1是中等的标签,2是矮的标签。

在这里插入图片描述

我们将在目标列Species上的虹膜数据集上应用Label Encoding。它包含三个物种Iris-setosa,Iris-versicolor,Iris-virginica。


# Import libraries 
import numpy as np
import pandas as pd
  
# Import dataset
df = pd.read_csv('../../data/Iris.csv')
  
df['species'].unique()

'''
array(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'], dtype=object)
'''

使用LabelEncoder()应用Label Encoding后,我们的分类值将替换为数值[int]。

# Import label encoder
from sklearn import preprocessing
  
# label_encoder object knows 
# how to understand word labels.
label_encoder = preprocessing.LabelEncoder()
  
# Encode labels in column 'species'.
df['species']= label_encoder.fit_transform(df['species'])
  
df['species'].unique()

'''
array([0, 1, 2], dtype=int64)
'''

标签编码的局限

标签编码将分类数据转换为数字数据,但它为每个数据类别分配一个唯一的数字(从0开始)。这可能导致在数据集的模型训练期间产生优先级问题。具有高值的标签可以被认为具有比具有较低值的标签高的优先级。

具有输出类Mexico、Paris、Dubai的属性。在“标签编码”上,此列允许将“Mexico”替换为“0”,将“Paris”替换为“1”,将“Dubai”替换为“2”。
由此,可以解释为在训练模型时,Dubai具有比Mexico和Paris更高的优先级,但实际上,这些城市之间不存在这种优先级关系。

独热编码

我们在数据科学项目开发过程中遇到的大多数现实数据集都具有混合数据类型的列。这些数据集由分类列和数值列组成。然而,各种机器学习模型不适用于分类数据,为了将这些数据拟合到机器学习模型中,需要将其转换为数值数据。例如,假设数据集有一个Gender列,其中包含Male和Female等分类元素。这些标签没有特定的偏好顺序,而且由于数据是字符串标签,机器学习模型会误解其中存在某种层次结构。
解决这个问题的一种方法是标签编码,我们将为这些标签分配一个数值,例如映射到0和1的男性和女性。但这可能会在我们的模型中增加偏差,因为它将开始对女性参数给予更高的偏好,因为1>0,但理想情况下,两个标签在数据集中同等重要。为了解决这个问题,我们将使用独热编码技术。

独热编码是我们用来在机器学习模型中将分类变量表示为数值的技术。

使用独热编码的优点包括:

  • 它允许在需要数值输入的模型中使用分类变量。
  • 它可以通过向模型提供有关分类变量的更多信息来提高模型性能。
  • 它可以帮助避免排序问题,当分类变量具有自然排序时可能发生这种情况(例如,“小”、“中”、“大”)。

使用独热编码的缺点包括:

  • 它可能导致维度增加,因为为变量中的每个类别创建了单独的列。这可能会使模型更加复杂,训练速度更慢。

  • 它可能导致稀疏数据,因为大多数观测值在大多数独热编码列中的值为0。

  • 它可能会导致过度拟合,特别是当变量中有许多类别并且样本量相对较小时。

  • 独热编码是一种处理分类数据的强大技术,但它可能导致增加的维度,稀疏性和过拟合。重要的是要谨慎使用它,并考虑其他方法,如序数编码或二进制编码。

示例

在独热编码中,分类参数将为男性和女性标签准备单独的列。因此,只要有男性,男性列中的值将为1,女性列中的值将为0,反之亦然。让我们用一个例子来理解:考虑给定水果、其对应的分类值和价格的数据。

在这里插入图片描述
在对数据应用独热编码之后的输出如下给出,
在这里插入图片描述

创建一个dataframe来实现CSV文件的独热编码。


# Program for demonstration of one hot encoding
  
# import libraries
import numpy as np
import pandas as pd
  
# import the data required
data = pd.read_csv('employee_data.csv')
print(data.head())

在这里插入图片描述
分类列中的唯一元素


print(data['Gender'].unique())
print(data['Remarks'].unique())

'''
array(['Male', 'Female'], dtype=object)
array(['Nice', 'Good', 'Great'], dtype=object)
'''

列中元素的计数


data['Gender'].value_counts()
data['Remarks'].value_counts()

'''
Female    7
Male      5
Name: Gender, dtype: int64

Nice     5
Great    4
Good     3
Name: Remarks, dtype: int64
'''

我们有两种方法可用于对分类列执行one-hot编码。

利用Pandas库实现分类列的独热编码

我们可以使用pandas中的pd.get_dummies()函数对分类列进行one-hot编码。


one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender'])
print(one_hot_encoded_data)

在这里插入图片描述
我们可以观察到数据中有3个备注和2个性别列。但是,如果它有n个唯一标签,则可以只使用n-1列来定义参数。例如,如果我们只保留Gender_Female列并删除Gender_Male列,那么我们也可以传达整个信息,当标签为1时,它表示女性,当标签为0时,它表示男性。通过这种方式,我们可以对分类数据进行编码,并减少参数的数量。

使用Scikit Learn Library进行独热编码

Scikit-learn(sklearn)是Python中一个流行的机器学习库,它提供了许多用于数据预处理的工具。它提供了一个OneHotEncoder函数,我们使用该函数将分类和数值变量编码为二进制向量,也是在实现该算法之前。确保分类值必须被标记和编码,因为独热编码仅采用数字分类值。


# importing libraries
import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder
  
# Retrieving data
data = pd.read_csv('Employee_data.csv')
  
# Converting type of columns to category
data['Gender'] = data['Gender'].astype('category')
data['Remarks'] = data['Remarks'].astype('category')
  
  
# Assigning numerical values and storing it in another columns
data['Gen_new'] = data['Gender'].cat.codes
data['Rem_new'] = data['Remarks'].cat.codes
  
  
# Create an instance of One-hot-encoder
enc = OneHotEncoder()
  
# Passing encoded columns
  
enc_data = pd.DataFrame(enc.fit_transform(
    data[['Gen_new', 'Rem_new']]).toarray())
  
# Merge with main
New_df = data.join(enc_data)
  
print(New_df)

在这里插入图片描述
注意:这里我们已经将enc.fit_transform()方法转换为数组,因为OneHotEncoder的fit_transform方法返回SpiPy稀疏矩阵,因此当我们有大量分类变量时,首先转换为数组可以保存空间。

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

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

相关文章

【100天精通python】Day9:数据结构_字典、集合

目录 目录 1 字典 1.1 字典的基本操作示例 1.2 字典推导式 2 集合 2.1 集合的常用操作示例 3 列表、元组、字典、集合的区别 1 字典 在Python中,字典(Dictionary)是一种无序的数据结构,用于存储键值对的集合。每个…

flask 读取文件夹文件,展示在页面,可以通过勾选删除

项目结构 app.py from flask import Flask, render_template, request, redirect, url_for import os import globapp Flask(__name__)app.route(/, methods[GET, POST]) def index():if request.method POST:to_delete request.form.getlist(checks)for file in to_delete…

Spring Security 的工作原理/总体架构

目录 1、过滤器的视角 2、DelegatingFilterProxy 委派过滤器代理(类) 2、FilterChainProxy 过滤器链代理(类) 4、SecurityFilterChain 安全过滤器链(接口) 5、Security Filters 安全过滤器实例 6、Sp…

解锁潜力,驭数赋能:大数据与云计算的强强联合

随着数字化时代的来临,大数据和云计算已成为信息技术领域的两大热门话题。大数据指的是以海量、高速、多样化的数据为基础,通过分析和挖掘来获得有价值的信息和洞察。而云计算则是一种基于网络的计算模式,通过将数据和应用程序存储在云端服务…

day31-Password Generator(密码生成器)

50 天学习 50 个项目 - HTMLCSS and JavaScript day31-Password Generator&#xff08;密码生成器&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport&q…

Qt 之 自定义日志文件,QtMessageHandler应用

目录 一、前言 二、头文件代码 三、源文件代码 四、使用示例 五、使用效果 一、前言 在qt程序发布后&#xff0c;还需要查看一些调试输出信息&#xff0c;一般将输出信息写入日志文件&#xff0c;本文通过自定义函数实现将Debug、Warning、Critical、Fatal及Info信息自动输…

品牌全量数据监测分析

线上渠道众多&#xff0c;涉及的产品链接量也是巨大的&#xff0c;多数品牌在做线上数据监测时&#xff0c;是需要对全量数据进行监测分析&#xff0c;比如对某个SKU的全量数据&#xff0c;或者对某个竞品的全量数据进行监测&#xff0c;所以需求确认了&#xff0c;是否有能做到…

windows系统安装指定的vue/cli、node和npm;vue/cli脚手架搭建项目所涉及的vue/cli、node、npm依赖版本等问题

文章目录 前言一、安装vue/cli脚手架1.安装指定版本脚手架&#xff0c;我是用的3.12.0版本2.查看版本是否安装成功&#xff0c;成功有版本号2.1问题&#xff1a;安装失败2.2解决方案2.3 安装成功 二、安装指定node和npm1.为什么需要安装指定node和npm版本&#xff0c;同时匹配v…

【mysql】—— 表的操作

前言&#xff1a; 在上期中&#xff0c;我们把 mysql 中库的基本操作进行了相应的讲解。本期&#xff0c;我将给大家讲解的是关于mysql 中表的基本操作。 目录 &#xff08;一&#xff09;创建表 &#xff08;二&#xff09;查看表结构 1、DESCRIBE 方式 2、SHOW CREATE TA…

Data Structure, Algorithm,and Applications in C++

在学习这本书进阶内容之前&#xff0c;我们可以跟着它的第一章部分再巩固和复习。本书由Sartaj Sahni撰写&#xff0c;由王立柱和刘志红翻译。全书通俗易懂&#xff0c;内容丰富&#xff0c;是巩固C内容的不二选择。希望本文对各位有所帮助。 目录 1.函数与参数 1.1.传值参数…

【备考2023年CISSP认证考试学习手册,信息系统安全在职人员日常参考指南——《CISSP信息系统安全专家认证All-in-One(第9版)》】

《CISSP信息系统安全专家认证All-in-One(第9版)》针对最新发布的CISSP考试做了全面细致的修订和更新&#xff0c;涵盖(ISC)2新开发的2021 CISSP考试大纲的所有目标。这本综合性权威指南编排精当&#xff0c;每章开头列出学习目标&#xff0c;正文中穿插考试提示&#xff0c;章末…

精准测试之分布式调用链底层逻辑

目录 前言&#xff1a; ⼀、分布式调⽤链系统概述 分布式架构所带来的问题 分布式链路监控的作用 ⼆、调用链系统的演进 链路监控系统列表 三、调用链系统的底层实现逻辑 调用链系统的本质 调用链基本元素 事件捕捉 事件串联 事件的开始与结束 上传 四、Span 内容…

抖音账号矩阵系统源码解析和实现技巧。

开发背景 抖音是目前非常火爆的一款短视频社交软件&#xff0c;拥有数亿用户&#xff0c;每天都有大量的视频上传和分享。如何有效地管理和运营这些用户账号成为了各大抖音号主的一个难题。而抖音账号矩阵系统源码解析和实现技巧则成为了越来越多人关注的话题。 首先&#xf…

python用selenium模拟谷歌浏览器点页面

1、cmd安装selenium&#xff0c;输入pip install selenium 2、模拟点击热搜第一条进去&#xff0c;连接如下 https://weibo.com/newlogin?tabtypeweibo&gid102803&openLoginLayer0&urlhttps%3A%2F%2Fweibo.com%2F 3、查看谷歌版本 4、并去下面下载对应版本的web…

分布式光伏电站监控及集中运维管理-安科瑞黄安南

前言&#xff1a;今年以来&#xff0c;在政策利好推动下光伏、风力发电、电化学储能及抽水蓄能等新能源行业发展迅速&#xff0c;装机容量均大幅度增长&#xff0c;新能源发电已经成为新型电力系统重要的组成部分&#xff0c;同时这也导致新型电力系统比传统的电力系统更为复杂…

mac系统占用100多G怎么清除 mac内存系统占用了好多怎么清理

mac电脑运行速度足以傲视其他电脑系统&#xff0c;不易卡顿死机是苹果电脑的优势&#xff0c;但是其偏小的存储空间令人十分头痛。如果你的mac磁盘容量是仅有12GB&#xff0c;在使用一段时间之后&#xff0c;系统内存很有可能就要占用100多G&#xff0c;很快电脑会出现空间不够…

前端学习——ajax (Day2)

案例 - 图书管理 Bootstrap 弹框 modal官方文档 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport"…

小程序分类如何移动顺序

小程序的分类排序功能可以帮助商家根据自己的需求来调整展示在前端页面上的分类顺序&#xff0c;以便更好地呈现商品和提升用户体验。下面将介绍如何在小程序中进行分类移动顺序的操作步骤。 在小程序管理员后台->分类管理&#xff0c;可以看到所有的分类。 向上移动分类&a…

基于Go/Grpc/kubernetes/Istio开发微服务的最佳实践尝试

Jgrpc 本项目为基于 Go/Grpc/kubernetes/Istio 开发微服务的最佳实践提供参考。 并基于 Jenkins/Gitlab/Harbor 实现了CICD。 并使用 grpc-gateway 作为网关代理。 本最佳实践分为三个部分&#xff1a; 创建一个 pingservice 的微服务创建一个 pongservice 的微服务基于Je…

万宾管网水质监测仪 | 守护城市水生态环境

WITBEE万宾 管网水质监测仪EN400-WQ&#xff0c;新一代城市生命线智能监测仪器&#xff0c;可选 COD、氨氮和电导率等7项组合监测指标&#xff0c;4G无线通信适应地下排水管网极端恶劣环境&#xff0c;3年自供电长续航&#xff01;