对python 数据处理中的LabelEncoder 和 OneHotEncoder详解

对Python数据处理中的LabelEncoder和OneHotEncoder详解

在Python中进行数据处理时,经常需要对文本类型的变量进行编码处理,以便于算法模型能够识别。其中,LabelEncoder和OneHotEncoder是两种常用的编码方式。下面详细讲解这两种编码方式的使用方法和区别。

1. LabelEncoder

LabelEncoder属于序号编码,即将类别型变量的不同取值赋以序号标签,将文本转换为数字,使得算法模型能够进行计算。我们可以使用sklearn中的LabelEncoder函数进行编码。下面是LabelEncoder函数的使用方法:

# 导入模块
from sklearn.preprocessing import LabelEncoder

# 创建LabelEncoder对象
le = LabelEncoder()

# 对文本类型数据进行编码
le.fit_transform(["男", "女", "女", "男"])

输出结果:

array([1, 0, 0, 1])

可以看到,LabelEncoder将"男"编码为1,"女"编码为0,对于相同的文本值进行编码后得到相同的数字。

2. OneHotEncoder

OneHotEncoder又称为独热编码,是一种将分类变量用于数值计算的编码方式。首先将每个分类变量的取值转换为一个二元变量,然后将每个二元变量赋予一个0或1的值,表示该变量是否存在。我们可以使用sklearn中的OneHotEncoder函数进行编码。下面是OneHotEncoder函数的使用方法:

# 导入模块
from sklearn.preprocessing import OneHotEncoder

# 创建OneHotEncoder对象
ohe = OneHotEncoder(sparse=False)

# 对文本类型数据进行编码(需要先进行LabelEncoder)
le = LabelEncoder()
gender = le.fit_transform(["男", "女", "女", "男"])
ohe.fit_transform(gender.reshape(-1, 1))

输出结果:

array([[0., 1.],
       [1., 0.],
       [1., 0.],
       [0., 1.]])

可以看到,OneHotEncoder将"男"编码为[0, 1],"女"编码为[1, 0],对于相同的文本值进行编码后得到不同的数字组合。这样,我们就可以将经过OneHotEncoder编码处理后的数据作为算法模型的输入。

3. 示例说明

下面通过示例说明LabelEncoder和OneHotEncoder的应用。

示例1:LabelEncoder

假设我们要对一个鸢尾花数据集中的类别列Species进行LabelEncoder编码,以便于使用算法模型对其进行训练。

# 导入模块和数据集
from sklearn.datasets import load_iris
from sklearn.preprocessing import LabelEncoder

# 加载iris数据集
iris = load_iris()

# 打印数据集前5条数据
print(iris.data[:5])
print(iris.target[:5])

# 创建LabelEncoder对象
le = LabelEncoder()
# 对Species列进行编码
iris_target_encoded = le.fit_transform(iris.target)

# 查看编码结果
print(iris_target_encoded[:5])

输出结果:

[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
 [4.6 3.1 1.5 0.2]
 [5.  3.6 1.4 0.2]]
[0 0 0 0 0]
[0 0 0 0 0]

可以看到,我们使用LabelEncoder将鸢尾花数据集中的类别列进行了编码处理。

示例2:OneHotEncoder

假设我们要对一个蘑菇数据集中的类别列cap-shape进行OneHotEncoder编码,以便于使用算法模型对其进行训练。

# 导入模块和数据集
import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder

# 加载mushrooms数据集
df = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/agaricus-lepiota.data", header=None)

# 打印数据集前5条数据
print(df.head())

# 对第5列进行LabelEncoder编码
le = LabelEncoder()
df[5] = le.fit_transform(df[5])

# 对第5列进行OneHotEncoder编码
ohe = OneHotEncoder(sparse=False)
df_ohe = ohe.fit_transform(df[5].values.reshape(-1, 1))

# 查看编码结果
print(df_ohe[:5])

输出结果:

   0  1  2  3  4  5  6  7  8  9   ... 13 14 15 16 17 18 19 20 21 22
0  p  x  s  n  t  p  f  c  n  k  ...  s  w  w  p  w  o  p  k  s  u
1  e  x  s  y  t  a  f  c  b  k  ...  s  w  w  p  w  o  p  n  n  g
2  e  b  s  w  t  l  f  c  b  n  ...  s  w  w  p  w  o  p  n  n  m
3  p  x  y  w  t  p  f  c  n  n  ...  s  w  w  p  w  o  p  k  s  u
4  e  x  s  g  f  n  f  w  b  k  ...  s  w  w  p  w  o  e  n  a  g

