数据挖掘 决策树

python 复制代码
# 编码声明,并不是注释,而是一种特殊的源文件指令,用于指定文件的字符编码格式
# -*- coding: utf-8 -*-

import pandas as pd  # 提供了DataFrame等数据结构
from sklearn.tree import DecisionTreeClassifier, export_graphviz  # 决策树分类器和可视化决策树的模块
from sklearn.model_selection import train_test_split  # 划分训练集和测试集
from sklearn.feature_extraction import DictVectorizer  # 将字典形式的特征转换成向量形式

# 读入并选择
data = pd.read_csv("lenses.txt", encoding="gbk", sep="\t")
features = data[['age', 'prescript', 'astigmatic', 'tearRate']]  # 使用两层括号是为了创建一个包含多个列名的列表
targets = data['eye_types']
# 获取所有属性的同步属性值的名字
feature_name = []
# 遍历 features 数据框的每一列,对每一列的 unique 值进行提取,并将这些 unique 值添加到 feature_name 列表中
features.apply(lambda x: feature_name.extend(x.unique()), axis=0)

# 特征提抽取one-hot编码
vect = DictVectorizer()  # 将字典数据转换为特征矩阵,如果某个样本缺少某个特征,会用默认值(通常为0)进行填充,形成稀疏矩阵。
# 生成一个列表,其中每个元素是一个字典,字典的键是列名,值是对应行的值。	
features = vect.fit_transform((features.to_dict(orient="records")))

# 划分数据集
# 训练集特征数据赋值给 X_train,测试集特征数据赋值给 X_test,训练集目标数据赋值给 y_train,测试集目标数据赋值给 y_test
X_train, X_test, y_train, y_test = train_test_split(features, targets, test_size=0.25)

# #构建模型
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
score = clf.score(X_test, y_test)
print(f"决策树模型的分类准确率为{score:.3f}")

# 将模型保存至dot文件
with open("tree_model.dot", 'w') as f:
    f = export_graphviz(clf, out_file=f, feature_names=feature_name, class_names=targets.unique())

# #将模型输出至目标文件
# import os
# os.system(f"dot -Tpng {'tree_model.dot'} -o {'tree_model'}.jpg")

from sklearn.datasets import load_iris
from sklearn import tree
import graphviz

# ----------------数据准备----------------------------
iris = load_iris()  # 加载数据

# ---------------模型训练----------------------------------
clf = tree.DecisionTreeClassifier()  # sk-learn的决策树模型
clf = clf.fit(iris.data, iris.target)  # 用数据训练树模型构建()
r = tree.export_text(clf, feature_names=iris['feature_names'])
dot_data = tree.export_graphviz(clf, out_file=None,
                                feature_names=iris.feature_names,
                                class_names=iris.target_names,
                                filled=True, rounded=True,
                                special_characters=True)
graph = graphviz.Source(dot_data)  # 将存储在 dot_data 中的图形数据加载到对象中
graph  # 显示图形。(如果没显示,则需要独立运行这一句)
# graph.render("iris") #将图形保存为iris.pdf文件。
# graph.view()        # 直接打开pdf文件展示

# 关于使用的文件编码:
#     GBK编码主要用于简化汉字编码,通常在中国大陆被使用。如果你确定你的文本数据是中文并且使用了GBK编码,那么使用GBK编码是合适的。
#     但是如果你不确定数据的编码方式,或者数据中包含多种语言的字符,那么使用UTF-8编码会更加安全,因为它是一种通用的、兼容性很好的编码方式,能够支持几乎所有的字符和符号,并且在全球范围内被广泛应用。

# 每次运行准确度差距较大,主要是因为数据量太小

# 熵(entropy)是用来衡量一个随机变量的不确定性的度量,如果计算出的熵值较高,表示该数据集的不确定性也较高;而熵值较低则表示数据集的不确定性较低,即包含的信息量较少。

# "tearRate"特征是指眼泪流失率(tear rate),用于描述眼睛的泪液排出速度或眼泪的分泌量。
# "soft"通常指代软性隐形眼镜或软性眼镜镜片,而"hard"可能指代硬性隐形眼镜或硬性眼镜镜片。

如果不能生成决策树图片,可以参考这篇文章

相关推荐
skywalk81634 分钟前
经过多次尝试,在kaggle 双T4训练Qwen2.5-0.5B的正确打开方式是:
人工智能·深度学习·机器学习·qwen2.5·段言
孪生质数-15 分钟前
AI Agent 工程实践(一):大模型 API 接入示范
网络·人工智能·ai·chatgpt·github·claude·claudecode
qq_4195630918 分钟前
机器能思考吗?“——图灵测试、达特茅斯会议与 AI 的诞生
人工智能
维核科技21 分钟前
世界模型落地:物理 AI 方案走向商用,机器人“理解“物理世界
人工智能
神神道呵he23 分钟前
[深度学习] 大模型学习-RAG技术全景解析
人工智能·深度学习·学习
deepseek2327 分钟前
750 亿参数只激活 37 亿:LG 开源 K-EXAONE 2.0,与 DeepSeek 的路线之争迎来新玩家
人工智能·ai agent·mcp
AI街潜水的八角32 分钟前
菌落微生物检测和识别2:基于深度学习YOLO26神经网络实现菌落微生物检测和识别(含训练代码和数据集)
人工智能·深度学习·神经网络
weixin_4462608537 分钟前
ORCA-bench:大模型智能体能否胜任线上故障值守?
人工智能
fthux42 分钟前
装闭 RenoPit 源码解析(13):生成AI装修闭坑PDF报告
人工智能·ai·pdf·开源·github
独行侠影a1 小时前
Mojo:专为AI而生的“Python++”,能否真正挑战CUDA与C++的统治地位?
大数据·人工智能·深度学习