【问题标题】:One hot encoding using sklearn preprocessing Label Binarizer使用 sklearn 预处理标签二值化器的一种热编码
【发布时间】:2019-03-26 14:10:23
【问题描述】:

我正在尝试使用 sklearn.preprocessing.LabelBinarizer() 创建仅包含两列标签的单热编码,即我只想对两组对象进行分类。在这种情况下,当我使用fit(range(0,2)) 时,它只返回一个一维数组,而不是 2x1。这很好,但是当我想在Tensorflow 中使用它们时,为了尺寸一致性,形状实际上应该是 (2,1)。请告诉我如何解决它。

代码如下:

from sklearn import preprocessing
lb = preprocessing.LabelBinarizer()
lb.fit(range(0, 3))

调用lb.transform([1, 0]),结果为:

[[0 1 0]
 [1 0 0]]

而当我们将 3 更改为 2 时,即lb.fit(range(0, 2)),结果将是

[[1]
 [0]]

而不是

[[0 1]
 [1 0]]

这将在与具有n 维度的数组一致的算法中产生问题。有什么办法可以解决这个问题吗?

【问题讨论】:

  • 你能解释一下你调用哪个方法来得到结果吗? lb.fit() 不返回任何内容,
  • 很抱歉没有包含它。这是代码:print(lb.transform([1, 0]))
  • 首先,这不是方法的问题。根据文档:Binary targets transform to a column vector (scikit-learn.org/stable/modules/generated/…) 您可以从列向量结果构建您想要的数组,如果维度为 2。如果不清楚,我会尝试写一个答案。
  • 谢谢,我也不会把它称为方法的问题,但是,对我来说,更好的实现将允许开发人员控制输出类型以使其保持一致。正如您所强调的那样,我必须编写另一个自定义方法以防万一 n=2 例如。

标签: python scikit-learn


【解决方案1】:

labelBinarizer()根据documentation的用途是

以一对多的方式对标签进行二值化

scikit-learn 中提供了多种回归和二元分类算法。 将这些算法扩展到多类分类情况的一种简单方法是使用 > 所谓的 one-vs-all 方案。

如果您的数据只有两种类型的标签,那么您可以直接将其提供给二元分类器。因此,一列足以以 One-Vs-Rest 方式捕获两个类。

二进制目标转换为列向量

>>> lb = preprocessing.LabelBinarizer()
>>> lb.fit_transform(['yes', 'no', 'no', 'yes'])
array([[1],
       [0],
       [0],
       [1]])

如果您的意图只是创建 one-hot 编码,请使用以下方法。

from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit_transform([['yes'], ['no'], ['no'], ['yes']]).toarray()
array([[0., 1.],
      [1., 0.],
      [1., 0.],
      [0., 1.]])

希望这能澄清您关于 Sklearn labelBinarizer() 为何不将 2 类数据转换为两列输出的问题。

【讨论】:

    【解决方案2】:

    正如评论所说,这不是方法的问题。根据documentation:二进制目标转换为列向量。您可以从列向量结果中构建您想要的数组,在维度为 2 的情况下。

    一个直接而简单的方法是:

    from sklearn import preprocessing
    lb = preprocessing.LabelBinarizer()
    lb.fit(range(2)  # range(0, 2) is the same as range(2)
    a = lb.transform([1, 0])
    result_2d = np.array([[item[0], 0 if item[0] else 1] for item in a])
    

    【讨论】:

      猜你喜欢
      • 2017-11-05
      • 2018-05-11
      • 2017-06-04
      • 2018-12-25
      • 2016-10-15
      • 2020-07-02
      • 2023-01-03
      • 2021-07-12
      • 2021-12-18
      相关资源
      最近更新 更多