我有一个数据集,负标记值的数量是正标记值数量的163倍,所以我有一个不平衡的数据集。我试过了:
model = svmtrain(trainLabels, trainFeatures, '-h 0 -b 1 -s 0 -c 10 -w1 163 -w-1 1');
[predicted_label, accuracy, prob_estimates] = svmpredict(testLabels, testFeatures, model, '-b 1');
并且准确率接近99%,我搜索并发现:http://agbs.kyb.tuebingen.mpg.de/km/bb/showthread.php?tid=376&page=1在第7个帖子后说
你是否尝试过较小规模的加权(即:< 1)
我改为:
model = svmtrain(trainLabels, trainFeatures, '-h 0 -b 1 -s 0 -c 10 -w1 0.5 -w-1 0.003');
[predicted_label, accuracy, prob_estimates] = svmpredict(testLabels, testFeatures, model, '-b 1');
由于数据不平衡,我每次都保持高精度。有什么想法吗?
PS:我正在尝试实施2008年KDD杯的首次挑战 - 乳腺癌。 我想按降序排列候选人。
答案 0 :(得分:0)
可能是由于这个原因,你的消极和积极的例子很难分开。 我将通过对大多数类进行下采样并使用所有少数类示例来准备不同的数据集,然后在所有数据集上学习svm。然后使用投票。这对我有用