决策树
决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。
本文将使用目前常用的几种决策树算法对美国人群收入数据进行建模,并比较几种不同决策树的特点。
- ID3 Iterative Dichotomiser 3
- C4.5
- CART Classification and Regression Trees
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
ID3
ID3算法的核心是在决策树各个节点上应用 信息增益 准则选择特征,递归的构建决策树。具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归的调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。ID3相当于用极大似然法进行概率模型的选择。
ID3算法的缺点:
- 不能对连续数据进行处理,只能通过连续数据离散化进行处理;
- 采用信息增益进行数据分裂容易偏向取值较多的特征,准确性不如信息增益率;
- 缺失值不好处理。
- 没有采用剪枝,决策树的结构可能过于复杂,出现过拟合。
https://blog.csdn.net/choven_meng/article/details/82878018
这里从https://blog.csdn.net/u011437229/article/details/53219435 引用了ID3的代码,
#!/usr/bin/python
#ID3.py created by lixin 20161118
from numpy import *
import math
import copy
class ID3DTree(object):
def __init__(self):
self.tree = {
} #generating tree
self.dataSet = []
self.labels = []
def loadDataSet(self,path,labels):
recordlist = []
fp = open(path,"rb")#读取文件内容
content = fp.read()
rowlist = content.splitlines()#按行转为一维表
recordlist = [row.split(','.encode()) for row in rowlist if row.strip()]
self.dataSet = recordlist
self.labels = labels
def