<pre name="code" class="java">在学习概率图模型的时候,就想实现一下K2算法。直接上代码吧。
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
public class K2Algorithm {
ArrayList<ArrayList<Integer>> dataSet;
private int UPPER_BOUND = 1;
public K2Algorithm() {
String trainingFile = "trainingData.txt";
try {
dataSet = loadDataSet(trainingFile);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
K2Algorithm ka = new K2Algorithm();
HashMap<Integer, ArrayList<Integer>> bnStructureHashMap = ka
.getBNStructure();
System.out.println(bnStructureHashMap);
}
private HashMap<Integer, ArrayList<Integer>> getBNStructure() {
HashMap<Integer, ArrayList<Integer>> bnStructure = new HashMap<>();
int attrNum = dataSet.get(0).size();
for (int i = 0; i < attrNum; i++) {
ArrayList<Integer> parentList = new ArrayList<>();
double probOld = calIsParentProb(parentList, i);
boolean OkToProceed = true;
int optimalParent = 0;
double probNew = toLog(0);
while (OkToProceed && parentList.size() < UPPER_BOUND) {
for (int j = 0; j < i;