-
Notifications
You must be signed in to change notification settings - Fork 0
/
Mian.java
158 lines (126 loc) · 3.62 KB
/
Mian.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import weka.classifiers.Classifier;
import weka.classifiers.evaluation.Evaluation;
import weka.classifiers.functions.*;
import weka.classifiers.rules.*;
import weka.classifiers.trees.*;
import weka.core.Attribute;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.CSVLoader;
public class Mian {
static Instances completeData = null;
static Instances data = null;
static ArrayList<Integer> missingPosition = null;
public static void main(String... Args){
// load file
String filedir = "/run/media/juunnn/JAV/Dataset/data/hypothyroid.csv";
try {
System.out.print("Loading data source ....... ");
loadData(filedir);
System.out.print("success");
System.out.println();
} catch (IOException e) {
e.printStackTrace();
}
//separates the missing data and the complete data
try {
System.out.print("Spliting data source ....... ");
splitdata();
System.out.print("success");
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
//replace the missing value with new datum
try {
System.out.print("Replacing missing values ...... ");
ganti();
System.out.print("success");
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
//building the main models
Classifier model = null;
try {
System.out.print("Building model ...... ");
model = buildModel();
System.out.println("#==============================================#");
} catch (Exception e) {
e.printStackTrace();
}
//evaluation
try {
System.out.print("Evaluating model ...... ");
eval(model);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void eval(Classifier model) throws Exception {
Evaluation ev = new Evaluation(data);
ev.crossValidateModel(model, data, 10, new Random(19071996));
System.out.println(ev.toSummaryString());
}
private static Classifier buildModel() throws Exception {
data.setClassIndex(data.numAttributes() - 1);
J48 model =new J48();
model.buildClassifier(data);
System.out.println(model.toString());
return model;
}
private static void ganti() throws Exception {
for(Integer pos: missingPosition) {
Instance ins = data.instance(pos);
for(int i = 0; i < ins.numAttributes(); i++) {
if(ins.isMissing(i)) {
Attribute cls = ins.attribute(i);
ins.setValue(cls, predict(cls, pos));
}
}
System.out.println(pos);
}
}
private static double predict(Attribute cls, int pos) throws Exception {
completeData.setClass(cls);
data.setClass(cls);;
Instance sample = data.instance(pos);
Classifier model = null;
if(cls.isNumeric()) {
model = new MultilayerPerceptron();
}
else {
model = new OneR();
}
model.buildClassifier(completeData);
return model.classifyInstance(sample);
}
private static void splitdata() throws Exception{
completeData = new Instances(data, data.numInstances());
missingPosition = new ArrayList<Integer>();
for(Instance ins: data) {
if(!ins.hasMissingValue()) {
completeData.add(ins);
}
else {
missingPosition.add(data.indexOf(ins));
}
}
}
private static void loadData(String fileDir) throws IOException {
File file = new File(fileDir);
if (file.getName().toLowerCase().endsWith(CSVLoader.FILE_EXTENSION)) {
CSVLoader loader = new CSVLoader();
loader.setSource(file);
data = loader.getDataSet();
} else {
data = new Instances(new BufferedReader(new FileReader(file)));
}
}
}