我正在尝试使用fit(range(0,2))
创建仅包含两列标签的单一编码,即我只想对两组对象进行分类。在这种情况下,当我使用Tensorflow
时,它仅返回一维数组,而不是2x1。很好,但是当我想在from sklearn import preprocessing
lb = preprocessing.LabelBinarizer()
lb.fit(range(0, 3))
中使用它们时,形状实际上应该是(2,1)以保持尺寸一致性。请告知我该如何解决。
这是代码:
lb.transform([1, 0])
呼叫[[0 1 0]
[1 0 0]]
,结果是:
lb.fit(range(0, 2))
而当我们将3更改为2,即[[1]
[0]]
时,结果将是
[[0 1]
[1 0]]
代替
n
这将在与C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\
维数组保持一致的算法中产生问题。有什么办法解决这个问题?
答案 0 :(得分:1)
正如已在评论中所述,这不是方法的问题。根据{{3}}:二进制目标转换为列向量。如果维数为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])
答案 1 :(得分:0)
labelBinarizer()
根据documentation的目的是
以一对一的方式对标签进行二分类
scikit-learn中提供了几种回归和二进制分类算法。 将这些算法扩展到多类分类的一种简单方法是使用所谓的“一对多”方案。
如果数据只有两种类型的标签,则可以直接将其提供给二进制分类器。因此,一列足以以“一对多休息”的方式捕获两个类。
二进制目标转换为列向量
>>> lb = preprocessing.LabelBinarizer()
>>> lb.fit_transform(['yes', 'no', 'no', 'yes'])
array([[1],
[0],
[0],
[1]])
如果您的目的只是创建单一编码,请使用以下方法。
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类数据转换为两列输出。