-
Notifications
You must be signed in to change notification settings - Fork 0
/
Model.java
72 lines (64 loc) · 1.71 KB
/
Model.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
import java.util.*;
public class Model {
public String word;//the word
public ArrayList<sentence> validation;//validation set
public ArrayList<ArrayList<sentence>> training;
public ModelBasedOnKandNum best;
public int count = 0;
public Model(String w,sentence s){
word = w;
validation = new ArrayList();
training = new ArrayList();
for(int i = 0;i<s.count;i++){
//initialize count sentences
ArrayList<sentence> temp = new ArrayList();
training.add(temp);
}
}
public void addsentence(sentence s){
if(count%5==1){
//add to validation set
validation.add(s);
}
else{
//add to training
ArrayList<Integer> myvalue = new ArrayList<Integer>(s.value);
for(Integer t: myvalue){
ArrayList<sentence> temp = training.get(t);
temp.add(s);
training.remove((int)t);//remove from the training set
training.add(t, temp);//add back
}
}
count++;
}
public double setkandnum(){
double [][] table = new double[40][15];
for(int i = 0;i<table.length;i++){
for(int j = 0;j<table[0].length;j++){
//k = j+1; num = i+10;
//create the model
ArrayList<Integer> counts = new ArrayList();
for(ArrayList<sentence> s: training){
counts.add(s.size());
}
ModelBasedOnKandNum model = new ModelBasedOnKandNum(j+1,i+10,training,counts);
//test the model in validation
double temp = model.runvalidation(validation);
if(best==null){
best = model;//initialize the best
}
else if(temp>best.score){
best = model;//update
}
//check with the best
}
}
if(best.tp+best.fp==0){
return 0;
}
else{
return 1.0*best.tp/(best.tp+best.fp);
}
}
}