gpt4 book ai didi

machine-learning - 在 Weka 中对单实例进行分类

转载 作者:行者123 更新时间:2023-11-30 08:24:34 24 4
gpt4 key购买 nike

我使用 WEKA gui 训练并创建了 J48 模型。我将模型文件保存到我的计算机上,现在我想用它对我的 Java 代码中的单个实例进行分类。我想获得对属性“簇”的预测。我所做的事情如下:

public void classify(double lat, double lon, double co)
{

// Create attributes to be used with classifiers
Attribute latitude = new Attribute("latitude");
Attribute longitude = new Attribute("longitude");
Attribute carbonmonoxide = new Attribute("co");

// Create instances for each pollutant with attribute values latitude, longitude and pollutant itself
inst_co = new DenseInstance(4);

// Set instance's values for the attributes "latitude", "longitude", and "pollutant concentration"
inst_co.setValue(latitude, lat);
inst_co.setValue(longitude, lon);
inst_co.setValue(carbonmonoxide, co);
inst_co.setMissing(cluster);


Classifier cls_co = (Classifier) weka.core.SerializationHelper.read("/CO_J48Model.model");//load classifier from file

// Test the model
double result = cls_co.classifyInstance(inst_co);
}

但是,我在 inst_co.setValue(latitude, lat); 行上收到 IndexArrayOutofBoundsException。我找不到这个异常的原因。如果有人能指出我正确的方向,我将不胜感激。

最佳答案

您需要将 inst_co 添加到数据集(一个 Instances 对象)中。以下代码应该可以工作。

import java.util.ArrayList;

import weka.classifiers.Classifier;
import weka.core.Attribute;
import weka.core.DenseInstance;
import weka.core.Instance;
import weka.core.Instances;

public class QuestionInstanceClassifiy {

public static void main(String[] args) {
QuestionInstanceClassifiy q = new QuestionInstanceClassifiy();
double result = q.classify(1.0d, 1, 1);
System.out.println(result);
}

private Instance inst_co;

public double classify(double lat, double lon, double co) {

// Create attributes to be used with classifiers
// Test the model
double result = -1;
try {

ArrayList<Attribute> attributeList = new ArrayList<Attribute>(2);

Attribute latitude = new Attribute("latitude");
Attribute longitude = new Attribute("longitude");
Attribute carbonmonoxide = new Attribute("co");

ArrayList<String> classVal = new ArrayList<String>();
classVal.add("ClassA");
classVal.add("ClassB");


attributeList.add(latitude);
attributeList.add(longitude);
attributeList.add(carbonmonoxide);
attributeList.add(new Attribute("@@class@@",classVal));

Instances data = new Instances("TestInstances",attributeList,0);


// Create instances for each pollutant with attribute values latitude,
// longitude and pollutant itself
inst_co = new DenseInstance(data.numAttributes());
data.add(inst_co);

// Set instance's values for the attributes "latitude", "longitude", and
// "pollutant concentration"
inst_co.setValue(latitude, lat);
inst_co.setValue(longitude, lon);
inst_co.setValue(carbonmonoxide, co);
// inst_co.setMissing(cluster);

// load classifier from file
Classifier cls_co = (Classifier) weka.core.SerializationHelper
.read("/CO_J48Model.model");

result = cls_co.classifyInstance(inst_co);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}

您从实例创建数据对象。将您的实例添加到此数据中。之后,您可以在实例中设置您的值。

Instances data = new Instances("TestInstances",attributeList,0);
inst_co = new DenseInstance(data.numAttributes());
data.add(inst_co);

我建议从外部文件获取 header 信息和实例值或仅创建此信息一次。

关于machine-learning - 在 Weka 中对单实例进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13029118/

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