为啥 LibSvm 准确率不超过 50%?

Posted

技术标签:

【中文标题】为啥 LibSvm 准确率不超过 50%?【英文标题】:Why LibSvm accuracy not going above 50%?为什么 LibSvm 准确率不超过 50%? 【发布时间】:2014-11-12 08:48:46 【问题描述】:

我有新闻数据,我想在 LibSVM 的帮助下进行情感分析,遵循创建训练文件和测试文件的所有方法。 最初从 100 个正负馈送数据开始,并使用 10 个馈送测试数据进行测试,并获得了 70% 以上的准确度,但是当我增加训练数据的大小,即每个大约 800 个并使用 100 个馈送进行测试时,我的准确度下降到 50.999%。我不知道这背后的原因是什么。

   Training 

java -classpath libsvm.jar svm_train trainexam.train d.model -K 1 -C 512

   Prediction

java -classpath libsvm.jar svm_predict testexam.test d.model out.txt

结果:50.0%

   Training File ( -1 -> Negative , +1 -> Positive)

-1 1:1 2:1 3:1 4:1 5:1 6:1 7:1 8:1 9:1 10:1 11:1 12:1 13:1 14:1 15:1 16:1 17:1 18:1 19:1 20:1 21:1 22:1 17:1 23:1 24:1 17:1 25:1 26:1 27:1 28:1 29:1 30: 1 17:1 31:1 30:1 17:1 32:1 26:1 17:1 6:1 17:1 33:1 26:1 17:1 5:1 6:1 34:1 35:1 36 :1 17:1 37:1 22:1 30:1 38:1 39:1 40:1 41:1 19:1 20:1 42:1 43:1 44:1 45:1 46:1 40:1 47:1 48:1 49:1 27:1 28:1 50:1 17:1 23:1 16:1 51:1 25:1 52:1 53:1 54:1 55:1 17:1 56: 1 57:1 58:1 17:1 59:1 57:1 60:1 10:1 11:1 12:1 61:1 62:1 8:1 30:1 17:1 6:1 30:1 14 :1 59:1 -1 63:1 64:1 65:1 66:1 67:1 30:1 68:1 69:1 70:1 71:1 40:1 72:1 73:1 74:1 75:1 76:1 51:1 77:1 78:1 79:1 80:1 81:1 52:1 82:1 17:1 83:1 26:1 79:1 84:1 85:1 73:1 86:1 87: 1 88:1 89:1 90:1 91:1 30:1 17:1 22:1 92:1 26:1 17:1 93:1 94:1 95:1 96:1 97:1 98:1 90 :1 99:1 100:1 17:1 101:1 77:1 102:1 78:1 17:1 81:1 103:1 104:1 105:1 106:1 107:1 108:1 78:1 109:1 110:1 51:1 111:1 30:1 112:1 113:1 30:1 114:1 115:1 116:1 90:1 117:1 118:1 119:1 120:1 17: 1 121:1 75:1 70:1 122:1 40:1 123:1 124:1 125:1 126:1 17:1 109:1 127:1 128:1 129:1 130:1 131:1 30 :1 51:1 132:1 26:1 87:1 86:1 133:1 134:1 135:1 17:1 81:1 136:1 104:1 137:1 138:1 17:1 90:1 139:1 140:1 141:1 142:1 143:1 17:1 86:1 144:1 145:1 17:1 101:1 77:1 146:1 107:1 147:1 30:1 17: 1 148:1 40:1 149:1 150:1 78:1 151:1 152:1 153:1 154:1 17:1 155:1 70:1 156:1 95:1 92:1 90:1 157 :1 40:1 92:1 94:1 78:1 17:1 113:1 158:1 104:1 40:1 70:1 159:1 16:1 59:1 160:1 161:1 162:1 17:1 121:1 124:1 62:1 71:1 40:1 163:1 164:1 165:1 76:1 119:1 166:1 86:1 57:1 17:1 167:1 26: 1 17:1 168:1 90:1 169:1 26:1 170:1 79:1 171:1 73:1 17:1 101:1 172:1 173:1 174:1 175:1 17:1 121:1 70: 1 176:1 17:1 169:1 167:1 30:1 112:1 177:1 178:1 179:1 180:1 181:1 26:1 17:1 116:1 182:1 63:1 7 :1 183:1 62:1 184:1 185:1 186:1 135:1 17:1 187:1 188:1 189:1 190:1

     +1 17736:1 1218:1 485:1 4:1 79:1 17737:1 259:1 75:1 367:1 135:1 16795:1 14945:1 40:1 4444:1 2580:1 895:1 40:1 75:1 312:1 698:1 5148:1 30:1 533:1 895:1 652:1 310:1 17:1 1588:1 6890:1 73:1 97:1 79:1 1359:1 5227:1 1747:1 17738:1 17739:1 17740:1 75:1 201:1 214:1 17741:1 17742:1 17743:1 129:1 12268:1 533:1 1793:1 17744:1 30:1 17:1 2551:1 113:1 26:1 2678:1 17745:1 17746:1 17747:1 989:1 17:1 171:1 30:1 17:1 1744:1 17

【问题讨论】:

可以共享完整的培训文件 您的数据不是正确的 libSVM 格式。你用过验证工具吗? 没有。你能说出那个工具的名字吗? 查看 libSVM 常见问题解答:Is there a program to check if my data are in the correct format? 【参考方案1】:

libSVM 格式指定属性必须按升序排列。

我猜它计算内核失败是因为输入数据的格式不正确。

【讨论】:

我得到了 68.5% 的准确率,而使用 Weka 我得到了 79.8% 的准确率。 尝试规范化您的数据。 Weka 经常做隐式数据规范化。 缩放了我的数据,但是体验准确率下降到 50.2% 非常糟糕。 您是否对验证数据应用了完全相同的缩放比例(参数;不是方法!最小值和最大值可能不同!)?如您所见,SVM 可以对规范化敏感... 我用上限 1 和下限 -1 调用(使用 libsvm 缩放)

以上是关于为啥 LibSvm 准确率不超过 50%?的主要内容,如果未能解决你的问题,请参考以下文章

为啥准确率是 0%? MATLAB LIBSVM

C 参数不影响准确性 [用于字符串数据的 LibSVM]

使用 libsvm 提高标准化准确性的建议

LibSVM 的准确度下降

为啥我得到的准确提取返回超过请求的行数

libsvm 准确吗?