|
9 | 9 | import java.util.Random;
|
10 | 10 |
|
11 | 11 | import weka.classifiers.Classifier;
|
12 |
| -import weka.classifiers.functions.LinearRegression; |
13 | 12 | import weka.classifiers.meta.FilteredClassifier;
|
14 | 13 | import weka.classifiers.trees.RandomForest;
|
15 |
| -import weka.core.Attribute; |
16 | 14 | import weka.core.Instance;
|
17 | 15 | import weka.core.Instances;
|
18 |
| -import weka.filters.unsupervised.attribute.Normalize; |
19 | 16 | import weka.filters.unsupervised.attribute.Remove;
|
20 | 17 |
|
21 | 18 | public class Bagging {
|
22 | 19 |
|
23 |
| - static Normalize normFilter = new Normalize(); |
24 |
| - static Normalize normFilterUser = new Normalize(); |
25 |
| - |
26 |
| - static FilteredClassifier model = new FilteredClassifier(); |
27 |
| - static FilteredClassifier model2 = new FilteredClassifier(); |
28 |
| - static FilteredClassifier model3 = new FilteredClassifier(); |
29 |
| - static FilteredClassifier model4 = new FilteredClassifier(); |
30 |
| - static FilteredClassifier model5 = new FilteredClassifier(); |
31 |
| - static FilteredClassifier model6 = new FilteredClassifier(); |
32 |
| - |
33 |
| - /** |
34 |
| - * Applies linear regression to the missing values of the training set in order to predict their values |
35 |
| - * and normalization to make the values fall into the range [0,1]. |
36 |
| - * It is the case of the Item type Instances. |
37 |
| - * @param trainingSet |
38 |
| - * @return Instances the transformed training set |
39 |
| - * @throws Exception |
40 |
| - */ |
41 |
| - public static Instances getTransformedTraining(Instances trainingSet) throws Exception { |
42 |
| - |
43 |
| - Remove rm = new Remove(); |
44 |
| - rm.setAttributeIndices("1"); |
45 |
| - |
46 |
| - ArrayList<Attribute> fvAttributes = ItemClassifier.getFvAttributes(); |
47 |
| - |
48 |
| - //REGRESSION |
49 |
| - //wotTrust |
50 |
| - trainingSet.setClass(fvAttributes.get(22)); |
51 |
| - LinearRegression lr = new LinearRegression(); |
52 |
| - Instances training_regr = null; |
53 |
| - model.setFilter(rm); |
54 |
| - model.setClassifier(lr); |
55 |
| - |
56 |
| - try { |
57 |
| - model.buildClassifier(trainingSet); |
58 |
| - training_regr = DataHandler.getInstance().applyRegressionModel(trainingSet, fvAttributes, model); |
59 |
| - } |
60 |
| - catch(Exception e) { |
61 |
| - training_regr = trainingSet; |
62 |
| - System.out.println("not enought training instances. Linear Regression not performed!"); |
63 |
| - } |
64 |
| - |
65 |
| - //readability |
66 |
| - training_regr.setClass(fvAttributes.get(25)); |
67 |
| - LinearRegression lr2 = new LinearRegression(); |
68 |
| - Instances training_regr2 = null; |
69 |
| - |
70 |
| - model2.setFilter(rm); |
71 |
| - model2.setClassifier(lr2); |
72 |
| - try { |
73 |
| - model2.buildClassifier(training_regr); |
74 |
| - training_regr2 = DataHandler.getInstance().applyRegressionModel(training_regr, fvAttributes, model2); |
75 |
| - } |
76 |
| - catch(Exception e){ |
77 |
| - training_regr2 = training_regr; |
78 |
| - System.out.println("not enought training instances. Linear Regression not performed!"); |
79 |
| - } |
80 |
| - |
81 |
| - training_regr2.setClass(fvAttributes.get(19)); |
82 |
| - LinearRegression lr3 = new LinearRegression(); |
83 |
| - Instances training_regr3 = null; |
84 |
| - |
85 |
| - model3.setFilter(rm); |
86 |
| - model3.setClassifier(lr3); |
87 |
| - try { |
88 |
| - model3.buildClassifier(training_regr2); |
89 |
| - training_regr3 = DataHandler.getInstance().applyRegressionModel(training_regr2, fvAttributes, model3); |
90 |
| - } |
91 |
| - catch(Exception e) { |
92 |
| - training_regr3 = training_regr2; |
93 |
| - System.out.println("not enought training instances. Linear Regression not performed!"); |
94 |
| - } |
95 |
| - |
96 |
| - training_regr3.setClass(fvAttributes.get(13)); |
97 |
| - LinearRegression lr4 = new LinearRegression(); |
98 |
| - Instances training_regr4 = null; |
99 |
| - model4.setFilter(rm); |
100 |
| - model4.setClassifier(lr4); |
101 |
| - try { |
102 |
| - model4.buildClassifier(training_regr3); |
103 |
| - training_regr4 = DataHandler.getInstance().applyRegressionModel(training_regr3, fvAttributes, model4); |
104 |
| - } |
105 |
| - catch(Exception e) { |
106 |
| - training_regr4 = training_regr3; |
107 |
| - System.out.println("not enought training instances. Linear Regression not performed!"); |
108 |
| - } |
109 |
| - |
110 |
| - training_regr4.setClass(fvAttributes.get(14)); |
111 |
| - LinearRegression lr5 = new LinearRegression(); |
112 |
| - Instances training_regr5 = null; |
113 |
| - model5.setFilter(rm); |
114 |
| - model5.setClassifier(lr5); |
115 |
| - |
116 |
| - try { |
117 |
| - model5.buildClassifier(training_regr4); |
118 |
| - training_regr5 = DataHandler.getInstance().applyRegressionModel(training_regr4, fvAttributes, model5); |
119 |
| - } |
120 |
| - catch(Exception e) { |
121 |
| - training_regr5 = training_regr4; |
122 |
| - System.out.println("not enought training instances. Linear Regression not performed!"); |
123 |
| - } |
124 |
| - |
125 |
| - training_regr5.setClass(fvAttributes.get(6)); |
126 |
| - LinearRegression lr6 = new LinearRegression(); |
127 |
| - Instances training_regr6 = null; |
128 |
| - model6.setFilter(rm); |
129 |
| - model6.setClassifier(lr6); |
130 |
| - try { |
131 |
| - model6.buildClassifier(training_regr5); |
132 |
| - training_regr6 = DataHandler.getInstance().applyRegressionModel(training_regr5, fvAttributes, model6); |
133 |
| - } |
134 |
| - catch(Exception e) { |
135 |
| - training_regr6 = training_regr5; |
136 |
| - } |
137 |
| - |
138 |
| - |
139 |
| - // normalization part |
140 |
| - String[] options = { "-S", "2.0", "-T", "-1.0" }; |
141 |
| - normFilter.setOptions(options); |
142 |
| - normFilter.setInputFormat(training_regr5); |
143 |
| - |
144 |
| - Instances trainingSet_normed = DataHandler.getInstance().normalizeData(training_regr6, fvAttributes.size() - 1, normFilter); |
145 |
| - |
146 |
| - |
147 |
| - return trainingSet_normed; |
148 |
| - |
149 |
| - } |
150 |
| - |
151 |
| - |
152 |
| - static FilteredClassifier usermodel = new FilteredClassifier(); |
153 |
| - static FilteredClassifier usermodel2 = new FilteredClassifier(); |
154 |
| - static FilteredClassifier usermodel3 = new FilteredClassifier(); |
155 |
| - |
156 |
| - /** |
157 |
| - * Applies linear regression to the missing values of the training set in order to predict their values |
158 |
| - * and normalization to make the values fall into the range [0,1]. |
159 |
| - * It is the case of the User type Instances. |
160 |
| - * @param trainingSet |
161 |
| - * @return Instances the transformed training set |
162 |
| - * @throws Exception |
163 |
| - */ |
164 |
| - public static Instances getTransformedTrainingUser(Instances trainingSet) { |
165 |
| - |
166 |
| - ArrayList<Attribute> fvAttributes = UserClassifier.getFvAttributes(); |
167 |
| - |
168 |
| - //remove filter in order to remove the id attribute |
169 |
| - Remove rm = new Remove(); |
170 |
| - rm.setAttributeIndices("1"); |
171 |
| - |
172 |
| - //regression |
173 |
| - trainingSet.setClass(fvAttributes.get(11)); |
174 |
| - LinearRegression lr = new LinearRegression(); |
175 |
| - Instances training_regr = null; |
176 |
| - usermodel.setFilter(rm); |
177 |
| - usermodel.setClassifier(lr); |
178 |
| - |
179 |
| - |
180 |
| - try { |
181 |
| - usermodel.buildClassifier(trainingSet); |
182 |
| - training_regr = DataHandler.getInstance().applyRegressionModel(trainingSet, fvAttributes, usermodel); |
183 |
| - } |
184 |
| - catch(Exception e) { |
185 |
| - training_regr = trainingSet; |
186 |
| - System.out.println("not enought training instances. Linear Regression not performed!"); |
187 |
| - } |
188 |
| - |
189 |
| - |
190 |
| - training_regr.setClass(fvAttributes.get(13)); |
191 |
| - LinearRegression lr2 = new LinearRegression(); |
192 |
| - Instances training_regr2 = null; |
193 |
| - usermodel2.setFilter(rm); |
194 |
| - usermodel2.setClassifier(lr2); |
195 |
| - try { |
196 |
| - usermodel2.buildClassifier(training_regr); |
197 |
| - training_regr2 = DataHandler.getInstance().applyRegressionModel(training_regr, fvAttributes, usermodel2); |
198 |
| - } |
199 |
| - catch(Exception e) { |
200 |
| - training_regr2 = training_regr; |
201 |
| - System.out.println("not enought training instances. Linear Regression not performed!"); |
202 |
| - } |
203 |
| - |
204 |
| - training_regr2.setClass(fvAttributes.get(16)); |
205 |
| - LinearRegression lr3 = new LinearRegression(); |
206 |
| - Instances training_regr3 = null; |
207 |
| - usermodel3.setFilter(rm); |
208 |
| - usermodel3.setClassifier(lr3); |
209 |
| - try { |
210 |
| - usermodel3.buildClassifier(training_regr2); |
211 |
| - training_regr3 = DataHandler.getInstance().applyRegressionModel(training_regr2, fvAttributes, usermodel3); |
212 |
| - } |
213 |
| - catch(Exception e) { |
214 |
| - training_regr3 = training_regr2; |
215 |
| - System.out.println("not enought training instances. Linear Regression not performed!"); |
216 |
| - } |
217 |
| - |
218 |
| - //normalization |
219 |
| - normFilterUser = DataHandler.getInstance().createNormalizationFilter(training_regr3); |
220 |
| - Instances trainingSet_normed = DataHandler.getInstance().normalizeData(training_regr3, fvAttributes.size()-1, normFilterUser); |
221 |
| - |
222 |
| - return trainingSet_normed; |
223 |
| - } |
224 |
| - |
225 |
| - /** |
226 |
| - * Applies Linear Regression and normalization to the testing set according to the models and filters |
227 |
| - * created before by the training set. |
228 |
| - * It is the case of the Item type Instances. |
229 |
| - * @param testing the Instances to be transformed |
230 |
| - * @return the transformed testing set |
231 |
| - * @throws Exception |
232 |
| - */ |
233 |
| - public static Instances getTransformedTesting(Instances testing) throws Exception { |
234 |
| - |
235 |
| - ArrayList<Attribute> fvAttributes = ItemClassifier.getFvAttributes(); |
236 |
| - Instances testing_regr=null,testing_regr2=null,testing_regr3=null,testing_regr4=null,testing_regr5=null,testing_regr6=null; |
237 |
| - |
238 |
| - // regression |
239 |
| - if (!model.toString().contains("No model built yet.")) { |
240 |
| - testing.setClass(fvAttributes.get(22)); |
241 |
| - testing_regr = DataHandler.getInstance().applyRegressionModel(testing, fvAttributes, model); |
242 |
| - } |
243 |
| - else { |
244 |
| - testing_regr = testing; |
245 |
| - } |
246 |
| - |
247 |
| - if (!model2.toString().contains("No model built yet.")) { |
248 |
| - testing_regr.setClass(fvAttributes.get(25)); |
249 |
| - testing_regr2 = DataHandler.getInstance().applyRegressionModel(testing_regr, fvAttributes, model2); |
250 |
| - } |
251 |
| - else { |
252 |
| - testing_regr2 = testing_regr; |
253 |
| - } |
254 |
| - |
255 |
| - if (!model3.toString().contains("No model built yet.")) { |
256 |
| - testing_regr2.setClass(fvAttributes.get(19)); |
257 |
| - testing_regr3 = DataHandler.getInstance().applyRegressionModel(testing_regr2, fvAttributes, model3); |
258 |
| - } |
259 |
| - else { |
260 |
| - testing_regr3 = testing_regr2; |
261 |
| - } |
262 |
| - |
263 |
| - if (!model4.toString().contains("No model built yet.")) { |
264 |
| - testing_regr3.setClass(fvAttributes.get(13)); |
265 |
| - testing_regr4 = DataHandler.getInstance().applyRegressionModel(testing_regr3, fvAttributes, model4); |
266 |
| - } |
267 |
| - else { |
268 |
| - testing_regr4 = testing_regr3; |
269 |
| - } |
270 |
| - |
271 |
| - if (!model5.toString().contains("No model built yet.")) { |
272 |
| - testing_regr4.setClass(fvAttributes.get(14)); |
273 |
| - testing_regr5 = DataHandler.getInstance().applyRegressionModel(testing_regr4, fvAttributes, model5); |
274 |
| - } |
275 |
| - else { |
276 |
| - testing_regr5 = testing_regr4; |
277 |
| - } |
278 |
| - |
279 |
| - if (!model6.toString().contains("No model built yet.")) { |
280 |
| - testing_regr5.setClass(fvAttributes.get(6)); |
281 |
| - testing_regr6 = DataHandler.getInstance().applyRegressionModel(testing_regr5, fvAttributes, model6); |
282 |
| - } |
283 |
| - else { |
284 |
| - testing_regr6 = testing_regr5; |
285 |
| - } |
286 |
| - |
287 |
| - |
288 |
| - // normalization |
289 |
| - Instances testingSet_normed = DataHandler.getInstance().normalizeData(testing_regr6, fvAttributes.size() - 1, normFilter); |
290 |
| - //testingSet_normed = getTrimmedInstances(testingSet_normed); |
291 |
| - |
292 |
| - return testingSet_normed; |
293 |
| - } |
294 |
| - |
295 |
| - |
296 |
| - /** |
297 |
| - * Applies Linear Regression and normalization to the testing set according to the models and filters |
298 |
| - * created before by the training set. |
299 |
| - * It is the case of the User type Instances. |
300 |
| - * @param testing the Instances to be transformed |
301 |
| - * @return the transformed testing set |
302 |
| - * @throws Exception |
303 |
| - */ |
304 |
| - public static Instances getTransformedTestingUser(Instances testing) throws Exception { |
305 |
| - |
306 |
| - ArrayList<Attribute> fvAttributes = UserClassifier.getFvAttributes(); |
307 |
| - Instances testing_regr=null,testing_regr2=null,testing_regr3=null; |
308 |
| - |
309 |
| - testing_regr3 = testing; |
310 |
| - |
311 |
| - if (!usermodel.toString().contains("No model built yet.")) { |
312 |
| - testing.setClass(fvAttributes.get(11)); |
313 |
| - testing_regr = DataHandler.getInstance().applyRegressionModel(testing, fvAttributes, usermodel); |
314 |
| - } |
315 |
| - else { |
316 |
| - testing_regr = testing; |
317 |
| - } |
318 |
| - if (!usermodel2.toString().contains("No model built yet.")) { |
319 |
| - testing_regr.setClass(fvAttributes.get(13)); |
320 |
| - testing_regr2 = DataHandler.getInstance().applyRegressionModel(testing_regr, fvAttributes, usermodel2); |
321 |
| - } |
322 |
| - else { |
323 |
| - testing_regr2= testing_regr; |
324 |
| - } |
325 |
| - if (!usermodel3.toString().contains("No model built yet.")) { |
326 |
| - testing_regr2.setClass(fvAttributes.get(16)); |
327 |
| - testing_regr3 = DataHandler.getInstance().applyRegressionModel(testing_regr2, fvAttributes, usermodel3); |
328 |
| - } |
329 |
| - else { |
330 |
| - testing_regr3 = testing_regr2; |
331 |
| - } |
332 |
| - |
333 |
| - if (!usermodel.toString().contains("No model built yet.")) { |
334 |
| - testing.setClass(fvAttributes.get(1)); |
335 |
| - testing_regr = DataHandler.getInstance().applyRegressionModel(testing, fvAttributes, usermodel); |
336 |
| - } |
337 |
| - else { |
338 |
| - testing_regr = testing; |
339 |
| - } |
340 |
| - if (!usermodel2.toString().contains("No model built yet.")) { |
341 |
| - testing_regr.setClass(fvAttributes.get(4)); |
342 |
| - testing_regr2 = DataHandler.getInstance().applyRegressionModel(testing_regr, fvAttributes, usermodel2); |
343 |
| - } |
344 |
| - else { |
345 |
| - testing_regr2= testing_regr; |
346 |
| - } |
347 |
| - |
348 |
| - |
349 |
| - //normalization |
350 |
| - Instances testingSet_normed = DataHandler.getInstance().normalizeData(testing_regr3, fvAttributes.size()-1, normFilterUser); |
351 |
| - //testingSet_normed = getTrimmedInstances(testingSet_normed); |
352 |
| - |
353 |
| - return testingSet_normed; |
354 |
| - } |
355 | 20 |
|
356 | 21 | static Instances[] testingSets = new Instances[9];
|
357 | 22 |
|
|
0 commit comments