机器学习实战决策树的java实现

这是一个Java实现的决策树算法,包括数据集创建、信息增益计算、最佳特征选择、决策树构建等功能。代码中定义了多个类,如ComparatorImpl用于自定义HashMap排序,Matrix和CreateDataSet用于保存数据和标签,Dictionary用于构建决策树结构。此外,还有针对数据集的处理函数,如calcShannonEnt计算香农熵,splitDataSet按特征值划分数据,createTree构建决策树等。
package com.haolidong.Decisiontree;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map.Entry;
/**
 * @author haolidong
 * @Description:  [该类主要用于HashMap进行自定义的排序(从大到小)]  
 */
public class ComparatorImpl implements Comparator<HashMap<String,Integer>>{
	@SuppressWarnings("unchecked")
	@Override
	public int compare(HashMap<String, Integer> o1, HashMap<String, Integer> o2) {
		// TODO Auto-generated method stub
		Entry<String, Integer> obj1 = (Entry<String, Integer>) o1;  
		Entry<String, Integer> obj2 = (Entry<String, Integer>) o2;  
        return ((Integer) (obj2.getValue()) - (Integer) (obj1.getValue()));  
    }  
	

}

package com.haolidong.Decisiontree;

import java.util.ArrayList;
/**
 * 
 * @author haolidong
 * @Description:  [该类主要用于保存特征信息]
 * @parameter data:  [主要保存特征矩阵]
 */
public class Matrix {
	public  ArrayList<ArrayList<String>> data;
	public Matrix() {
		// TODO Auto-generated constructor stub
		data = new ArrayList<ArrayList<String>>();
	}
}

package com.haolidong.Decisiontree;

import java.util.ArrayList;
/**
 * 
 * @author haolidong
 * @Description:  [该类主要用于保存特征信息以及标签值]
 * @parameter labels:  [主要保存标签值]
 */
public class CreateDataSet extends Matrix{
	public  ArrayList<String> labels;
	public CreateDataSet() {
		// TODO Auto-generated constructor stub
		super();
		labels = new ArrayList<String>();
	}
	/**
	 * @author haolidong
	 * @Description:  [机器学习实战决策树第一个案例的数据] 
	 */
	public  void  initTest()
	{		
		ArrayList<String> ab1 = new ArrayList<String>();
		ArrayList<String> ab2 = new ArrayList<String>();
		ArrayList<String> ab3 = new ArrayList<String>();
		ArrayList<String> ab4 = new ArrayList<String>();
		ArrayList<String> ab5 = new ArrayList<String>();
		ab1.add("1");ab1.add("1");ab1.add("yes");
		ab2.add("1");ab2.add("1");ab2.add("yes");
		ab3.add("1");ab3.add("0");ab3.add("no");
		ab4.add("0");ab4.add("1");ab4.add("no");
		ab5.add("0");ab5.add("1");ab5.add("no");
		data.add(ab1);
		data.add(ab2);
		data.add(ab3);
		data.add(ab4);
		data.add(ab5);
		labels.add("no surfacing");
		labels.add("flippers");
	}
}

package com.haolidong.Decisiontree;

import java.util.ArrayList;
/**
 * 
 * @author haolidong
 * @Description:  [该类主要用于模拟Python的字典,最终保存生成树的信息]
 * @parameter  arrow:  [主要保存父节点指向自己的标签名字]
 * @parameter  name:  [主要保存当前节点的名字]
 * @parameter  arrDic:  [主要保存子节点的信息]
 */
public class Dictionary {
	public String arrow;
	public String name;
	public ArrayList<Dictionary> arrDic;
	/**
	 * @author haolidong
	 * @Description:  [类的构造函数,分配空间,根节点只要arrow什么也不填]
	 */
	public Dictionary() {
		// TODO Auto-generated constructor stub
		arrow = new String("");
		name = new String("");
		arrDic = new ArrayList<Dictionary>();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值