转载自:https://blog.csdn.net/sinat_29957455/article/details/79452141

在处理真实的数据集的时候,我们经常会遇见一个或多个的类别数据的特征。类别数据可以被分为标称特征(nominal feature)和有序特征(ordinal feature)。有序特征指的是类别的值是有序的或者是可以排序的,例如,衣服的尺码S、M、X、XL、XXL...就是属于有序特征。再例如,衣服的颜色,黑色、蓝色、白色、黄色...这些就属于标称特征。

一、有序特征的映射

我们可以将有序特征装换成为整数,整数包含一定的顺序。没有一个合适的方法可以自动将尺寸特征转换成为正确的顺序,所以我们需要手动来指定相应的映射关系。例如,S:1,M:2,X:3,我们可以利用pandas的map方法来实现。

import pandas as pd​if __name__ == "__main__":\#定义衣服尺寸的映射关系size_mapping = {"S":1,"M":2,"X":3,"XL":4}\#定义一个DataFrame数据data = pd.DataFrame([["green","S",100],["blue", "M", 110],["red", "X", 120],["black", "XL", 130]])\#设置列名data.columns = ["color","size","price"]\#对size列的类别数据进行映射data["size"] = data["size"].map(size_mapping)print(data)

二、类标的编码

许多的机器学习算法都要求将类标换成整数值来进行处理。对于类标进行编码与之前对于有序特征的映射有所不同,类标并不要求是有序的,对于特定的字符串类标赋予哪个整数值给它对于我们来说并不重要,所以在对于类标进行编码的时候我们可以使用枚举的方式从0开始设定类标。

import pandas as pdimport numpy as np​if __name__ == "__main__":\# 定义一个DataFrame数据data = pd.DataFrame([["green", "S", 100,"label1"],["blue", "M", 110,"label2"],["red", "X", 120,"label3"],["black", "XL", 130,"label4"]])\# 设置列名data.columns = ["color", "size", "price","label"]\#通过枚举获取类标与整数之间的映射关系label_mapping = {label:idx for idx,label in enumerate(np.unique(data["label"]))}print(label_mapping)\#对label列进行映射data["label"] = data["label"].map(label_mapping)print(data)

通过下面的方法可以将整数类标还原为字符串

inv_label_mapping = {v:k for k,v in label_mapping.items()}data["label"] = data["label"].map(inv_label_mapping)print(data)

还可以通过sklearn的LabelEncoder类来实现类标的编码

import pandas as pdimport numpy as npfrom sklearn.preprocessing import LabelEncoder​if __name__ == "__main__":\# 定义一个DataFrame数据data = pd.DataFrame([["green", "S", 100,"label1"],["blue", "M", 110,"label2"],["red", "X", 120,"label3"],["black", "XL", 130,"label4"]])\# 设置列名data.columns = ["color", "size", "price","label"]class_label = LabelEncoder()data["label"] = class_label.fit_transform(data["label"].values)print(data)​​

通过sklearn的inverse_transform方法可以将整数类标还原为原始的字符串

data["label"] = class_label.inverse_transform(data["label"])print(data)

三、标称特征上的独热编码(one-hot encoding)

我们对上面衣服的颜色特征进行编码,将颜色映射为{"green":0,"blue":1,"red":2,"black":3}。看起来这样映射好像没什么问题,真的没有问题吗?实则不然,我们这样映射实际上给颜色强加了一个大小关系,即black>red>blue>green,实际上颜色是不存在这种关系的,很显然结果肯定也不是最优的。这时,我们可以通过独热编码(one-hot encoding)来解决这一类问题。独热编码是通过创建一个新的虚拟特征,虚拟特征的每一列各代表标称数据的一个值。例如,颜色一共有四个取值green、blue、red、black,独热编码是通过四位二进制来表示,如果是green就表示为[1,0,0,0],对应的颜色是[green,blue,red,black],如果属于哪一种颜色,则取值为1,否则为0。

使用sklearn的OneHotEncoder实现OneHot编码

import pandas as pdimport numpy as npfrom sklearn.preprocessing import LabelEncoderfrom sklearn.preprocessing import OneHotEncoder​if __name__ == "__main__":\# 定义一个DataFrame数据data = pd.DataFrame([["green", "S", 100, "label1"],["blue", "M", 110, "label2"],["red", "X", 120, "label3"],["black", "XL", 130, "label4"]])\# 设置列名data.columns = ["color", "size", "price", "label"]X = data[["color", "price"]].values\#通过类标编码将颜色装换成为整数color_label = LabelEncoder()X[:,0] = color_label.fit_transform(X[:,0])\#设置颜色列使用oneHot编码one_hot = OneHotEncoder(categorical_features=[0])print(one_hot.fit_transform(X).toarray())

注意:在使用OneHotEncoder进行OneHot编码的时候,需要先将字符串转换成为整数之后才能进行OneHot编码,不然会报错。

使用pandas来实现oneHot编码

