我正在使用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%的准确度,但该模型没用,因为它总是为每个样本预测相同的类。我尝试了不同类型的内核和参数,但我仍然有相同的结果。会是什么呢?这些数据难以被超平面“划分”吗?
答案 0 :(得分:0)
考虑到特征与类的比例,即使有大量的正则化,您的算法也可能过度拟合您的输入。您是否尝试过使用降维技术(如PCA)并使用少量功能?您还可以尝试某种特征选择算法来获得一小部分特征。
答案 1 :(得分:0)
我在应用程序中遇到了同样的问题,我在c ++项目中使用libsvm进行二进制分类,但是对于所有样本,它总是只预测一个类。
以下是有关我的应用程序的一些信息。
(1)我总共有260个训练样本,并将80%用于训练和交叉验证,并将20%用于测试。
(2)虽然我的功能数量为7218 ,但比示例数量大得多。
(3)对于二进制分类,我的类标签设置为0和1。
经过反复试验,我发现我的应用程序中SVM分类失败主要是由于使用功能的效率低造成的,这使得SVM分类模型过拟合,尤其是当有很多功能。