问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C4.5 算法详解:决策树的经典算法

创作时间:
作者:
@小白创作中心

C4.5 算法详解:决策树的经典算法

引用
CSDN
1.
https://blog.csdn.net/2301_77444219/article/details/140051725

C4.5算法是决策树领域的经典算法,由Ross Quinlan在1993年提出,是ID3算法的改进版本。它不仅能够处理离散属性,还能处理连续属性,并在处理缺失值和剪枝方面有较大改进。本文将详细介绍C4.5算法的基本概念、工作原理以及实现步骤。

一、引言

在机器学习领域,决策树是一种广泛使用的分类和回归方法。C4.5 是由Ross Quinlan在1993年提出的算法,是ID3算法的改进版本,被广泛应用于数据挖掘和机器学习领域。本文将详细介绍C4.5算法的基本概念、工作原理以及实现步骤。

二、C4.5 算法的基本概念

C4.5算法是一种用于分类任务的决策树生成算法,其核心思想是通过信息增益比(Gain Ratio)来选择最优的划分属性,构建决策树。与ID3算法不同,C4.5不仅能够处理离散属性,还能处理连续属性,同时在处理缺失值和剪枝(Pruning)方面也有较大的改进。

三、C4.5 算法的工作原理

计算信息熵(Entropy)和信息增益(Information Gain)信息熵是度量样本集合纯度的指标,定义如下:

def calculate_entropy(y):
    """计算数据集的熵"""
    # 计算各类别的概率
    value_counts = y.value_counts()
    probabilities = value_counts / len(y)
    # 计算熵
    entropy = -sum(probabilities * np.log2(probabilities))
    return entropy

信息增益则表示通过某个属性进行划分后,信息熵的减少量:

def calculate_information_gain(X, y, attribute):
    """计算某个属性的信息增益"""
    # 计算数据集的熵
    total_entropy = calculate_entropy(y)
    
    # 按属性值划分数据集
    values = X[attribute].unique()
    weighted_entropy = 0
    
    for value in values:
        subset_y = y[X[attribute] == value]
        weighted_entropy += (len(subset_y) / len(y)) * calculate_entropy(subset_y)
    
    # 计算信息增益
    information_gain = total_entropy - weighted_entropy
    return information_gain  

四、C4.5 算法的实现步骤

选择最优划分属性计算每个属性的信息增益比选择信息增益比最高的属性作为当前节点的划分属性生成子节点根据选择的划分属性,将数据集划分为若干子集对每个子集递归地调用C4.5算法,生成子节点。并绘制图像。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt

# 创建西瓜数据集3.0 alpha
data = {
    '色泽': ['青绿', '乌黑', '乌黑', '青绿', '浅白', '青绿', '乌黑', '浅白', '青绿', '浅白', '青绿', '乌黑', '乌黑', '青绿', '青绿', '浅白', '乌黑'],
    '根蒂': ['蜷缩', '蜷缩', '蜷缩', '蜷缩', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '硬挺', '硬挺', '硬挺', '蜷缩', '稍蜷', '稍蜷', '蜷缩', '蜷缩', '硬挺'],
    '敲声': ['浊响', '沉闷', '浊响', '浊响', '浊响', '沉闷', '沉闷', '沉闷', '清脆', '清脆', '清脆', '浊响', '浊响', '浊响', '浊响', '浊响', '沉闷'],
    '好瓜': ['是', '否', '是', '是', '是', '否', '否', '否', '是', '否', '是', '否', '否', '否', '是', '是', '否']
}
df = pd.DataFrame(data)

# 特征和标签
X = df[['色泽', '根蒂', '敲声']]
y = df['好瓜']

# 将类别特征转换为数值特征
X = pd.get_dummies(X)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练决策树模型
clf = DecisionTreeClassifier(criterion='entropy', random_state=42)
clf.fit(X_train, y_train)

# 可视化决策树
plt.figure(figsize=(20,10))
plot_tree(clf, feature_names=X.columns, class_names=['否', '是'], filled=True, rounded=True, fontsize=12)
plt.title("西瓜数据集决策树")
plt.show()  

可视化结果:

五、总结

C4.5算法是决策树领域的经典算法,具备处理连续属性和缺失值的能力,同时通过引入信息增益比和剪枝技术,有效地提升了模型的泛化能力。尽管其计算复杂度较高,但在实际应用中表现出色,被广泛应用于各种分类任务中。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号