gpt4 book ai didi

java - Weka 错误消息 - 没有足够的带有类标签的训练实例(需要 : 1, 提供 : 0)!

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

我的 Weka 代码无法运行。
我不知道如何修复该错误。
请给我一些建议
(我使用weka.jar(版本3.6.11))

import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.functions.RBFNetwork;
import weka.clusterers.FarthestFirst;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;


public class WEKATutorial {

public static void main(String[] args) throws Exception {
WEKATutorial wekaTut = new WEKATutorial();
wekaTut.executeWekaTutorial();
}

private void executeWekaTutorial() throws Exception {
FastVector allAttributes = createAttributes();
Instances learningDataset = createLearningDataSet(allAttributes);
Classifier predictiveModel = learnPredictiveModel(learningDataset);
Evaluation evaluation = evaluatePredictiveModel(predictiveModel, learningDataset);

System.out.println(evaluation.toSummaryString());
predictUnknownCases(learningDataset, predictiveModel);
}

private FastVector createAttributes() {
Attribute ageAttribute = new Attribute("age");

FastVector genderAttributeValues = new FastVector(2);
genderAttributeValues.addElement("male");
genderAttributeValues.addElement("female");

Attribute genderAttribute = new Attribute("gender", genderAttributeValues);
Attribute numLoginsAttribute = new Attribute("numLogins");

FastVector allAttributes = new FastVector(3);
allAttributes.addElement(ageAttribute);
allAttributes.addElement(genderAttribute);
allAttributes.addElement(numLoginsAttribute);
return allAttributes;
}


private Instances createLearningDataSet(FastVector allAttributes) {
Instances trainingDataSet = new Instances("wekaTutorial", allAttributes, 4);
trainingDataSet.setClassIndex(2);
addInstance(trainingDataSet, 20., "male", 5);
addInstance(trainingDataSet, 30., "female", 2);
addInstance(trainingDataSet, 40., "male", 3);
addInstance(trainingDataSet, 35., "female", 4);
return trainingDataSet;
}

private void addInstance(Instances trainingDataSet, double age, String gender, int numLogins) {
Instance instance = createInstance(trainingDataSet, age, gender, numLogins);
}

private Instance createInstance(Instances associatedDataSet, double age, String gender, int numLogins) {
Instance instance = new Instance(3);
instance.setDataset(associatedDataSet);
instance.setValue(0, age);
instance.setValue(1, gender);
instance.setValue(2, numLogins);
return instance;
}

private Classifier learnPredictiveModel(Instances learningDataset) throws Exception {
Classifier classifier = getClassifier();
classifier.buildClassifier(learningDataset);
return classifier;
}


private Classifier getClassifier() {
RBFNetwork rbfLearner = new RBFNetwork();
FarthestFirst EM_Learner = new FarthestFirst();
rbfLearner.setNumClusters(2);
return rbfLearner;
}


private Evaluation evaluatePredictiveModel(Classifier classifier, Instances learningDataset) throws Exception {
Evaluation learningSetEvaluation = new Evaluation(learningDataset);
learningSetEvaluation.evaluateModel(classifier, learningDataset);
return learningSetEvaluation;
}


private void predictUnknownCases(Instances learningDataset, Classifier predictiveModel) throws Exception {
Instance testMaleInstance = createInstance(learningDataset, 32., "male", 0);
Instance testFemaleInstance = createInstance(learningDataset, 32., "female", 0);
double malePrediction = predictiveModel.classifyInstance(testMaleInstance);
double femalePrediction = predictiveModel.classifyInstance(testFemaleInstance);

System.out.println("Predicted number of logins [age=32]: ");
System.out.println("\tMale = " + malePrediction);
System.out.println("\tFemale = " + femalePrediction);
}

}


以下是错误信息。

Exception in thread "main" weka.core.WekaException: weka.classifiers.functions.Logistic: Not enough training instances with class labels (required: 1, provided: 0)!
at weka.core.Capabilities.test(Capabilities.java:1138)
at weka.core.Capabilities.test(Capabilities.java:1023)
at weka.core.Capabilities.testWithFail(Capabilities.java:1302)
at weka.classifiers.functions.RBFNetwork.buildClassifier(RBFNetwork.java:153)
at WEKATutorial.learnPredictiveModel(WEKATutorial.java:81)
at WEKATutorial.executeWekaTutorial(WEKATutorial.java:24)
at WEKATutorial.main(WEKATutorial.java:18)

我在网上搜索过,但没有找到解决方案。我很郁闷。 :(

最佳答案

尝试在 createInstance 方法中将新实例添加到关联数据集中:

associatedDataSet.add(instance); 

关于java - Weka 错误消息 - 没有足够的带有类标签的训练实例(需要 : 1, 提供 : 0)!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25451360/

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