运行 weka 分类器的 C# 代码
Posted
技术标签:
【中文标题】运行 weka 分类器的 C# 代码【英文标题】:C# code to run weka classifier 【发布时间】:2012-04-06 21:36:23 【问题描述】:我正在使用 C# 并包含 IKVM.OpenJDK.Core.dll 并正在使用以下 Java 代码:
public static void cvdTest()
weka.core.Instances data = new weka.core.Instances(new java.io.FileReader("test.arff"));
data.setClassIndex(data.numAttributes() - 1);
weka.classifiers.Classifier cls = new weka.classifiers.bayes.NaiveBayes();
int runs = 1;
int folds = 10;
// perform cross-validation
for (int i = 0; i < runs; i++)
// randomize data
int seed = i + 1;
java.util.Random rand = new java.util.Random(seed);
weka.core.Instances randData = new weka.core.Instances(data);
randData.randomize(rand);
if (randData.classAttribute().isNominal())
randData.stratify(folds);
weka.classifiers.Evaluation eval = new weka.classifiers.Evaluation(randData);
for (int n = 0; n < folds; n++)
weka.core.Instances train = randData.trainCV(folds, n);
weka.core.Instances test = randData.testCV(folds, n);
// build and evaluate classifier
weka.classifiers.Classifier clsCopy = weka.classifiers.Classifier.makeCopy(cls);
clsCopy.buildClassifier(train);
eval.evaluateModel(clsCopy, test);
但我收到以下错误:
“java.io.File”的类型初始化器抛出异常。
上线:
weka.core.Instances data = new weka.core.Instances(new java.io.FileReader("test.arff"));
【问题讨论】:
我已将我的问题编辑为一个相当具体的问题。我现在能得到一些帮助吗?? 不是我的具体专业领域,但你能找出异常是什么(也许通过调试器?) 这是一个 System.TypeInitializationException 【参考方案1】:你可以使用:
weka.core.converters.ConverterUtils.DataSource source =
new weka.core.converters.ConverterUtils.DataSource(filePath);
【讨论】:
【参考方案2】:包括对 IKVM.OpenJDK.XML.Parse.dll 的引用解决了这个问题。
【讨论】:
【参考方案3】:可能,您没有添加所需的 dll。尝试将下一个 dll 添加到 References:IKVM.Runtime.dll 和 IKVM.OpenJDK.Text.dll。 此外,“通常异常会包装原始异常。在这种情况下,InnerException 属性包含有关原始异常的信息。” 所以要找出异常的原因去ViewDetail里面看Inner Exception(它可以嵌套,所以在没有找到的时候往下走)。
【讨论】:
【参考方案4】:在将 weka.jar 添加为对 C# 项目的引用之前,请确保您没有跳过使用 Ikvm 将 weka.jar 转换为 weka.dll 从 Java 转换为 .NET dll 有了这个,您要做的第一件事就是将 Weka .jar 文件转换为 .NET dll。为此,我们将使用 ikvmc,它是 IKVM 静态编译器。 在控制台上,转到包含 weka.jar 的目录,然后键入:
ikvmc -target:library weka.jar
-target:library 调用导致 ikvmc 创建 .dll 库而不是可执行文件。
请注意,IKVM 教程告诉您应该在上述命令中添加 -reference:/usr/lib/IKVM.GNU.Classpath.dll(或适当的路径),它告诉 IKVM 在哪里可以找到 GNU 类路径库。但是,IKVM.GNU.Classpath.dll 不再包含在下载包中,而是来自非常旧的 IKVM 版本。当 Sun 开源 Java 时,它被 IKVM.OpenJDK.*.dll 文件所取代。
您现在应该有一个名为“weka.dll”的文件,它是整个 weka API 的 .NET 版本。这正是您所需要的!
【讨论】:
【参考方案5】:确保引用包含此列表:
【讨论】:
以上是关于运行 weka 分类器的 C# 代码的主要内容,如果未能解决你的问题,请参考以下文章