【问题标题】:Libsvm alyways predicting the same classLibsvm 总是预测同一个类
【发布时间】:2014-05-31 15:13:35
【问题描述】:

我正在使用 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% 的准确率,但该模型没有用,因为它总是为每个样本预测相同的类别。我尝试了不同类型的内核和参数,但我仍然得到相同的结果。会是什么呢?数据很难被超平面“划分”吗?

【问题讨论】:

  • 我的数据集有大约 50K 属性和 18 个样本 我认为你需要更多样本来训练模型,你可以尝试分析 50K 维度中是否有任何特征有助于区分你的两个类样本
  • 我尝试应用特征选择但没有任何改变,甚至只对 100 个属性进行了大幅缩减

标签: machine-learning classification svm libsvm


【解决方案1】:

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

【讨论】:

  • 我尝试应用特征选择但没有任何改变,甚至只对 100 个属性进行了大幅缩减
  • 尝试一次使用一项功能进行训练,看看会发生什么
  • 即使只有一个特征...总是预测同一个类(多数类)
  • 特征是否可能没有信号?
【解决方案2】:

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

以下是关于我的申请的一些信息。

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

(2) 我的特征数是 7218,比样本数要大得多。

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

经过反复试验,我发现我的应用中SVM分类失败的主要原因是使用的特征效率低,这导致了SVM分类模型的过拟合,尤其是当有是大量的特征

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-16
    • 2020-10-28
    • 2017-05-20
    • 2018-06-04
    • 2012-12-30
    • 2021-11-08
    • 2020-05-22
    • 2020-06-04
    相关资源
    最近更新 更多