目录
三、sk-learn库分别进行ID3、CART和C4.5的算法代码实现
一、决策树
1.决策树的含义:
决策树 (Decision Tree)是在已知各种情况发生概率的 基础 上,通过构成决策树来求取净现值的 期望 值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。. 由于这种决策分支画成图形很像一棵树的枝干,故称决策树。. 在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。. Entropy = 系统的凌乱程度,使用算法 ID3, C4.5 和C5.0生成树算法使用熵。. 这一度量是基于信息学理论中熵的概念。.
2.优缺点
优点:
决策树易于理解和实现,人们在在学习过程中不需要使用者了解很多的背景知识,这同时是它的能够直接体现数据的特点,只要通过解释后都有能力去理解决策树所表达的意义。
对于决策树,数据的准备往往是简单或者是不必要的,而且能够同时处理数据型和常规型属性,在相对短的时间内能够对大型数据源做出可行且效果良好的结果。
易于通过静态测试来对模型进行评测,可以测定模型可信度;如果给定一个观察的模型,那么根据所产生的决策树很容易推出相应的逻辑表达式。
缺点:
(1)对连续性的字段比较难预测。
(2)对有时间顺序的数据,需要很多预处理的工作。
(3)当类别太多时,错误可能就会增加的比较快。
(4)一般的算法分类的时候,只是根据一个字段来分类
二、决策树-挑西瓜
1.用jupyter创建一个.ipynb文件
注意:在过程中要用到xlrd这个模块和使用graphviz
wins+R->cmd输入以下命令下载
pip install xlrd
pip install graphviz
2.代码部分
#导入模块
import pandas as pd
import numpy as np
from collections import Counter
from math import log2
#数据获取与处理
def getData(filePath):
data = pd.read_excel(filePath)
return data
def dataDeal(data):
dataList = np.array(data).tolist()
dataSet = [element[1:] for element in dataList]
return dataSet
#获取属性名称
def getLabels(data):
labels = list(data.columns)[1:-1]
return labels
#获取类别标记
def targetClass(dataSet):
classification = set([element[-1] for element in dataSet])
return classification
#将分支结点标记为叶结点,选择样本数最多的类作为类标记
def majorityRule(dataSet):
mostKind = Counter([element[-1] for element in dataSet]).most_common(1)
majorityKind = mostKind[0][0]
return majorityKind
#计算信息熵
def infoEntropy(dataSet):
classColumnCnt = Counter([element[-1] for element in dataSet])
Ent = 0
for symbol in classColumnCnt:
p_k = classColumnCnt[symbol]/len(dataSet)
Ent = Ent-p_k*log2(p_k)
return Ent
#子数据集构建
def makeAttributeData(dataSet,value,iColumn):
attributeData = []
for element in dataSet:
if element[iColumn]==value:
row = element[:iColumn]
row.extend(element[iColumn+1:])
attributeData.append(row)
return attributeData
#计算信息增益
def infoGain(dataSet,iColumn):
Ent = infoEntropy(dataSet)
tempGain = 0.0
attribute = set([element[iColumn] for element in dataSet])
for value in attribute:
attributeData = makeAttr