Machine learning Weka java库:如何获得分类实例的字符串表示?

Machine learning Weka java库:如何获得分类实例的字符串表示?,machine-learning,data-mining,weka,neural-network,Machine Learning,Data Mining,Weka,Neural Network,目前,我正在进行一个项目,将搜索查询分为以下八种类型:{运动员、演员、艺术家、政治家、地理位置、设施、QA、定义}。在做了一点工作之后,当我使用分层10倍交叉验证对分类器进行评估时,我使用多层感知器分类器对我的300个样本查询集的正确分类实例进行了78%的评分,我认为这是相当好的 使用weka java库,我将整个过程实现为java代码,因此我可以编写一个程序,动态地将查询提供给分类器并检索其查询类型。我成功地实现了整个分类器训练部分。下一步是使用classifyInstance()或distr

目前,我正在进行一个项目,将搜索查询分为以下八种类型:{运动员、演员、艺术家、政治家、地理位置、设施、QA、定义}。在做了一点工作之后,当我使用分层10倍交叉验证对分类器进行评估时,我使用多层感知器分类器对我的300个样本查询集的正确分类实例进行了78%的评分,我认为这是相当好的

使用weka java库,我将整个过程实现为java代码,因此我可以编写一个程序,动态地将查询提供给分类器并检索其查询类型。我成功地实现了整个分类器训练部分。下一步是使用classifyInstance()或distributionForInstance()来确定将查询分类到的类

但是classifyInstance()只返回一个双精度值,我不知道如何从中获取实际的查询类型。告诉我我可以用

unlabeled.classAttribute().value((int) clsLabel);
在调用classifyInstance()以获取类的字符串表示形式之后,在我的例子中,这似乎总是返回空字符串

使用distributionForInstance()我能够成功地检索到一个数组,该数组具有8个介于0和1之间的双精度值(这很好,因为我将其分为8种查询类型)。但是,这个数组的顺序是什么?结果数组中的第一个元素是我的培训文件中出现的第一个类吗?或者此结果数组中是否有其他预定义的元素顺序(例如,按字母顺序)?政府没有提供这方面的任何信息


我希望有人能帮助我

在内部,Weka将所有值处理为双倍值。创建
属性时,将向其传递一个字符串数组,其中列出了可能的标称值。分类返回的double是原始数组中所选属性的索引。因此,如果您有这样的代码:

String[] attributeValues = {"a", "b", "c"};
Attribute a = new Attribute("attributeName", attributeValues);
并且
classifyInstance()
返回
2
,那么它选择的类将是
attributeValues[2]
c

使用
distributionForInstance()
方法,两个数组的索引匹配,因此
AttributeValue[0]
是返回的数组的第一个元素的字符串名

更新(由于否决票)
如果您让weka创建
实例
对象本身(例如,如果您从arff文件读取),则上述方法将不起作用。考虑到您的问题,情况似乎并非如此,但如果是这样,请发布代码,以便我们了解情况。

考虑在WEKA邮件列表中询问WEKA专家可能会在哪里回答您的问题……谢谢,我将尝试WEKA邮件列表类似的问题在这里得到了回答。我当时错过了您答案的更新,但我无意中碰到了这个老问题。请注意,不是我否决了你。我把你的答案标记为正确,因为它是正确的答案:)。