决策树——中文版

决策树思路:

创建树:

获取所有样本的标签列表
如果 标签列表为同一个值:
    停止划分
如果 特征选择完毕:
    返回类别最多的标签,停止划分
选择最好的特征进行数据样本的分割,并且返回该特征的索引值:就是第几个特征-----------(1)
获取到最好特征的特征名字
创建以该名字为节点的树字典
在特征名称列表中将这个特征删除
获取最好特征在整体样本中的取值并且去重
遍历所有取值:
    获取剩余特征名字
    创建以每个值划分的数据集的树-------(2)

(1)选择最好特征并且返回特征索引:

获取数据集的特征的数量
计算整个数据集的信息熵   // H(D)
初始化信息增益和最好特征索引
遍历所有特征:
    该特征在数据集上所有取值并去重
    初始化新的信息熵
    遍历该特征在数据集上的取值:              // 选取该特征所取最好的值(按照此值进行切分的信息增益最大)进行数据的划分
        给定特征以及该值进行数据划分 ----------(2)
        计算在给定特征条件下的信息熵----(3) // H(D|A) = (数据切分后的个数 / 总的数据集的个数)* 数据切分后的信息熵
        计算信息增益
        如果 用该值分割数据的信息增益大于上一个值分割数据的信息增益:
            更新信息增益
            更新最好特征索引
返回最好特征索引

(2)按照给定值以及特征索引进行数据的切分

生成一个切分后的数据list
遍历所有样本:
    如果 该样本[特征索引] == 给定值
        获取该索引前面的值
        拼接上该索引后面的值,不包含该索引的值
        将分割后的数据添加到切分后的数据list
返回切分后的数据

(3)计算信息熵:

获取该样本的数量
初始化一个字典,用来统计
遍历所有样本:
    获取到该样本向量的最后面值
    如果 该值不在字典的key中:
        添加进去,并把值赋为0
    将字典中的key等于该值的值+1
初始化信息熵
遍历字典的key:
    获取当前key的概率(数量/总量)
    计算信息熵
返回信息熵   
决策树模型是一种常用的分类算法,可以用于鸢尾花分类。剪枝是为了解决过拟合问题而进行的一种策略。在剪枝之前和剪枝之后,我们可以通过交叉验证来评估模型的正确率。 下面是一个示例代码,演示了使用决策树模型对鸢尾花数据集进行分类,并比较了剪枝前后的正确率: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 构造决策树模型(剪枝前) clf_before_pruning = DecisionTreeClassifier() clf_before_pruning.fit(X_train, y_train) # 预测并计算剪枝前的正确率 y_pred_before_pruning = clf_before_pruning.predict(X_test) accuracy_before_pruning = accuracy_score(y_test, y_pred_before_pruning) # 构造决策树模型(剪枝后) clf_after_pruning = DecisionTreeClassifier(ccp_alpha=0.1) # ccp_alpha为剪枝参数 clf_after_pruning.fit(X_train, y_train) # 预测并计算剪枝后的正确率 y_pred_after_pruning = clf_after_pruning.predict(X_test) accuracy_after_pruning = accuracy_score(y_test, y_pred_after_pruning) print("剪枝前的正确率:", accuracy_before_pruning) print("剪枝后的正确率:", accuracy_after_pruning) ``` 运行以上代码,可以得到剪枝前和剪枝后的正确率。剪枝后的正确率可能会有所下降,但剪枝可以减少过拟合问题,提高模型的泛化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值