Eclipse Project 在github上: https://github.com/zhangfaen/ML/tree/master/random_forest_classifier
package faen;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
public class RandomForest {
static class Util {
public static void CHECK(boolean condition, String message) {
if (!condition) {
throw new RuntimeException(message);
}
}
}
private double[][] instances_;
private int[] targets_;
private int numOfTrees_;
private int numOfFeatures_;
private int maxDepth_;
private TreeNode[] trees_;
private static Random rand = new Random();
/**
* Train the RF model
*
* @param instances
* @param targets
* @param numOfTrees
* @param numOfFeatures
* this could be -1, if so, the default value will be
* len(features)^0.5
* @param maxDepth
* this could be -1, if so, any leaf node will have only 1
* instance.
*/
public void train(double[][] instances, int[] targets, int numOfTrees, int numOfFeatures,
int maxDepth, int treeSize) {
Util.CHECK(instances.length == targets.length, "");
Util.CHECK(numOfTrees > 0, "");
this.instances_ = instances;
this.targets_ = targets;
this.numOfTrees_ = numOfTrees;
this.numOfFeatures_ = numOfFeatures;
this.maxDepth_ = maxDepth;
this.trees_ = new TreeNode[numOfTrees_];
for (int i = 0; i < trees_.length; i++) {
System.out.println("building the tree:" + i);