ID3算法--Python

本文介绍了一种用于构造决策树的贪心算法——ID3算法,并详细展示了其核心思想及实现步骤。通过信息熵下降速度来选择划分属性,递归地构建决策树直至完成对训练样本的分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看完整代码http://www.daimapi.com/tree1_1/

代码3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到生成的决策树能完美分类训练样例。

import math
import operator
from math import log
import operater

def calcShannonEnt(dataset):
    numEntries = len(dataset)
    # 为所有的分类类目创建字典
    labelCounts = {}
    for featVec in dataset:
        currentLabel = featVec[-1] #取得最后一列数据
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] +=1
    #计算香农熵
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntries
        shannonEnt -= prob*math.log(prob, 2)
    return shannonEnt

# 构造函数createDataSet
def CreateDataSet():
    dataset = [[1, 1, 'yes' ],
               [1, 1, 'yes' ],
               [1, 0, 'no'],
               [0, 1, 'no'],
               [0, 1, 'no']]
    labels = ['no surfacing', 'flippers']
    return dataset, labels

 

### 使用ID3算法进行泰坦尼克号生存预测 #### ID3算法简介 ID3(Iterative Dichotomiser 3)是一种基于熵和信息增益的决策树分类算法。它通过计算每个属性的信息增益来选择最佳分裂节点,从而构建一棵用于分类的决策树。 对于泰坦尼克号生存预测问题,可以利用乘客的数据集(如年龄、性别、船舱等级等),并将其作为输入特征训练一个ID3决策树模型。以下是实现的具体方法: --- #### 数据预处理 由于原始数据可能包含缺失值或非数值型变量,在应用ID3算法前需先对数据进行清洗和转换: - **填充缺失值**:例如,“Age”列中的空缺可以用平均值或其他统计量替代。 - **编码类别变量**:将字符串类型的变量(如“Sex”,“Embarked”)转化为数值形式以便于后续计算。 ```python import pandas as pd from sklearn.preprocessing import LabelEncoder # 加载数据 data = pd.read_csv('titanic.csv') # 填充缺失值 data['Age'].fillna(data['Age'].mean(), inplace=True) # 编码类别变量 label_encoder = LabelEncoder() data['Sex'] = label_encoder.fit_transform(data['Sex']) ``` 上述代码片段展示了如何处理部分常见字段[^1]。 --- #### 构建ID3决策树 Python 中虽然没有内置支持直接创建ID3树的功能模块,但可以通过 `sklearn` 的 DecisionTreeClassifier 来模拟这一过程。默认情况下该类采用的是CART算法而非严格意义上的ID3;不过设置参数 criterion='entropy' 可让其更接近ID3的工作原理——即依据信息熵来进行分割判断而不是基尼指数[Gini impurity]. 下面给出一段简单的例子展示怎样运用 scikit-learn 库建立类似的结构: ```python from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 准备特征与目标标签 features = ['Pclass', 'Sex', 'Age'] X = data[features] y = data['Survived'] # 划分训练集测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 初始化决策树分类器(模仿ID3) clf_id3_like = DecisionTreeClassifier(criterion="entropy") # 训练模型 clf_id3_like.fit(X_train, y_train) # 预测结果 & 输出准确率 predictions = clf_id3_like.predict(X_test) print(f"Accuracy: {accuracy_score(y_test, predictions):.2f}") ``` 此脚本定义了一个类似于ID3的行为模式下的决策树,并评估了它的表现效果[^3]。 注意这里仅选取了几项基础要素做示范用途实际操作时应考虑更多维度以及深入探索各类因素间的关系比如借助热力图查看相互关联程度等等[^2]: ![Heatmap](https://i.imgur.com/yourimage.png) *(假设这是张代表数理关系强度图表)* --- #### 结果解释 最终得出的结果会告诉你所设计系统的精确度水平。如果发现某些特定条件下存活几率特别高或者低,则可进一步挖掘背后隐藏的故事线索进而优化整个流程体系。 --- ### 总结 综上所述,尽管标准库并不完全提供原生版本的支持,但我们依然能够巧妙借用现有工具达成近似目的—即针对给定历史记录资料执行有效的二元判定任务!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值