我在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
请,有人可以帮助我吗?
答案 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