[5 rows x 23 columns]
[[0. 1. 0. 0. 0. 0. 0.]]

可以看到,我们使用OneHotEncoder对蘑菇数据集中的cap-shape列进行了编码处理,得到了包含7个数字的编码结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对python 数据处理中的LabelEncoder 和 OneHotEncoder详解 - Python技术站

(1)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 浅谈pandas关于查看库或依赖库版本的API原理

    要想查看pandas库或其它Python库的版本,可以使用pandas库中提供的__version__属性或者pd.show_versions()方法。 对于使用属性__version__的方式,可以直接通过以下代码查看pandas的版本号: import pandas as pd print(pd.__version__) # 输出pandas库的版本号 …

    云计算 2023年5月18日
    00
  • python分析inkscape路径数据方案简单介绍

    Python分析Inkscape路径数据方案简单介绍 什么是Inkscape路径数据? 在Inkscape中,路径是由节点和线段组成的,其中节点用于确定路径方向和曲率,线段用于连接节点并绘制路径。路径数据是描述路径的元素、属性和值的集合。 路径数据通常使用SVG(Scalable Vector Graphics)语法进行描述,SVG是一种可缩放的矢量图形语言…

    云计算 2023年5月18日
    00
  • [云计算小课] 【第二课】云小课带你了解镜像家族!

    本次课程希望能够帮助您深入理解华为云镜像服务,包括私有镜像与公共镜像之间的区别,探讨当前华为云镜像服务的各种功能。   简单的说,镜像就好像是克隆体,它可以把一个已有的云主机操作系统和应用服务,快速的复制到您的云主机中,省时又省力。     温馨小提示: 还没有华为云账户来体验本节课程的操作吗? 戳这里,免费注册华为云账户! 有账户没有云服务器? 戳这里,免…

    云计算 2023年4月12日
    00
  • Python爬取新型冠状病毒“谣言”新闻进行数据分析

    下面我将详细讲解Python爬取新型冠状病毒“谣言”新闻的完整攻略。 1. 确定数据源和数据爬取 首先需要确定数据来源,可以选择从新闻网站、微博、微信公众号等渠道进行爬取。以新闻网站为例,我们可以爬取包含“谣言”、“假消息”等关键词的新闻,并获取相关的文本内容和发布时间等信息。 在Python中,我们可以选择使用Scrapy、Beautiful Soup等工…

    云计算 2023年5月18日
    00
  • 新计算 新网络 新旗舰:华为云C6实例首测

    弹性云服务器(ECS)是云计算最基础的服务之一,其性能和稳定性直接决定云计算的用户体验。每当有重大的计算或网络硬件更新,云服务器就会升级换代,将性能推向新的高度。显然,尽快将新的硬件技术应用于云服务器,是云服务商的核心竞争力之一。 4月3日上午,英特尔在太平洋两岸近乎同步的发布了代号Cascade Lake的第二代至强可扩展处理器。中午12点,基于Casca…

    2023年4月9日
    00
  • 基于ASP.NET Core数据保护生成验证token示例

    下面我将详细讲解基于ASP.NET Core数据保护生成验证token的完整攻略,包括过程中的两条示例说明。 首先,我们需要了解什么是数据保护。数据保护是ASP.NET Core框架用于在不同位置存储和使用安全数据的API,它提供了一种可靠的方法来加密和保护敏感数据,并使其在应用程序中的多个请求及持久性存储之间传递。具体来说,数据保护API提供了对大量常见的…

    云计算 2023年5月17日
    00
  • 面对云计算“圈地运动” 中小云服务商如何破局

    面对云计算“圈地运动” 中小云服务商如何破局 随着云计算市场的不断发展和竞争加剧,大型云服务提供商(如Amazon Web Services、Microsoft Azure和Google Cloud Platform等)正在通过“圈地运动”来占领市场份额。这对于中小云服务商来说是一个巨大的挑战,因为他们往往缺乏资金和技术实力来与大型云服务提供商竞争。以下是中…

    云计算 2023年5月16日
    00
  • python socket多线程通讯实例分析(聊天室)

    让我们来详细讲解“python socket多线程通讯实例分析(聊天室)”的完整攻略。 一、背景介绍 在网络编程中,socket是一个非常重要的模块,可以通过socket实现不同设备之间的通信,如:客户端和服务器之间的通信。本文将通过Python socket实现多线程通讯,构建类似聊天室的功能。同时,本文还会对socket相关的概念进行一定的介绍,方便理解…

    云计算 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部