网站首页 > 教程分享 正文
1.介绍
分类变量只接受有限数量的值。
(1)考虑一项调查,询问你吃早餐的频率,并提供四种选择:“从不”、“很少”、“大多数日子”或“每天”。在这种情况下,数据是可分类的,因为相应属于一组固定的类别。
(2)如果人们对一项关于他们拥有哪种品牌汽车的调查做出回答,那么他们的回答就会分为“本田”、“丰田”和“福特”等几类。在这种情况下,数据也是绝对的。
如果你试图将这些变量插入到Python中的大多数机器学习模型中,而不首先对它们进行预处理,则会出现错误。这儿将比较三种用于处理分类数据的方法。
2.三种方法
(1)删除分类变量
处理分类变量最简单的方法就是从数据集中删除它们。只有在列不包含有用信息的情况下,这种方法才能很好地工作。
(2)定序编码(Ordinal Encoding)
将每个唯一值分配给不同的整数。
这种方法假设类别的顺序是:“从不”(0)<“很少”(1)<“大多数天”(2)<“每天”(3)。
这个假设在这个例子中是有意义的,因为分类有一个无可争辩的排名。并非所有分类变量的值都有明确的顺序,但我们将其称为定序变量。对于基于树的模型(如决策树和随机林),定序编码能够很好地处理定序变量。
(3)独热编码(One-Hot Encoding)
独热编码创建新的列,指示原始数据中每个可能值的存在(或不存在)。为了理解这一点,我们将通过一个例子来说明。
在原始数据集中,“Color”是一个分类变量,有三个类别:“Red”、“Yellow”和“Green”。对应的one-hot编码为每个可能的值包含一列。如果原值是“Red”,我们都在“Red”列中加1;如果原始值为“黄色”,则在“黄色”列中输入1,依此类推。
与定序编码不同,独热编码并不假定类别的顺序。因此,如果在分类数据中没有明确的顺序(例如,“Red”既不大于也不小于“Yellow”),这种方法工作得特别好。我们把没有内在排序的分类变量称为名义变量(nominal variables)。
如果分类变量具有大量值,则独热编码通常不能很好地执行(即,通常不会将其用于具有15个以上不同值的变量)。
3.例子
接下来,我们得到训练数据中所有分类变量的列表。
我们通过检查每列的数据类型(或dtype)来实现这一点。object dtype表示一个列有文本(理论上它还有其他的内容,但这对于我们来说并不重要)。对于这个数据集,带有文本的列表示分类变量。
定义函数来衡量每种方法
(1)
(2)
在上面的代码单元中,对于每一列,我们将每个唯一的值随机分配给一个不同的整数。这是一种比提供自定义标签更简单的常用方法;然而,如果我们为所有定序变量提供更好的信息标签,可能性能会额外提升。
(3)我们使用scikit-learn的OneHotEncoder来获得独热编码。有许多参数可用于自定义
- 我们设置handle_unknown='ignore'以避免验证数据包含训练数据中未表示的类时出错
- 设置sparse=False可确保编码列作为numpy数组(而不是稀疏矩阵)返回。
4.总结
哪种方法最好?
在这种情况下,删除分类列(方法1)表现最差,因为它的MAE得分最高。至于其他两种方法,由于返回的MAE分数在价值上非常接近,因此一种方法比另一种方法似乎没有任何有意义的好处。
一般来说,独热编码(方法3)的性能最好,删除分类列(方法1)的性能最差,但具体情况会有所不同。
猜你喜欢
- 2024-10-22 零基础|西门子博途TIA软件入门指南-变量
- 2024-10-22 变量、常量、数据类型、运算符(常量和变量都有数据类型对吗)
- 2024-10-22 Python | 变量如何定义,数据类型介绍
- 2024-10-22 你知道Python的变量类型有多少中吗? #Python变量类型
- 2024-10-22 Furein平台-智能合约根底言语(五)——变量类型
- 2024-10-22 数据的基本类型和变量(基本类型)(基本数据类型举例)
- 2024-10-22 Python(第三课 1 - 2)变量类型和数据类型
- 2024-10-22 JAVA变量类型(java变量类型检测)
- 2024-10-22 Python常用变量类型的知识汇总(python常见的变量)
- 2024-10-22 5分钟搞定数据类型和变量的关系(变量与数据类型之间的关系)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)