gpt4 book ai didi

java - 使用预制模型文件预测在 WEKA 中即时创建的数据

转载 作者:行者123 更新时间:2023-11-30 09:15:04 25 4
gpt4 key购买 nike

我想创建一个 WEKA Java 程序来读取一组新创建的数据,这些数据将被从 GUI 版本提供给预制模型。

程序如下:

import java.util.ArrayList;
import weka.classifiers.Classifier;
import weka.core.Attribute;
import weka.core.DenseInstance;
import weka.core.Instances;
import weka.core.Utils;


public class UseModelWithData {

public static void main(String[] args) throws Exception {
// load model
String rootPath = "G:/";
Classifier classifier = (Classifier) weka.core.SerializationHelper.read(rootPath+"j48.model");

// create instances
Attribute attr1 = new Attribute("age");
Attribute attr2 = new Attribute("menopause");
Attribute attr3 = new Attribute("tumor-size");
Attribute attr4 = new Attribute("inv-nodes");
Attribute attr5 = new Attribute("node-caps");
Attribute attr6 = new Attribute("deg-malig");
Attribute attr7 = new Attribute("breast");
Attribute attr8 = new Attribute("breast-quad");
Attribute attr9 = new Attribute("irradiat");
Attribute attr10 = new Attribute("Class");

ArrayList<Attribute> attributes = new ArrayList<Attribute>();
attributes.add(attr1);
attributes.add(attr2);
attributes.add(attr3);
attributes.add(attr4);
attributes.add(attr5);
attributes.add(attr6);
attributes.add(attr7);
attributes.add(attr8);
attributes.add(attr9);
attributes.add(attr10);

// predict instance class values
Instances testing = new Instances("Test dataset", attributes, 0);

// add data
double[] values = new double[testing.numAttributes()];
values[0] = testing.attribute(0).addStringValue("60-69");
values[1] = testing.attribute(1).addStringValue("ge40");
values[2] = testing.attribute(2).addStringValue("10-14");
values[3] = testing.attribute(3).addStringValue("15-17");
values[4] = testing.attribute(4).addStringValue("yes");
values[5] = testing.attribute(5).addStringValue("2");
values[6] = testing.attribute(6).addStringValue("right");
values[7] = testing.attribute(7).addStringValue("right_up");
values[8] = testing.attribute(0).addStringValue("yes");
values[9] = Utils.missingValue();

// add data to instance
testing.add(new DenseInstance(1.0, values));
// instance row to predict
int index = 10;
// perform prediction
double myValue = classifier.classifyInstance(testing.instance(10));
// get the name of class value
String prediction = testing.classAttribute().value((int) myValue);

System.out.println("The predicted value of the instance ["
+ Integer.toString(index) + "]: " + prediction);

}

}

我的引用资料包括:

到目前为止,我在脚本中创建新的 Instance 的部分导致了以下错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 1

在行中

double myValue = classifier.classifyInstance(testing.instance(10));

我只想将最新一行的实例值用于预制 WEKA 模型。我该如何解决这个问题?


资源

最佳答案

您出现错误是因为您正在尝试访问第 11 个实例并且只创建了一个。

如果您总是想访问最后一个实例,您可以尝试以下操作:

double myValue = classifier.classifyInstance(testing.lastInstance());  

此外,我不相信您正在创建您希望的实例。在查看了您提供的“.arff”文件(我相信您正在尝试模仿)之后,我认为您应该按如下方式继续制作实例:

FastVector      atts;
FastVector attAge;

Instances testing;
double[] vals;

// 1. set up attributes
atts = new FastVector();

//age
attAge = new FastVector();
attAge.addElement("10-19");
attAge.addElement("20-29");
attAge.addElement("30-39");
attAge.addElement("40-49");
attAge.addElement("50-59");
attAge.addElement("60-69");
attAge.addElement("70-79");
attAge.addElement("80-89");
attAge.addElement("90-99");
atts.addElement(new Attribute("age", attAge));

// 2. create Instances object
testing = new Instances("breast-cancer", atts, 0);

// 3. fill with data
vals = new double[testing.numAttributes()];
vals[0] = attAge.indexOf("10-19");
testing.add(new DenseInstance(1.0, vals));

// 4. output data
System.out.println(testing);

当然我没有创建整个数据集,但技术是一样的。

关于java - 使用预制模型文件预测在 WEKA 中即时创建的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20096574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com