【发布时间】: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