我对代码行”Instances originalTrain=”的参数感到困惑。作为Weka的新手,我希望有人能帮助我纠正这个错误。我们正在使用Java和Weka创建一个疾病预测系统。
import weka.classifiers.Classifier;import weka.core.Instances;public class Main { public static void main(String[] args) throws Exception { String rootPath="/some/where/"; Instances originalTrain= //在这里添加实例(不知道如何完成这个语句) //加载模型 Classifier cls = (Classifier) weka.core.SerializationHelper.read(rootPath+"tree.model"); //预测实例类值 Instances originalTrain= //加载或创建要预测的Instances(这个语句也是) //要预测哪个实例的类值 int s1=0; //执行预测 double value=cls.classifyInstance(originalTrain.instance(s1)); //获取预测百分比或分布 double[] percentage=cls.distributionForInstance(originalTrain.instance(s1)); //获取类值的名称 String prediction=originalTrain.classAttribute().value((int)value); System.out.println("实例的预测值 "+ Integer.toString(s1)+ ": "+prediction); //格式化分布 String distribution=""; for(int i=0; i <percentage.length; i=i+1) { if(i==value) { distribution=distribution+"*"+Double.toString(percentage[i])+","; } else { distribution=distribution+Double.toString(percentage[i])+","; } } distribution=distribution.substring(0, distribution.length()-1); System.out.println("分布:"+ distribution); }}
回答:
为了完整起见,问题中的代码片段来源于使用自己的Java代码和模型在Weka中获取预测百分比。
originalTrain应该是你的训练实例。我知道有两种方法可以向originalTrain添加实例。
-
这种方法从.arff文件加载数据,基于这里的说明。
// rootPath应该是.arff文件所在的位置// filename应该包含.arff文件的完整名称public static Instances instanceData(String rootPath, String filename) throws Exception{ // 初始化源 DataSource source = null; Instances data = null; source = new DataSource(rootPath + filename); data = source.getDataSet();
// 将类设置为数据的最后一个属性(可能需要调整) if (data.classIndex() == -1) data.setClassIndex(data.numAttributes() -1 ); return data;} -
你可以按照这个回答中描述的方式手动创建和添加实例使用Weka API定义聚类输入数据。