【问题标题】:Any relation between svm_train data's order and result?svm_train 数据的顺序和结果之间有什么关系吗?
【发布时间】:2013-04-26 21:22:00
【问题描述】:

我正在使用 libSVMPython

我感觉到了这个问题。

在使用无序索引训练数据时,我得到了意想不到的结果。

例如,一些未分类的文章的操作集结果都是一样的,例如:

[1, 1, 1, 1, 1, ..., 1]

这是训练数据的一部分。

4 133:1 25806:1 85:1 107:1 25806:1 12337:1 136:1 16943:1 15259:1 34:1 2019:1 173:1 1070:1 71:1 357:1 5518 :1 178:1 179:1 5:1 12337:1 120:1 39912:1 120:1 2019:1 173:1 1070:1 71:1 357:1 5518:1 178:1 179:1 5:1 12337:1 6409:1 87:1 189:1 6410:1 133:1 25806:1 85:1 107:1 25806:1 12337:1 136:1 16943:1 15259:1 34:1 2019:1 173: 1 1070:1 71:1 357:1 5518:1 178:1 179:1 5:1 12337:1 120:1 39912:1 1771:1 9:1 10:1 11:1 43188:1 27:1 6707 :1 173:1 15:1 883:1 29:1 67:1 698:1 58:1 25806:1 5462:1 5511:1 34:1 16943:1 15259:1 224:1 128:1 167:1 312:1 1062:1 4140:1 184:1 71:1 357:1 193:1 907:1 167:1 698:1 564:1 11:1 1149:1 34:1 30261:1 10899:1 217: 1 860:1 58:1 276:1 5:1 6088:1 398:1 177:1 178:1 179:1 5:1 25806:1 29:1 181:1 84:1 12337:1 84:1 58 :1 665:1 357:1 897:1 650:1 178:1 4:1 5:1 1195:1 29:1 80:1 17:1 186:1 10:1 11:1 7495:1 167:1 22073:1 5:1 230:1 29:1 179:1 51:1 1874:1 167:1 22073:1 5:1 230:1 17:1 179:1 80:1 867:1 15:1 324: 1 185:1 350:1 2914:1 5:1 84:1 39912:1

根据以上数据,可以理解索引是无序的。

我认为这是问题所在。这种情况还有其他原因吗?

PS。 train meta(y) 已分发:

1 1:1 2:1 3:1 4:1 5:1 2: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 11:1 1:1 2:1 23:1 24:1 25:1 26: 1 27:1 28:1 29:1 30:1 31:1 32:1 8:1 15:1 33:1 17:1 21:1 22:1 34:1 35:1 17:1 36:1 10 :1 11:1 37:1 33:1 38:1 39:1 40:1 41:1 42:1 43:1 44:1 45:1 46:1 47:1 32:1 48:1 49:1 50:1 15:1 16:1 45:1 51:1 52:1
2 309:1 310:1 217:1 968:1 4092:1 5:1 13544:1 32:1 13545:1 13546:1 13544:1 1064:1 13547:1 7287:1 2225:1 13548:1 2819:1 71:1 1269:1 132:1 13549:1 419:1 4698:1 87: 1 6013:1 27:1 294:1 9:1 10:1 11:1 324:1 58:1 309:1 310:1 62:1 5459:1 350:1 1460:1 15:1 6026:1 5 :1 13544:1 1949:1 185:1 186:1 10:1 32:1 439:1 139:1
..
..

谢谢!

【问题讨论】:

  • 为什么你的训练集行的第一个元素是 2 或 4?你有多个班级吗?第一个数字是类别标签,在二进制分类中它应该是 0 或 1(或 -1 或 1)
  • 是的。我有各种各样的课。你的想法是对的。

标签: python svm libsvm


【解决方案1】:

理论上,如果特征元素没有被排序,只要它们被正确标记,理论上应该没有问题,但是必须通过 libsvm 代码来确定这种行为(文档中没有禁止这种行为)。

不过,在您的情况下,问题可能出在类别标签上。在二元分类中,训练数据应具有以下形式:

0 1:xx 4:xx 3:xx ...
0 1:xx 2:xx 9:xx ...
1 1:xx 5:xx 13:xx ...
1 2:xx 3:xx 6:xx ...

第一个数字是类标签。您需要为每个类设置或多或少相等数量的特征集才能获得最佳结果。

【讨论】:

  • 谢谢。如果我有多个班级,我该怎么办?我正在制作Documents Classifier。文档有各种类别,如经济、政治等。所以我必须定义这是类别的一部分。
  • 如果您有多个类别,您可以将负数据标记为 0,将其他类别标记为 1、2、3 等。如果您没有负面数据并且所有内容都必须属于一个类,那么您可以使用任何您想要的数字。 libsvm 对多类方法使用 1 对 1 分类,所以这并不重要。 libsvm 多类测试的结果总是一个类标签,它是所有 1-to-1 分类的赢家。请注意:如果您有 60,000 维的特征向量,则“每类”需要成千上万的训练数据才能从 SVM 训练中获得任何好处。
  • 啊哈。您对文件 A 或 B 的多类是什么意思? A 是一个 Document 有多个类。 B 是文档具有尽可能多的类域,但预期结果只有一个。我认为多类类似于B。在A 中,标签可以是 (3,4,5,..,n)。而在B 中,标签只能是 (3,4,5,...,n) 的一个值。你是什​​么意思?谢谢。
  • libsvm 中的多类 SVM 意味着每个项目都有一个类(标签)。它类似于您的“B”案例。如果您遇到文档可以有多个标签(例如经济和政治)的情况,那么您必须进行多个二进制分类,其中每个“具有该属性的文档的特征”(标签 = 1)与“文档的特征”进行比较没有那个属性”(label = 0),不管他们是否有其他属性。然后可以组合所有分类的结果以形成单个文档的多个标签。
  • 天啊。非常感谢!我想做B型。你的建议对我很有帮助。我会继续研究更多。
猜你喜欢
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 2013-10-30
  • 2015-01-02
相关资源
最近更新 更多