gpt4 book ai didi

java - 使用 WEKA 评估样本的类别

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:38 31 4
gpt4 key购买 nike

我使用 SMO 算法在 Weka 中创建了一个模型。我正在尝试使用上述模型评估测试样本,以将其分类到我的二分类问题中。我对如何使用 Weka Smo 代码评估样本有点困惑。我建立了一个空的 arff 文件,其中只包含文件的元数据。我计算样本特征并将 vector 添加到 arff 文件中。我创建了以下函数 Evaluate 以评估样本。文件 template.arff 是包含 arff 文件和 models/smo 我的模型的元数据的模板。

 public static void Evaluate(ArrayList<Float> temp) throws Exception {

temp.add(Float.parseFloat("1"));
System.out.println(temp.size());
double dt[] = new double[temp.size()];
for (int index = 0; index < temp.size(); index++) {
dt[index] = temp.get(index);
}

double data[][] = new double[1][];
data[0] = dt;
weka.classifiers.Classifier c = loadModel(new File("models/"), "/smo"); // loads smo model

File tmp = new File("template.arff"); //loads data template
Instances dataset = new weka.core.converters.ConverterUtils.DataSource(tmp.getAbsolutePath()).getDataSet();
int numInstances = data.length;

for (int inst = 0; inst < numInstances; inst++) {
dataset.add(new Instance(1.0, data[inst]));
}
dataset.setClassIndex(dataset.numAttributes() - 1);
Evaluation eval = new Evaluation(dataset);
//returned evaluated index
double a = eval.evaluateModelOnceAndRecordPrediction(c, dataset.instance(0));
double arr[] = c.distributionForInstance(dataset.instance(0));


System.out.println(" Confidence Scores");
for (int idx = 0; idx < arr.length; idx++) {
System.out.print(arr[idx] + " ");
}
System.out.println();
}

我不确定我是否就在这里。我创建示例文件。之后我正在加载我的模型。如果我的代码是我评估样本温度类别所需要的,我在徘徊。如果这段代码没问题,我如何提取置信度分数而不是关于类(class)的二元决策? template.arff文件结构为:

@relation Dataset
@attribute Attribute0 numeric
@attribute Attribute1 numeric
@attribute Attribute2 numeric
...
@ATTRIBUTE class {1, 2}

@data

另外loadModel函数如下:

public static SMO loadModel(File path, String name) throws Exception {

SMO classifier;

FileInputStream fis = new FileInputStream(path + name + ".model");
ObjectInputStream ois = new ObjectInputStream(fis);

classifier = (SMO) ois.readObject();
ois.close();

return classifier;
}

我找到了这篇文章 here这建议找到 SMO.java 文件并将以下行 smo.buildClassifier(train, cl1, cl2, true, -1, -1);//从 false 更改为 true。然而,当我这样做时,我似乎得到了相同的二进制输出。

我的训练函数:

   public void weka_train(File input, String[] options) throws Exception {   

long start = System.nanoTime();
File tmp = new File("data.arff");
TwitterTrendSetters obj = new TwitterTrendSetters();
Instances data = new weka.core.converters.ConverterUtils.DataSource(
tmp.getAbsolutePath()).getDataSet();
data.setClassIndex(data.numAttributes() - 1);
Classifier c = null;
String ctype = null;
boolean newmodel = false;

ctype = "SMO";
c = new SMO();

for (int i = 0; i < options.length; i++) {
System.out.print(options[i]);

}

c.setOptions(options);
c.buildClassifier(data);
newmodel = true;

if (newmodel) {
obj.saveModel(c, ctype, new File("models"));
}
}

最佳答案

我有一些建议,但我不知道它们是否有效。让我知道这是否适合您。

首先使用SMO不只是父对象Classifier类。我创建了一个新方法 loadModelSMO 作为示例。

SMO Class

public static SMO loadModelSMO(File path, String name) throws Exception {

SMO classifier;

FileInputStream fis = new FileInputStream(path + name + ".model");
ObjectInputStream ois = new ObjectInputStream(fis);

classifier = (SMO) ois.readObject();
ois.close();

return classifier;
}

然后

SMO c = loadModelSMO(new File("models/"), "/smo");
...

我从标题为标题的邮件列表主题中找到了一篇可能对您有所帮助的文章 I used SMO with logistic regression but I always get a confidence of 1.0

建议设置-M适合你的物流模型,可以通过方法使用

setOptions(java.lang.String[] options)

也许您还需要将构建物流模型设置为 true Confidence score in SMO

c.setBuildLogisticModels(true); 

让我知道这是否有帮助。

关于java - 使用 WEKA 评估样本的类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27777392/

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