在sklearn中使用labelEncoder

Neo*_*Neo 8 python machine-learning scikit-learn categorical-data

说我有以下输入功能:

hotel_id = [1, 2, 3, 2, 3]
Run Code Online (Sandbox Code Playgroud)

这是具有数值的分类特征.如果我按原样将它交给模型,模型会将其视为连续变量,即2> 1.

如果我申请,sklearn.labelEncoder()我会得到:

hotel_id = [0, 1, 2, 1, 2] 
Run Code Online (Sandbox Code Playgroud)

那么这个编码特征被认为是连续的还是绝对的?如果它被视为连续,那么使用labelEncoder().

PS我知道一个热门编码.但是大约有100个hotel_ids所以不想使用它.谢谢

Tgs*_*591 13

LabelEncoder是一种编码类级别的方法.除了您包含的整数示例之外,请考虑以下示例:

>>> from sklearn.preprocessing import LabelEncoder
>>> le = LabelEncoder()
>>>
>>> train = ["paris", "paris", "tokyo", "amsterdam"]
>>> test = ["tokyo", "tokyo", "paris"]
>>> le.fit(train).transform(test)
array([2, 2, 1]...)
Run Code Online (Sandbox Code Playgroud)

那么,LabelEncoder允许我们做的是将序数级别分配给分类数据.但是,您所注意到的是正确的:即,将[2, 2, 1]其视为数字数据.这是使用OneHotEncoder虚拟变量的一个很好的候选者(我知道你说你希望不使用它).

请注意,LabelEncoder必须在单热编码之前使用,因为OneHotEncoder无法处理分类数据.因此,它经常用作单热编码的前传.

或者,它可以将目标编码为可用的数组.例如,如果train您的目标是分类,则需要LabelEncoder将其用作y变量.

  • 在 sklearn 最新版本的 OneHotEncoder 中,即使使用分类数据,您也不再需要在运行 OneHotEncoder 之前运行 LabelEncoder 步骤。您现在就可以一步完成此操作,因为 OneHotEncoder 首先会将分类变量转换为数字。 (2认同)