使用IKVM.net和WEKA.net运行Weka分类器的C#代码

时间:2019-07-17 08:03:55

标签: c# .net visual-studio-2017 ikvm

我在C#(Visual Studio 2017)中使用相同的代码,并且在项目中包含IKVM.OpenJDK。*。dll(最新版​​本)和weka.dll

private void button1_Click(object sender, EventArgs e)
        {
            class_test(); 
        }

const int percentSplit = 60;
        public void class_test()
        {
            string resualt = "";

            try
            {

                 weka.core.Instances insts = new weka.core.Instances(new java.io.FileReader("iris.arff"));



                insts.setClassIndex(insts.numAttributes() - 1); 

                weka.classifiers.Classifier cl = new weka.classifiers.trees.J48();    // choose type of classifer algorithms 

                int trainSize = insts.numInstances() * percentSplit / 100;
                int testSize = insts.numInstances() - trainSize;
                weka.core.Instances train = new weka.core.Instances(insts, 0, trainSize);

                cl.buildClassifier(train);
                int numCorrect = 0;
                for (int i = trainSize; i < insts.numInstances(); i++)
                {
                    weka.core.Instance currentInst = insts.instance(i);
                    double predictedClass = cl.classifyInstance(currentInst);
                    if (predictedClass == insts.instance(i).classValue())
                        numCorrect++;
                }

                System.Console.WriteLine(numCorrect + " out of " + testSize + " correct (" +
                    (double)((double)numCorrect / (double)testSize * 100.0) + "%)");
            }
            catch (java.lang.Exception ex)
            {
                ex.printStackTrace();
            }
        }

但是我遇到以下错误:

第一:

  

类型Reader是在未引用的程序集中定义的。您   必须添加参考程序集'vislib,Version = 1.0.5000.0,   文化中性公钥令牌-b0315f7f11d50a3a选择

在线:

weka.core.Instances insts = new weka.core.Instances(new java.io.FileReader("iris.arff"));

new weka.core.Instances

秒:

  

参数1:无法从“ java.io.FileReader”转换为   'weka.core.instances

在同一行上:

weka.core.Instances insts = new weka.core.Instances(new java.io.FileReader("iris.arff"));

(new java.io.FileReader("iris.arff"));

为解决第二个错误,我尝试为另一个旧版本添加Ikvm.GUN.classpath.dll作为参考,但我遇到以下错误:

  

FileReader类型在'IKVM.GNU.Classpath,Version =中都存在   0.12.0.0,Culture = neutral,PublicKey令牌13235d27fcbfff58和'IKVM.Open/DK.Core Version = 7.2.4630.5,Culture = neutral,PublicKey   令牌:13235d271cbfff58

请,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

检查.dll生成命令执行后的输出警告信息,如果你看到类似这样的东西,即:

警告 IKVMC0108:不是类文件“weka/core/Instances.class”,包括它作为资源(类格式错误“52.0”)

那么 IKVM Java 版本与 weka.jar 构建版本不一致

您可以在此处下载 Java 8 版本的 IKVM:http://www.frijters.net/ikvmbin-8.1.5717.0.zip