为什么LIBSVM在Python问我浮动值



我正在python中使用LIBSVM实现SVM分类问题。我有一个numpy数组,由1.0和-1.0组成,称为train_labels,另一个numpy数组中有相应的特征,称为train_data。由于LIBSVM不接受numpy数组,所以我使用下面的代码将它们转换为列表。

train_labels = train_labels.tolist()
train_data = train_data.tolist()

然而,当我把它们放在svm_problem上作为:

prob = svm_problem(train_labels,train_data)

我得到了错误

  File "C:Anacondalibsite-packagessvm.py", line 109, in __init__
  for i, yi in enumerate(y): self.y[i] = yi
TypeError: a float is required

在转换为列表之前,我已经尝试过使用train_labels = train_labels.astype(np.float)将它们转换为浮动,但我仍然得到相同的错误。

使用tolist()方法将numpy数组转换为列表,然后将它们放在LIBSVM命令上,当我在控制台中尝试它们时,它们正在工作。

有人知道为什么我得到这个错误吗?怎么解呢?

伙计们!在我的代码中进行了一些空转之后,我找到了问题所在。

train_labels = train_labels.tolist()行将我的数组转换为子列表中有一个元素的列表的列表。我认为这是因为train_labels是一个n x 1数组开始(它是从csv文件中读取的)。

所以我需要在转换成列表之前先重塑它。

train_labels = train_labels.reshape(N_train).tolist()

我希望在这里对那些将来开始使用LIBSVM的人仍然提出这个问题是可以的。

谢谢!