import pandas as pdimport numpy as npfrom sklearn.preprocessing import LabelEncoderfrom sklearn.preprocessing import OneHotEncoder​if __name__ == "__main__":\# 定义一个DataFrame数据data = pd.DataFrame([["green", "S", 100, "label1"],["blue", "M", 110, "label2"],["red", "X", 120, "label3"],["black", "XL", 130, "label4"]])\# 设置列名data.columns = ["color", "size", "price", "label"]X = data[["color", "price"]].values\#pandas的get_dummies方法只对字符串列进行转换,其他的列保持不变print(pd.get_dummies(data[["color","price"]]))

转载于:https://www.cnblogs.com/xitingxie/p/11312045.html

使用sklearn来处理类别数据相关推荐

  1. sklearn 中的preprocessing数据预处理

    1. sklearn preprocessing Standardization即标准化,尽量将数据转化为均值为零,方差为一的数据,形如标准正态分布(高斯分布).实际中我们会忽略数据的分布情况,仅仅是 ...

  2. 数据预处理之将类别数据数字化的方法 —— LabelEncoder VS OneHotEncoder

    LabelEncoder 和 OneHotEncoder 是什么 在数据处理过程中,我们有时需要对不连续的数字或者文本进行数字化处理. 在使用 Python 进行数据处理时,用 encoder 来转化 ...

  3. matplotlib tricks(一)—— 多类别数据的 scatter(cmap)

    cmap 的选择: binary seismic Reds 多类别数据的 scatter(逐点散列),在 matplotlib 中的实现关键在于,color关键字的定义: def plot_scatt ...

  4. 40-网上商城数据库-商品类别数据操作(一)

    40-网上商城数据库-商品类别数据操作(一) 项目描述 在电子商务兴起的大环境下,建立利用互联网开拓销售渠道,帮助企业及时调整商品结构,协助经销商打开货源的信息门户成为解决信息流通不畅的有效方案,电子 ...

  5. 7- vue django restful framework 打造生鲜超市 -商品类别数据展示(上)

    Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 商品列表页 并没有将列表页的数据json 与前端的页面展示结合起来 讲解如果将dr ...

  6. 【Python】使用sklearn PCA对人脸数据降维

    [python]sklearn PCA对人脸数据降维与识别 1. PCA 1.1 PCA原理 1.2 sklearn PCA使用方法 2. 人脸数据降维 2.1 读取图片 2.2 使用PCA进行降维 ...

  7. 用python+sklearn(机器学习)实现天气预报数据 数据

    用python+sklearn机器学习实现天气预报 数据 项目地址 系列教程 勘误表 0.前言 1.爬虫 a.确认要被爬取的网页网址 b.爬虫部分 c.网页内容匹配取出部分 d.写入csv文件格式化 ...

  8. 用python+sklearn(机器学习)实现天气预报数据 模型和使用

    用python+sklearn机器学习实现天气预报 模型和使用 项目地址 系列教程 0.前言 1.建立模型 a.准备 引入所需要的头文件 选择模型 选择评估方法 获取数据集 b.建立模型 c.获取模型 ...

  9. sklearn中常用的数据预处理方法

    常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardization or Mean Removal and Variance Scali ...

最新文章

  1. 九、linux设备节点注册
  2. PHP中文简繁互转代码 完美支持大陆、香港、台湾及新加坡
  3. 使用Spark构建简单的RESTful API
  4. Ubuntu 进入单用户模式—修改启动项利器
  5. Windows系统下,Android Studio的安装
  6. 在java中对于构造函数_在Java语言中,下面有关于构造函数的描述正确的是()。
  7. C语言判断两个数组是否有相同元素
  8. 自用迷你版的Deferred
  9. 直接拿来用!盘点四款优秀的开源协作文本编辑器
  10. linux --- TCPdump 工具
  11. Python(入门小练习1)
  12. Java学习之Thread之【Monitor】与【wait】与【notify】与【sleep】_加【Callable】【Executor】【ExecutorService】【Future】
  13. activiti 设置候选人_中标 | 河南移动公示无源波分复用设备集采中标候选人名单:3家厂商上榜...
  14. wps带阴影的边框怎么设置_win10系统设置wps阴影边框的具体办法
  15. JRE和JDK的区别
  16. MySQL5.7官网参考手册路径
  17. 关键词查找器,关键词搜索查询挖掘
  18. TomExam开源在线考试系统
  19. 一个比较有趣的题:推算今天星期几
  20. 商务与经济统计阅读笔记3

热门文章

  1. C语言是始祖,科技日历| 61年前,ALGOL语言创立!它是C语言等高级语言的直接“鼻祖”...
  2. c语言程序检测进程pid,C语言实现由PID获取进程名由进程名获取PID
  3. 用sqlyog怎么设置mysql自动备份,利用sqlyog配置MySQL自动备份sql文件
  4. spring cloud整合OpenFeign
  5. selenium更改页面元素
  6. python 调用mysql_Python中直接在MySQL执行SQL命令
  7. python 画在同一坐标轴_Python学习第95课-多个数据在同一个坐标轴画图叠加
  8. 无法显示服务器级别,URL Rewrite会导致“无法显示此页面”
  9. linux 重启_四步见证linux系统重启过程,小心操作,防止后悔!
  10. mysql scrapy 重复数据_mysql数据库如何处理重复数据?