决策树实例之预测隐形眼镜类型

本文通过一个关于预测患者所需隐形眼镜类型的实例,详细讲解了决策树算法的应用过程。从数据收集、解析到决策树的创建与测试,展示了如何利用决策树进行分类预测。文章还讨论了决策树可能产生的过度匹配问题及解决策略。

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

本节我们将通过一个例子讲解决策树如何预测患者需要佩戴的隐形眼镜类别,使用小数据集,我们就可以利用决策树学到很多知识

使用决策树预测隐形眼镜类型
收集数据:提供的文本文件
准备数据:解析tab键分隔的数据行
分析数据:快速检查数据,确保正确地解析数据内容,使用createPlot()函数绘制最终的树形图
训练算法:使用上个博客的createTree()函数
测试算法:编写测试函数验证决策树可以正确分类给定的数据实例
使用算法:存储树的数据结构,以便下次使用时无需重新构造树。
fr=open("data/3.DecisionTree/lenses.txt")
lenses=[inst.strip().split("\t")for inst in fr.readlines()]
lensesLabels=["age","prescript","astigmatic","tearRate"]
lensesTree=trees.createTree(lenses,lensesLabels)
lensesTree

输出文本格式,所以要能看出树状结构就是用绘图工具去绘制出来

借用书上的,这里不再实现

本章小结

决策树分类器就像带有终止块的流程图,终止块表示分类结果。开始处理数据集时,我们首
先需要测量集合中数据的不一致性,也就是熵,然后寻找最优方案划分数据集,直到数据集中的
所有数据属于同一分类。ID3算法可以用于划分标称型数据集。构建决策树时,我们通常采用递
归的方法将数据集转化为决策树。一般我们并不构造新的数据结构,而是使用Python语言内嵌的
数据结构字典存储树节点信息。
使用Matplotlib的注解功能,我们可以将存储的树结构转化为容易理解的图形。Python语言的
pickle模块可用于存储决策树的结构。隐形眼镜的例子表明决策树可能会产生过多的数据集划分,
从而产生过度匹配数据集的问题。我们可以通过裁剪决策树,合并相邻的无法产生大量信息增益
的叶节点,消除过度匹配问题。
还有其他的决策树的构造算法,最流行的是C4.5和CART,在讨论回归问题时将介绍CART
算法。
本节讨论的是结果确定的分类算法,数据实例最终会被明确划分到某个分类中。
下一章我们讨论的分类算法将不能完全确定数据实例应该划分到某个分类,或者只能给出数据实
例属于给定分类的概率。

### 使用决策树进行隐形眼镜类型预测的机器学习实战案例 #### 数据准备 为了构建一个能够预测隐形眼镜类型决策树模型,首先需要准备好相应的数据集。此过程涉及读取并处理来自文件的数据。 ```python with open('lenses.txt', 'r') as fr: lenses = [inst.strip().split('\t') for inst in fr.readlines()] print(lenses) lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate'] ``` 上述代码片段展示了如何打开名为 `lenses.txt` 的文件,并将其内容按行分割成列表形式存储起来[^5]。每一行代表一位患者的信息,而这些信息被进一步按照制表符分隔开。最后定义了一个标签列表 `lensesLabels` 来描述各个特征名称。 #### 构建决策树模型 接下来就是利用 Scikit-Learn 库中的 `DecisionTreeClassifier` 类来创建决策树分类器实例,并通过给定的数据对其进行训练。 ```python from sklearn import tree clf = tree.DecisionTreeClassifier() clf.fit(X_train, y_train) ``` 这里假设已经完成了对原始数据的预处理工作(例如转换字符串为数值),并将输入变量 X 和目标变量 Y 分离出来作为训练参数传递给 fit 方法完成模型拟合操作[^1]。 #### 可视化决策树结构 为了让使用者更直观地理解所建立的决策逻辑,在 Sklearn 中还提供了一项功能叫做 export_graphviz ,它可以把生成好的决策路径导出成为图形化的表达方式以便观察分析。 ```python import graphviz dot_data = tree.export_graphviz(clf, out_file=None, feature_names=lensesLabels, class_names=['hard','soft','no'], filled=True, rounded=True, special_characters=True) graph = graphviz.Source(dot_data) graph.render("lenses") # 输出为 PDF 文件 ``` 这段脚本会调用 GraphViz 工具包绘制一棵基于之前训练所得的结果展示出来的决策流程图,并保存至当前目录下命名为 "lenses.pdf"。 #### 测试与评估性能 当一切就绪之后就可以开始检验这个新造出来的工具到底有多好用了! ```python predictions = clf.predict(X_test) accuracy_score(y_true=y_test, y_pred=predictions) ``` 此处先是对一批未知样本进行了预测尝试;紧接着计算其准确性得分以衡量整体表现情况。当然还可以考虑采用交叉验证等手段获取更加稳健可靠的评价指标[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值