【机器学习6】数据预处理(三)——处理类别数据(有序数据和标称数据)

简介: 【机器学习6】数据预处理(三)——处理类别数据(有序数据和标称数据)

🌱简要理解处理类别数据的重要性

【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值这一篇文章中,主要说明热数据预处理的重要性以及如何处理缺失值及异常值这些数值特征。然而,在现实生活中遇到的数据集往往不仅仅只会包含数值型特征还会包含一个或者多个类别特征,比如说性别分为男和女,比如说我们之前经常用的数据集——鸢尾花数据集,分为山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)等等等等,学会如何处理类别数据,将此量化,将会对之后进一步的数据分析带来更大的益处。

许多机器学习库都要求将类别标签编码为整数值。尽管Scikit-Learn中大多数分类器或者估计器可以在内部将类别标签转换为整数,但给分类器提供整数数组的形式的类别标签在实践中被认为是一种很好的做法,可以从技术上避免很多问题。

☘️类别数据的分类

当谈到类别数据时,我们首先需要将此区分为有序(ordinal)特征标称(nominal)特征
有序特征可以理解为可以排序的类别值。例如说,颜色,浅蓝->蓝->蓝绿->深蓝,再比如说,不抽烟与抽烟,这些特征都可以定义为有序特征

相比之下,标称特征没有任何意义排序。比如说,性别,男和女,再比如说,颜色蓝色绿色和红色,如果给这些特征排序,是没有意义的,所以一般把性别、颜色等等看作是标称特征

☘️方便研究——用pandas创建包含多种特征的数据集

为了后面更方便的举例说明,我们先用pandas创建一个新的DataFrame数据集,让这个数据集包含标称特征,有序特征和数值特征。

import pandas as pd
df=pd.DataFrame([['green','M','10.1','class2'],['red','L',13.5,'class1'],['blue','XL',15.3,'class2']])
df.columns=['color','size','price','classlabel']
df

新创建的DataFrame包含color这个标称特征,size有序特征,price数值特征,还有类别标签classlabel。

🍀映射有序特征

为了确保机器学习算法可以正确理解有序特征,需要将类别字符串转化为整数。因为没有现成的函数可以到处类别特征标签的正确顺序,所以我们需要自己手动来定义一个映射关系

在上面创建的数据框中,size为有序特征,我们根据生活经验和实际情况,将其合理地映射为数值即可。

比如将M映射为1L映射为2XL映射为3.

我们可以使用pandas中的map方法将原数据框中的size这一列数据进行替换,将此替换为数值类型。

df['size']=df['size'].map({'M':1,'L':2,'XL':3})
df

🍀标称特征标签编码

对于有序特征,可以使用有序特征映射的方法,将类别字符串转化为整数。对于标称特征,它的类别是无序的,因此把某个特定的字符串转化为哪一个数字并不重要。一般简单地从0开始枚举标签。

对于我们创建的数据框,颜色(color)和类别(classlabel)这两列的数据是无序的,因此是标称特征列。我们对这两列分别从0开始枚举类别标签

对于颜色(color)这一列,我们让green映射为0,red映射为1,blue映射为2.对于类别标签(classlabel)这一列,我们将classlabel1映射为1,classlabel2映射为2。
同样地,我们依然采用映射字典将类别标签转换为整数

df['color']=df['color'].map({'green':0,'red':1,'blue':2})
df['classlabel']=df['classlabel'].map({'class1':0,'class2':1})

字典映射是一种简单的映射。因为Scikit-Learn中的分类器将类别标签看作是无法排序的类别数据。所以可以使用LabelEncoder将字符型标签类别转换为整型类别标签。

调用Scikit-Learn中的LabelEncoder类实现上述工作:

from sklearn.preprocessing import LabelEncoder
class_le=LabelEncoder()
y=class_le.fit_transform(df['classlabel'].values)
print(y)

x=class_le.fit_transform(df['color'].values)

可以看到,分类器将blue转换为0,green转换为1,red转换为2。

fit_transform方法相当于先后调用fit方法transform方法。可以使用inverse_transform方法将整数类别标签转换回其他原始字符串表示形式:

class_le.inverse_transfrom(y)

🍀标称特征的独热编码

我们对于有序特征的映射,其数字是有大小意义的。然而,对于离散特征的取值之间没有意义的特征比如颜色,它们本身red、blue、green它们三者本身没有大小比较或者层次上递进的意义,然而我们采用映射的方法,将此映射为0,1,2三个整数,但整数之间又存在大小的比较。那么分类器在处理类别数据时,就会假设red大于green大于blue。为了解决这个问题,一种常见的方法是独热编码(one-hot encoding).

独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有他独立的寄存器位,并且在任意时候,其中只有一位有效。
可以这样理解,对于每一个特征,
如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征,比如,如成绩这个特征有好,中,差变成one-hot就是100, 010,001
再比如说,关于病人对于病人的既往史研究调查,有冠心病、高血压、糖尿病、哮喘、和其他,我们可以利用独热编码,将冠心病编码
为10000,高血压编码为01000,糖尿病编码为00100,哮喘编码为00010,其他编码为00001。将同时患有冠心病和糖尿病的编码为10100,将同时患有高血压和其他疾病的编码为01001…
这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。

