说我有以下输入功能:
hotel_id = [1, 2, 3, 2, 3]
这是具有数值的分类特征.如果我按原样将它交给模型,模型会将其视为连续变量,即2> 1.
如果我申请,sklearn.labelEncoder()
我会得到:
hotel_id = [0, 1, 2, 1, 2]
那么这个编码特征被认为是连续的还是绝对的?如果它被视为连续,那么使用labelEncoder().
PS我知道一个热门编码.但是大约有100个hotel_ids所以不想使用它.谢谢
这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]...)
那么,LabelEncoder
允许我们做的是将序数级别分配给分类数据.但是,您所注意到的是正确的:即,将[2, 2, 1]
其视为数字数据.这是使用OneHotEncoder
虚拟变量的一个很好的候选者(我知道你说你希望不使用它).
请注意,LabelEncoder
必须在单热编码之前使用,因为OneHotEncoder
无法处理分类数据.因此,它经常用作单热编码的前传.
或者,它可以将目标编码为可用的数组.例如,如果train
您的目标是分类,则需要LabelEncoder
将其用作y变量.