RandomForest算法,精髓之处在于在建立决策树的时候,在每个节点进行属性选取时,是随机地选取部分属性,从中进行最优属性的选取,而不是在全部的所有属性中进行选择。建立了决策树森林之后,每次都要对这些不同的决策树进行预测,选出其中被预测最多的那个类别来作为最终的预测类别。在有5棵决策树时,我得出的对于离散属性的预测准确度为0.73,对于连续属性的预测准确度为0.96.
下面是我的RandomForest算法的代码,
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package auxiliary;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
/**
*
* @author daq
*/
public class RandomForest extends Classifier {
private int K=5;
private ArrayList<DecisionTree> trees=new ArrayList<DecisionTree>();
private HashMap<Double,Integer> map=null;
private double newFeatures[][]=null;
private double newLabels[]=null;
public RandomForest() {
}
@Override
public void train(boolean[] isCategory, double[][] features, double[] labels) {
for(int i=0;i<K;i++){
DecisionTree tree=new DecisionTree();
produceNewFeaturesLabels(features,labels);
tree.train(isCategory,newFeatures, newLabels);
trees.add(tree);
newFeatures=null;
newLabels=null;
}
DecisionTree tree=new DecisionTree();
tree.train(isCategory, features, labels);
trees.add(tree);
}
public void produceNewFeaturesLabels(double[][] features, double[] labels){
int size=features.length;
newFeatures=new double[size][];
newLabels=new double[size];
int length=features[0].length;
for(int i=0;i<size;i++){
int ran=(int) (Math.random()*size);
newFeatures[i]=Arrays.copyOf(features[ran],length);
newLabels[i]=labels[ran];
}
}
@Override
public double predict(double[] features) {
map=new HashMap<Double, Integer>();
for(int i=0;i<K;i++){
DecisionTree tree=trees.get(i);
double label=tree.predict(features);
if(map.get(label)==null)
map.put(label,1);
else
map.put(label, map.get(label)+1);
}
double maxIndex=0;
int max=-1;
Iterator<Entry<Double,Integer>> ite=map.entrySet().iterator();
while(ite.hasNext()){
Entry entry=ite.next();
if((Integer)entry.getValue()>max){
maxIndex=(Double)entry.getKey();
max=(Integer)entry.getValue();
}
}
return maxIndex;
}
}
分享到:
相关推荐
数据挖掘之随机森林算法实验报告 (2).docx数据挖掘之随机森林算法实验报告 (2).docx数据挖掘之随机森林算法实验报告 (2).docx数据挖掘之随机森林算法实验报告 (2).docx数据挖掘之随机森林算法实验报告 (2).docx数据...
数据挖掘技术决策树分类算法(ID3算法)研究.pdf
数据挖掘之经典算法数据挖掘之经典算法数据挖掘之经典算法数据挖掘之经典算法数据挖掘之经典算法数据挖掘之经典算法数据挖掘之经典算法
关于大数据挖掘中的数据分类算法技术的研究.pdf
数据挖掘排名前十的算法、数据挖掘排名前十的算法、数据挖掘排名前十的算法、数据挖掘排名前十的算法数据挖掘排名前十的算法
数据挖掘中的binning算法,用于数据预处理
数据挖掘算法知识包,比较全的资料
本书是一个导论,介绍什么是数据挖掘,什么是数据库中知识发现。书中的材料从数据库角度 提供,特别强调发现隐藏在大型数据集中有趣数据模式的数据挖掘基本概念和技术。所讨论的实现 方法主要面向可规模化的、有效...
本算法为数据挖掘中序列模式挖掘中的GSP算法的基本实现,可依托此算法进行算法的优化操作。
数据挖掘领域的十大经典算法原理及应用.docx数据挖掘领域的十大经典算法原理及应用.docx数据挖掘领域的十大经典算法原理及应用.docx数据挖掘领域的十大经典算法原理及应用.docx数据挖掘领域的十大经典算法原理及应用...
数据挖掘之随机森林算法实验报告 (2).pdf数据挖掘之随机森林算法实验报告 (2).pdf数据挖掘之随机森林算法实验报告 (2).pdf数据挖掘之随机森林算法实验报告 (2).pdf数据挖掘之随机森林算法实验报告 (2).pdf数据挖掘之...
本书在介绍了数据挖掘原理的基础上,从实用的角度出发,详细地介绍了数据挖掘的经典算法。第1章从不同的角度对数据挖掘进行了介绍,第2章介绍了数据仓库技术的概念并给出了数据立方体的理论基础。第3章讲述了数据...
数据挖掘十大经典机器学习算法,国际权威的学术组织 the IEEE International Conference on Data Mining (ICDM) 2006 年 12 月评选出了数据挖掘领域的十大经典算法: C4.5, k-Means, SVM, Apriori, EM, PageRank, ...
该算法是数据挖掘中关联规则的经典算法。代码风格清晰,运行速度快!
袁博-数据挖掘理论与算法
数据挖掘决策树ID3算法C++实现 数据挖掘入门程序
数据挖掘原理与算法(第3版)
基于数据挖掘和RandomForest算法的助学金分类研究.pdf
这是数据挖掘算法的Java实现,正在学习数据挖掘的同学可以参照这些算法对照书本学习。