【问题标题】:sklearn LDA unique labels issuesklearn LDA 唯一标签问题
【发布时间】:2015-08-25 18:28:26
【问题描述】:

我有一个我曾经运行过的代码,它使用 sklearn.lda 模块中的 LDA(线性判别分析)类。现在它给出了下面的错误。最近我更新了 sklearn 包,我认为它可能是由这个引起的。但是,我仍然无法理解问题所在。你能告诉我把 1 和 -1 作为标签有什么问题吗?据我了解,问题与我的标签有关。

Traceback (most recent call last):

  File "<ipython-input-94-9935ca0189ad>", line 1, in <module>
    lda.fit([atom.coords for atom in nm_1.atoms], nm_1.correlations[1][0])

  File "C:\Anaconda\lib\site-packages\sklearn\lda.py", line 415, in fit
    self.classes_ = unique_labels(y)

  File "C:\Anaconda\lib\site-packages\sklearn\utils\multiclass.py", line 106, in unique_labels
    raise ValueError("Unknown label type: %r" % ys)

ValueError: Unknown label type: array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
       -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.])

【问题讨论】:

  • 你传递的是数组数组还是数组列表作为y?
  • 是的,它是一个数组,我想我解决了这个问题。我认为浮动类型可能有问题。我把它变成了一个整数数组,现在它似乎运行良好。我写了lda.fit(atom_coords, correlations.astype(int)),我再也没有收到错误了。

标签: python machine-learning scikit-learn


【解决方案1】:

问题不在于 1/-1 标​​签,因为 sklearn.lda 可以很好地处理偶数字符串标签:

>>>import numpy as np
>>>from sklearn.lda import LDA
>>>X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>>y = np.array([1, 1, 1, "y","y","y"])
>>>clf = LDA()
>>>clf.fit(X, y)
>>>(clf.predict([[-0.8, -1],[3,2]]))
['1' 'y']

您可能对标签对象本身有疑问 - 您确定它是一个数组吗?

【讨论】:

  • @zamk 如果您发现问题,请更新\回答您自己的帖子
猜你喜欢
  • 2017-03-24
  • 2016-06-17
  • 2021-12-06
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2013-04-11
相关资源
最近更新 更多