【问题标题】:Why is LIBSVM in Python asking me for floating values?为什么 Python 中的 LIBSVM 要求我输入浮点值?
【发布时间】:2017-03-19 08:55:42
【问题描述】:

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

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

但是,当我将它们放在 svm_problem 上时:

prob = svm_problem(train_labels,train_data)

然后我收到错误

  File "C:\Anaconda\lib\site-packages\svm.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 命令上是有效的。

有人知道我为什么会收到这个错误吗?我该如何解决?

【问题讨论】:

  • 顺便说一下,我使用的是 LIBSVM 3.21

标签: python numpy svm libsvm


【解决方案1】:

伙计们!在我的代码中闲置了一些之后,我发现了问题所在。

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

所以我需要先重塑它,然后再转换为列表。它有效。

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

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

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2023-03-17
    • 2021-05-30
    • 1970-01-01
    • 2018-01-24
    • 2016-04-04
    • 2013-10-24
    相关资源
    最近更新 更多