数据挖掘 决策树

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"可能指代硬性隐形眼镜或硬性眼镜镜片。

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

相关推荐
静静AI学堂31 分钟前
Yolo11改策略:卷积改进|SAC,提升模型对小目标和遮挡目标的检测性能|即插即用
人工智能·深度学习·目标跟踪
dundunmm44 分钟前
机器学习之PCA降维
机器学习·信息可视化·数据挖掘·数据分析
martian6651 小时前
【人工智能离散数学基础】——深入详解数理逻辑:理解基础逻辑概念,支持推理和决策系统
人工智能·数理逻辑·推理·决策系统
Schwertlilien1 小时前
图像处理-Ch7-图像金字塔和其他变换
图像处理·人工智能
凡人的AI工具箱1 小时前
每天40分玩转Django:Django类视图
数据库·人工智能·后端·python·django·sqlite
千天夜1 小时前
深度学习中的残差网络、加权残差连接(WRC)与跨阶段部分连接(CSP)详解
网络·人工智能·深度学习·神经网络·yolo·机器学习
凡人的AI工具箱1 小时前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django
小军军军军军军1 小时前
MLU运行Stable Diffusion WebUI Forge【flux】
人工智能·python·语言模型·stable diffusion
诚威_lol_中大努力中2 小时前
关于VQ-GAN利用滑动窗口生成 高清图像
人工智能·神经网络·生成对抗网络
中关村科金2 小时前
中关村科金智能客服机器人如何解决客户个性化需求与标准化服务之间的矛盾?
人工智能·机器人·在线客服·智能客服机器人·中关村科金