我想用weka进行文本分类。我有一列火车和一个测试文件(波斯语)。首先我加载火车文件,然后在预处理中选择“字符串到单词向量”。而且由于选择了这个,班级职位就开始了。为了将类移动到它的索引(在文件中是2),我可以选择“编辑”部分并右键单击类列,然后选择“属性作为类”或仅在分类菜单中选择(NOM)类。 (除非大多数算法将不活动)。我运行SMO并保存模型。问题是,在打开测试文件后,点击“在当前测试集上重新评估模型”,就会发生这样的错误:“... class index different:1!= 2”。我知道这是因为在打开测试文件后,班级专栏再次开始。对于列车部分,我解决了上述问题。但是我怎样才能解决它的测试部分呢?weka中的类索引不同错误
0
A
回答
0
首先,我根据列车文件中最常用的1000个单词将文件更改为矢量,并为列车和测试文件创建了一个数字化的arff文件,然后在“classify “菜单中的”测试选项“我选择了”(Nom)“类别。
1
你用它来评估一个训练有素的模型之前,您应该使用您的测试集相同的转换(S)。使用GUI时,可以使用浏览器中的预处理器视图,手动应用相同的转换,并将该组保存到新的arff文件中。当你想要进行一系列的实验时,我建议你写一个能为你做出改变的例程。
这看起来有点像这样:
import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.Remove;
import weka.filters.unsupervised.attribute.Reorder;
import weka.filters.unsupervised.attribute.NumericToNominal;
import java.io.File;
public class DataConverter
{
public static void Convert(String sourcepath,String destpath) throws Exception
{
CSVLoader loader = new CSVLoader();
loader.setSource(new File(sourcepath));
Instances data = loader.getDataSet();
Remove remove = new Remove();
remove.setOptions(weka.core.Utils.splitOptions("-R 1"));
remove.setInputFormat(data);
data = Filter.useFilter(data, remove);
Reorder reorder = new Reorder();
reorder.setOptions(weka.core.Utils.splitOptions("-R first-29,31-last,30"));
reorder.setInputFormat(data);
data = Filter.useFilter(data, reorder);
NumericToNominal ntn = new NumericToNominal();
ntn.setOptions(weka.core.Utils.splitOptions("-R first,last"));
ntn.setInputFormat(data);
data = Filter.useFilter(data, ntn);
// save ARFF
ArffSaver saver = new ArffSaver();
saver.setInstances(data);
saver.setFile(new File(destpath));
//saver.setDestination(new File(destpath));
saver.writeBatch();
}
public static void main(String args[]) throws Exception
{
File folder = new File("..\\..\\data\\output\\learning\\csv\\");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
String target = listOfFiles[i].getName();
target = target.substring(0, target.lastIndexOf("."));
System.out.println("converting file " + (i + 1) + "/" + listOfFiles.length);
Convert("..\\..\\data\\output\\learning\\csv\\" + listOfFiles[i].getName(), "..\\..\\data\\output\\learning\\arff\\" + target + ".arff");
}
}
}
}
另外:重新排序过滤器可以帮助你把你的目标类在文件的结尾。它将旧索引的新顺序作为参数。在这种情况下,您可以应用Reorder -R 2-last,1
相关问题
- 1. 什么是WEKA中的类别索引?
- 2. Weka的NaiveBayes分类给予不同的(错误?)指/上数值
- 3. RavenDB索引错误“找不到索引”
- 4. RapidMiner和WEKA:不同的聚类结果
- 5. Python:类型索引错误的例外?
- 6. Typescript索引签名的不同类型
- 7. 不同类型的MongoDB索引
- 8. 不同类型的数据库索引?
- 9. 错误同步上下文索引
- 10. Weka中的序列化错误3.8.x
- 11. python-weka Wrapper中的运行时错误
- 12. ElasticSearch创建索引类型错误
- 13. 如何解决“不能索引`usize`类型的值的错误?
- 14. 身份不明的索引错误
- 15. 不明确的索引错误python
- 16. 在Weka中使用LibSVM编程的java类路径错误
- 17. 如何识别在weka中错误分类的确切实例
- 18. 在weka中识别错误分类的元组
- 19. RavenDB索引错误
- 20. Sitecore索引错误
- 21. Neo4j索引错误?
- 22. 错误的解析网址 - index.htm/index而不是索引/索引
- 23. 错误Magento不能重新索引索引类别/产品协会
- 24. Weka错误提前结束
- 25. 奇怪的索引错误
- 26. 给出错误的索引
- 27. 被索引的javascript错误
- 28. Matlab的索引错误
- 29. 区分System.Data.SqlClient.SqlException引发的不同错误
- 30. 如何在发生错误时引发不同类型的错误?
@S van Balen,我不知道java。有没有什么办法可以解决weka本身的问题,而不是编写任何代码?谢谢 – sara
Absolutely !基本上你只需从GUI执行stringToWordVector过滤器,将结果保存到testset.arff(或其他),然后对你的训练集执行相同的练习,然后你可以在GUI中加载你的训练集,并配置任何分类器使用保存的测试集进行评估。 –