挑西瓜-决策树

本文介绍了决策树的基础知识,包括决策树的含义和优缺点,并详细讲解了如何利用Python和jupyter notebook实现ID3、C4.5和CART算法,探讨了这些算法的改进和处理连续、缺失值的方法。最后,总结了三种算法的应用和特点。
摘要由CSDN通过智能技术生成

目录

一、决策树

1.决策树的含义:

2.优缺点

二、决策树-挑西瓜

1.用jupyter创建一个.ipynb文件

2.代码部分

 三、sk-learn库分别进行ID3、CART和C4.5的算法代码实现

1.ID3算法

2.C4.5算法

3.CART算法

四、总结


一、决策树

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值