Scikit learn 理解普通编码器语法
我很难理解Scikit learn 理解普通编码器语法,scikit-learn,Scikit Learn,我很难理解OrdinalEncoder的语法 在文档中,对于我来说,在提供的示例中不太清楚: from sklearn.preprocessing import OrdinalEncoder enc = OrdinalEncoder() X = [['Male', 1], ['Female', 3], ['Female', 2]] enc.fit(X) enc.categories_ [array(['Female', 'Male'], dtype=object), array([1, 2, 3
OrdinalEncoder
的语法
在文档中,对于我来说,在提供的示例中不太清楚:
from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder()
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X)
enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
enc.transform([['Female', 3], ['Male', 1]])
输出:数组([[0,2.],[1,0.]])
我的第一个问题是矩阵X
在这里代表什么?因为代码如下:
from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder(categories = [["Low", "High", "Medium"]])
df[["ScoreText"]] = enc.fit_transform(df[["ScoreText"]])
同样有效,对我来说似乎更容易理解。然而,为什么类别
必须是矩阵
tho
我的第二个问题是,为什么在转换数据帧的一列时需要添加双精度的
[]
?我将尝试逐一回答您的问题
X
代表什么?在我看来,它似乎代表了三个观察值的列表,每个观察值有两个属性,即性别和数字的指示。例如,['Male',1]
是一种观察,而['Female',3]
是另一种观察
类别
作为矩阵?为此,您应该咨询。据指出:
categories[i]
保存第i列中所需的类别
因此,categories
是一个数组类列表,因此可以确定哪些类别用于哪些列,以防变换多个列
[]
?这是由于pandas
的索引和选择规则造成的。实际上,如果您只想选择一列,则在单个[]
中使用单个标签就足够了(例如df[“ScoreText”]
)。但是,pandas
随后将返回一个系列
对象,该对象是一个1d形状数组(n_示例,)
。相反,当选择具有双[]
的单列时,将返回形状为(n_samples,1)
的数据帧
对象。由于兼容性的原因,这种差异很重要,因为许多变压器或编码器都在等待一个类似2d的阵列(而不是系列)。有关索引和选择规则的更多信息,请阅读编辑 在第一个示例中,
OrdinalEncoder
的工作原理如下:fit()
将根据其属性评估提供的矩阵,并确定每个矩阵中的类别。如前所述,X
显然具有上述两个属性。您使用已安装编码器的类别
属性检查了结果。您可以看到编码器找到了两个属性,并列出了相应的类别:
#第一个属性,分类为女性和男性
数组(['Female','Male',dtype=object)
#类别为1、2、3的第二个属性
数组([1,2,3],dtype=object)
OrdinalEncoder
的transform()
方法将每个属性编码为一个整数数组,其中数字为0到n_类别-1。因此:
[‘女性’、‘男性’]-->[0,1]
[1, 2, 3] --> [0, 1, 2]
使用上面的转换规则,您现在可以看到为什么例如
['Female',3]
将被转换为[0,2]
谢谢。你能试着解释一下第一个例子吗?因为我看不到fit
和transform
是如何发生的。编辑了答案。希望它有助于理解。确实如此,现在我看到它“自动”编码传递的值。谢谢