【问题标题】:ml-py svm converges but classifying wronglyml-py svm 收敛但分类错误
【发布时间】:2012-01-07 06:22:27
【问题描述】:

我正在尝试用 python 和 SVM 做一些分类任务。

从收集的数据中,我提取了每个类的特征向量并创建了一个训练集。特征向量具有 n 维(39 或更多)。因此,假设对于 2 个类,我有一组 39 维特征向量和一个类标签数组,对应于特征向量中的每个条目。目前,我正在使用 mlpy 并执行以下操作:

import numpy as np
import mlpy 

svm=mlpy.Svm('gaussian') #tried a linear kernel too but not having the convergence
instance= np.vstack((featurevector1,featurevector1))
label=np.hstack((np.ones((1,len(featurevector1),dtype=int),-1*np.ones((1,len(featurevector2),dtype=int))) 

#为实例中的每个条目分配一个标签(+1/-1),(+1 表示来自 #featurevector 1 和 -1 用于 featurevector2

svm.compute(instance,label) #it converges and outputs 1
svm.predict(testdata) #This one says all class label are 1 only whereas I ve testing data from both classes

我在这里做错了吗?还是我应该使用其他库?请帮忙。

【问题讨论】:

  • mlpy 是很棒的工具。如果您有时间,请在 ml-class.org 上观看 SVM 讲座。首先你可以标准化你的特征,然后你应该找出精度和召回指标来衡量方差/偏差,这有助于做出下一个决定,比如改变参数 C 或 sigma。或者收集更多数据,或者清理现有数据。
  • 谢谢@timgluz 我一直在关注 ml-class.org 对于这个特殊的问题,我想使用一个分类器,它可以像黑盒子一样工作,并在训练后预测测试数据的类标签关于训练数据。我的输入数据集是一组转换为 39 维特征的音乐信号,没有收集更多的空间。

标签: python machine-learning classification svm libsvm


【解决方案1】:

我不使用 mlpy,但 np.ones((1,len(featurevector1)) 应该只是 np.ones(len(featurevector1)) --
打印每个的.shape 以查看差异。
(如果您有与您类似的公共数据的链接,您可以发布它吗?)

【讨论】:

  • 知道了,我只需要一个行向量。我修改了相同的内容并尝试过,但没有成功。在 python 上尝试了 libsvm,令人惊讶的是它解决了上述问题并给了我正确的结果。
猜你喜欢
  • 1970-01-01
  • 2017-03-20
  • 2017-11-24
  • 2016-08-12
  • 2018-05-15
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多