![](/img/trans.png)
[英]Classifying Single Instance in Weka (MultilayerPerceptron)
[英]Classifying Single Instance in Weka using Java
我使用WEKA gui训练并创建了Nativebases。 我将模型文件保存到计算机上,现在我想用它来对Java代码中的单个实例进行分类。 我想对“集群”属性进行预测。 我要做的是以下几点:
package level_4_project_weka;
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 wekaClass2 {
private Instance inst_co;
String classify(
float area_of_disease1,
float length_of_disease1,
int s_area_count1,
float sd_disease_r1,
float sd_disease_g1,
float sd_disease_b1,
float sd_background_r1,
float sd_background_g1,
float sd_background_b1,
int m_disease_r1,
int m_disease_g1,
int m_disease_b1,
int m_background_r1,
int m_background_g1,
int m_background_b1,
String fluid_filled_blisters1,
String feel_itchy1) {
String result = null;
try {
ArrayList<Attribute> attributeList = new ArrayList<>(17);
Attribute area_of_disease = new Attribute("area_of_disease");
Attribute length_of_disease = new Attribute("length_of_disease");
Attribute s_area_count = new Attribute("s_area_count");
Attribute sd_disease_r = new Attribute("sd_disease_r");
Attribute sd_disease_g = new Attribute("sd_disease_g");
Attribute sd_disease_b = new Attribute("sd_disease_b");
Attribute sd_background_r = new Attribute("sd_background_r");
Attribute sd_background_g = new Attribute("sd_background_g");
Attribute sd_background_b = new Attribute("sd_background_b");
Attribute m_disease_r = new Attribute("m_disease_r");
Attribute m_disease_g = new Attribute("m_disease_g");
Attribute m_disease_b = new Attribute("m_disease_b");
Attribute m_background_r = new Attribute("m_background_r");
Attribute m_background_g = new Attribute("m_background_g");
Attribute m_background_b = new Attribute("m_background_b");
Attribute fluid_filled_blisters = new Attribute("fluid_filled_blisters");
Attribute feel_itchy = new Attribute("feel_itchy");
ArrayList<String> classVal = new ArrayList<>();
classVal.add("melanoma");
classVal.add("eczema");
classVal.add("impetigo");
//classVal.add("ClassB");
attributeList.add(area_of_disease);
attributeList.add(length_of_disease);
attributeList.add(s_area_count);
attributeList.add(sd_disease_r);
attributeList.add(sd_disease_g);
attributeList.add(sd_disease_b);
attributeList.add(sd_background_r);
attributeList.add(sd_background_g);
attributeList.add(sd_background_b);
attributeList.add(m_disease_r);
attributeList.add(m_disease_g);
attributeList.add(m_disease_b);
attributeList.add(m_background_r);
attributeList.add(m_background_g);
attributeList.add(m_background_b);
attributeList.add(fluid_filled_blisters);
attributeList.add(feel_itchy);
attributeList.add(new Attribute("@@type@@",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(area_of_disease,area_of_disease1);
inst_co.setValue(length_of_disease,length_of_disease1);
inst_co.setValue(s_area_count,s_area_count1);
inst_co.setValue(sd_disease_r,sd_disease_r1);
inst_co.setValue(sd_disease_g,sd_disease_g1);
inst_co.setValue(sd_disease_b,sd_disease_b1);
inst_co.setValue(sd_background_r,sd_background_r1);
inst_co.setValue(sd_background_g,sd_background_g1);
inst_co.setValue(sd_background_b,sd_background_b1);
inst_co.setValue(m_disease_r,m_disease_r1);
inst_co.setValue(m_disease_g,m_disease_g1);
inst_co.setValue(m_disease_b,m_disease_b1);
inst_co.setValue(m_background_r,m_background_r1);
inst_co.setValue(m_background_g,m_background_g1);
inst_co.setValue(m_background_b,m_background_b1);
inst_co.setValue(fluid_filled_blisters,fluid_filled_blisters1);
inst_co.setValue(feel_itchy,feel_itchy1);
// inst_co.setMissing(cluster);
// load classifier from file
Classifier cls_co = (Classifier) weka.core.SerializationHelper
.read("C:/Users/Lahiru/Documents/NetBeansProjects/level_4_project_weka/diseases.model");
double result1 = cls_co.classifyInstance(inst_co);
System.out.println("a" + result1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
但是当我添加
`inst_co.setValue(fluid_filled_blisters,fluid_filled_blisters1);
inst_co.setValue(feel_itchy,feel_itchy1);`
我收到以下错误。
java.lang.IllegalArgumentException: Attribute neither nominal nor string!
at weka.core.AbstractInstance.setValue(AbstractInstance.java:518)
at level_4_project_weka.wekaClass2.classify(wekaClass2.java:112)
at level_4_project_weka.Level_4_project_weka.PredictDisease(Level_4_project_weka.java:102)
at level_4_project_weka.Level_4_project_weka.main(Level_4_project_weka.java:27)
我知道,由于这两个是字符串变量而发生此错误。 但是我不知道如何处理字符串。 谁能告诉我正确的方法?
请参阅Weka文档:
http://weka.wikispaces.com/Creating+an+ARFF+file
其中详细介绍了如何使用适当的类型信息创建属性。
另请参阅: 在weka Java API中创建字符串属性
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.