这样做的好处主要有:
①解决了分类器不好处理属性数据的问题
②在一定程度上也起到了扩充特征的作用

下面,我们将color特征转换为三个新特征:blue、green和blue。然后使用二进制来表示颜色。例如,可以编码blue=1,green=0,red=0.

为了执行此转换,可以使用Scikit-Learn中的preprocessing模块中的OneHotEncoder方法:

from sklearn.preprocessing import OneHotEncoder
X=df[['color','size','price']].values
color_ohe=OneHotEncoder()
array=color_ohe.fit_transform(X[:,0].reshape(-1,1)).toarray()
print(array)

在上面代码中,仅将OneHotEncoder应用于一个列X[:,0],如果想要有选择地变换数组中的某些列,可以使用ColumnTransformer方法。

from sklearn.compose import ColumnTransformer
X=df[['color','size','price']].values
c_transf=ColumnTransformer([('onehot',OneHotEncoder(),[0]),('nothing','passthrough',[1,2])])
array=c_transf.fit_transform(X).astype(float)
print(array)

🌱独热编码的优缺点

优点:独热编码解决了分类器不好处理属性数据的问题,在一定程度上也起到了扩充特征的作用。它的值只有0和1,不同的类型存储在垂直的空间。

缺点: 当类别的数量很多时,会导致稀疏矩阵问题,特征空间会变得非常大。在这种情况下,一般可以用PCA来减少维度。而且One Hot Encoding+PCA这种组合在实际中也非常有用。

并且在某些应用中,可能并不需要要将所有分类都作为分开的一个特征,此时独热编码可能不是最优选择。

相关文章
|
10天前
|
机器学习/深度学习 数据可视化 搜索推荐
Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。
【7月更文挑战第5天】Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。流程包括数据获取、预处理、探索、模型选择、评估与优化,以及结果可视化。示例展示了用户行为、话题趋势和用户画像分析。Python的丰富生态使得社交媒体洞察变得高效。通过学习和实践,可以提升社交媒体分析能力。
25 1
|
15天前
|
机器学习/深度学习 人工智能 前端开发
人工智能平台PAI产品使用合集之创建了实时特征视图,里面的数据是通过什么传入的
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
1天前
|
机器学习/深度学习 数据采集 存储
在机器学习和数据科学中,数据预处理是一个至关重要的步骤。数据规范化(或称为特征缩放)是预处理的一种常见技术,它可以帮助我们改进模型的性能。`sklearn.preprocessing`模块提供了多种数据规范化的方法,其中`StandardScaler`和`MinMaxScaler`是最常用的两种。
在机器学习和数据科学中,数据预处理是一个至关重要的步骤。数据规范化(或称为特征缩放)是预处理的一种常见技术,它可以帮助我们改进模型的性能。`sklearn.preprocessing`模块提供了多种数据规范化的方法,其中`StandardScaler`和`MinMaxScaler`是最常用的两种。
6 0
|
1天前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
6 0
|
16天前
|
机器学习/深度学习 人工智能 算法
人工智能伦理:机器学习中的数据偏见与公平性挑战
在机器学习领域,算法的公正性与透明度日益成为社会关注的焦点。本文深入探讨了AI系统在处理数据时可能遇到的偏见问题及其对社会公平性的影响。通过分析具体案例和最新研究成果,本文揭示了数据偏见如何影响算法决策,并提出了减轻这些偏见的策略。文章呼吁开发更加负责任的AI系统,以促进技术与社会价值的和谐共存。
|
17天前
|
机器学习/深度学习 分布式计算 监控
在大数据模型训练中,关键步骤包括数据收集与清洗、特征工程、数据划分;准备分布式计算资源
【6月更文挑战第28天】在大数据模型训练中,关键步骤包括数据收集与清洗、特征工程、数据划分;准备分布式计算资源,选择并配置模型如深度学习架构;通过初始化、训练、验证进行模型优化;监控性能并管理资源;最后保存模型并部署为服务。过程中要兼顾数据隐私、安全及法规遵守,利用先进技术提升效率。
30 0
|
18天前
|
机器学习/深度学习 数据采集 监控
探索机器学习中的数据偏见及其影响
在机器学习领域,数据偏见是一个日益受到关注的问题。本文通过分析数据偏见的来源、表现和对模型性能的影响,旨在揭示如何识别和减少这种偏见。文章首先定义了数据偏见并探讨了其产生的原因,接着通过案例分析了偏见对模型决策的具体影响,最后提出了几种减轻数据偏见的策略。研究指出,虽然完全消除数据偏见是极其困难的,但通过合理的数据处理和算法设计可以显著降低其负面影响。
|
24天前
|
机器学习/深度学习 数据挖掘
机器学习之聚类——谱聚类简介及其对特殊形状区域数据的聚类
机器学习之聚类——谱聚类简介及其对特殊形状区域数据的聚类
14 0
|
25天前
|
机器学习/深度学习 人工智能 算法
【机器学习】模型、算法与数据—机器学习三要素
【机器学习】模型、算法与数据—机器学习三要素
125 0
|
25天前
|
机器学习/深度学习 数据采集 人工智能
【机器学习】CLIP模型在有限计算资源下的性能探究:从数据、架构到训练策略
【机器学习】CLIP模型在有限计算资源下的性能探究:从数据、架构到训练策略
174 0