假设我有以下输入功能:
hotel_id = [1, 2, 3, 2, 3]
这是一个带有数值的分类特征。如果我将其按原样提供给模型,模型会将其视为连续变量,即 2 > 1。
如果我应用sklearn.labelEncoder()
,那么我将得到:
hotel_id = [0, 1, 2, 1, 2]
那么这个编码特征被认为是连续的还是分类的? 如果将其视为连续,那么 labelEncoder() 有什么用。
附注我知道一种热门编码。但大约有 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
必须在 one-hot 编码之前使用,因为 OneHotEncoder
无法处理分类数据。因此,它经常被用作 one-hot 编码的前体。
或者,它可以将您的目标编码到可用的数组中。例如,如果 train
是您的分类目标,您将需要一个 LabelEncoder
将其用作 y 变量。
关于python - labelEncoder在sklearn中的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41773751/