目前,我正在开展一个项目,将搜索查询分为以下八种类型:{运动员、演员、艺术家、政治家、地理、设施、质量保证、定义}。经过一些工作后,当我使用分层 10 倍交叉验证评估分类器时,我使用多层感知器分类器为我的 300 个样本查询集正确分类了 78% 的实例,我认为这相当不错。
使用 weka java 库,我将整个事情实现到 java 代码中,因此我可以编写一个程序,将查询动态地提供给分类器并检索它的查询类型。我成功地实现了整个分类器训练部分。下一步是使用classifyInstance() 或distributionForInstance() 来确定查询被分类到的类。
但是,classifyInstance() 只返回一个我不知道从中获取实际查询类型的双精度值。weka wikispaces告诉我我可以使用
unlabeled.classAttribute().value((int) clsLabel);
在调用classifyInstance() 以获取类的字符串表示之后,在我的情况下,这似乎总是返回空字符串。
使用 distributionForInstance() 我能够成功地检索一个具有 0 和 1 之间的八个双精度值的数组(这很好,因为我将其分类为八种查询类型)。但是,这个数组的顺序是什么?结果数组中的第一个元素是我的训练文件中出现的第一个类吗?或者这个结果数组中是否有其他一些预定义的元素顺序(例如按字母顺序)?weka 文档没有提供任何相关信息。
我希望有人能帮助我!