Libsvm alyways预测同一个班级

时间:2014-04-16 16:07:43

标签: machine-learning classification svm libsvm

我正在使用Libsvm来解决二进制分类问题。我的数据集有~50K属性和18个样本。我正在使用一次性验证(对17个样品进行培训并对剩余样品进行测试)。我正在使用以下方法对数据进行规范化:

svm-scale -s scaling_parameters Train$i > TrainScaled$i
svm-scale -r scaling_parameters Test$i > TestScaled$i

培训和预测完成如下:

svm-train -s 0 -c 5 -t 2 -g 0.5 -e 0.1 TrainScaled$i model
svm-predict TestScaled$i model predicted.out

模型总是预测同一个类(多数一个)。所以我获得了75%的准确度,但该模型没用,因为它总是为每个样本预测相同的类。我尝试了不同类型的内核和参数,但我仍然有相同的结果。会是什么呢?这些数据难以被超平面“划分”吗?

2 个答案:

答案 0 :(得分:0)

考虑到特征与类的比例,即使有大量的正则化,您的算法也可能过度拟合您的输入。您是否尝试过使用降维技术(如PCA)并使用少量功能?您还可以尝试某种特征选择算法来获得一小部分特征。

答案 1 :(得分:0)

我在应用程序中遇到了同样的问题,我在c ++项目中使用libsvm进行二进制分类,但是对于所有样本,它总是只预测一个类。

以下是有关我的应用程序的一些信息。

(1)我总共有260个训练样本,并将80%用于训练和交叉验证,并将20%用于测试。

(2)虽然我的功能数量为7218 ,但比示例数量大得多。

(3)对于二进制分类,我的类标签设置为0和1。

经过反复试验,我发现我的应用程序中SVM分类失败主要是由于使用功能的效率低造成的,这使得SVM分类模型过拟合,尤其是当有很多功能