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
    是如何发生的。编辑了答案。希望它有助于理解。确实如此,现在我看到它“自动”编码传递的值。谢谢