《机器学习(周志华)》 习题4.3答案

问题:编程实现基于信息熵(信息增益)进行划分进行划分选择的决策树算法,并为表4.3(西瓜数据集3.0)中数据生成一棵决策树。

代码生成结果与书本结果基本一致,唯有(触感=硬滑)和(触感=软粘)时我的答案分别是(坏瓜)和(好瓜),而书本答案恰好相反。这里应为书本错误,因为根据数据人肉眼判定,稍糊硬滑的数据都为否,稍糊软粘数据都为是。如果有和我结论不一致的同学,欢迎指正!感谢ICS_的指出,在周老师的主页勘误表里已经修改此处错误,第一版第五次印刷及以后的书应该都没有此问题。

数据为中文,所以由中文编码问题导致很多trick,部分已在代码中指出。

python代码如下:

#coding: utf-8 
import math

class Node:
	def __init__(self, divided_by=None, condition=None, sons=[], label=None):
		self.divided_by = divided_by # node is divided by this, None if it
在编程中,尤其是机器学习领域,基于信息熵(Entropy)的决策树算法主要是ID3(Iterative Dichotomiser 3)和C4.5算法的基础。这里我会概述一个简单的步骤: 1. **信息熵计算**:首先,你需要计算每个特征的信息熵。对于分类问题,信息熵越高,表示该特征对于区分类别越不确定。 2. **特征选择**:选择信息熵最大的特征作为当前节点的分裂依据,将数据集划分为两个子集,每个子集对应该特征的一个取值。 3. **递归过程**:对每个子集继续应用同样的过程,直到满足停止条件,比如子集内的所有实例属于同一类别,或者达到最大深度等。 4. **构建树结构**:形成一个决策树,其中每个内部节点表示一个特征,分支表示该特征的不同取值,叶节点代表最终的类别预测。 对于表4.3的数据,由于没有具体的数值和列名,我无法直接为你生成决策树。通常需要实际数据导入到编程环境中,如Python的`sklearn.tree`库就可以实现这个功能。以下是一个基本示例(假设你有一个名为`df`的DataFrame): ```python from sklearn import tree import pandas as pd # 确保数据已经预处理并编码为适合决策树的格式 X = df.drop('target_column', axis=1) # 特征列 y = df['target_column'] # 目标列 clf = tree.DecisionTreeClassifier(criterion='entropy') # 使用信息熵作为划分标准 clf.fit(X, y) # 输出决策树模型 tree.export_graphviz(clf, out_file="tree.dot", feature_names=X.columns) ``` 这将生成一个名为"tree.dot"的文件,你可以用Graphviz工具将其转换成可视化图。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值