Python3机器学习实战ID3决策树实现+matplotlib绘制树形图

本文通过Python3实现了ID3决策树算法,并使用matplotlib进行决策树的图形绘制,详细介绍了trees.py和tree_plotter.py两个文件的内容,展示了如何生成决策树及其对应的树形图。
摘要由CSDN通过智能技术生成

trees.py

import math
import operator


def calc_shannon_entropy(dataset):
    """
    计算香农熵,似乎是全类的标记
    熵越高,混合的数据越多
    另一种度量如基尼不纯度,简单来讲就是随机选子项度量误分概率
    """
    label_counts = {}
    for feature_vec in dataset:
        # 提取的就是那个分类的结果
        current_label = feature_vec[-1]
        # 计算一下各种结果一共有多少个
        label_counts[current_label] =  label_counts.get(current_label,0) + 1
    # 香农熵
    shannon_entropy = 0.
    for key in label_counts.keys():
        # 计算每一种结果的概率
        prob = float(label_counts[key]) / len(dataset)
        # 计算它的香农熵
        shannon_entropy -= prob * math.log(prob,2)
    return shannon_entropy

def create_dataset():
    """
    简单版的创建数据
    数据是列表,各个特征长度一致,最后一个是类别标签
    """
    # 可以把其中一个换成'maybe'试一试,熵明显会变大
    dataset = [[1, 1, 'yes'],
               [1, 1, 'yes'],
               [1, 0, 'no'],
               [0, 1, 'no'],
               [0, 1, 'no'],
               ]
    labels = ['no surfacing', 'flippers']
    return  dataset, labels

def split_dataset(dataset,axis,value):
    """
    划分数据集
    """
    ret_dataset = []
    for feature_vec in dataset:
        if feature_vec[axis] == value:
            # 反正这这两句的意思就是剔除[axis]对应的元素
            reduced_feature_vec = feature_vec[:axis]
            reduced_feature_vec.extend(feature_vec[axis+1:])
            # 把剔除后的特征向量放进集合中
            ret_dataset.append(reduced_feature_vec)
    return ret_dataset

def choose_best_feature_to_split(dataset):
    """
    熵的计算理解:按各自占的比例一直往下算,最后一步shannon_entropy -= prob * math.log(prob,2)
    都计算完了再根据权值加回来
    返回划分数据集最佳的特征
    """
    # 减去类别标签,看有几个特征
    num_features = len(dataset[0]) - 1
    # 无序时候的基本熵
    base_entropy = calc_shannon_entropy(dataset)
    # 先任意初始化最佳信息增益和与之对应的最佳特征
    best_info_gain = 0.
    best_feature = -1
    # 尝试用每一个特征来划分
    for i in range(num_features):
        feature
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值