当前位置: 首页 > news >正文

数据挖掘 决策树

# 编码声明,并不是注释,而是一种特殊的源文件指令,用于指定文件的字符编码格式
# -*- 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"可能指代硬性隐形眼镜或硬性眼镜镜片。

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

http://www.lryc.cn/news/231427.html

相关文章:

  • “技能兴鲁”职业技能大赛-网络安全赛项-学生组初赛 WP
  • [Android]修改应用包名、名称、版本号、Icon以及环境判断和打包
  • 基于风驱动算法优化概率神经网络PNN的分类预测 - 附代码
  • 安全计算环境(设备和技术注解)
  • 【Hello Go】Go语言函数
  • docker小技能:容器IP和宿主机IP一致( Nacos服务注册ip为内网ip,导致Fegin无法根据服务名访问 )
  • Android笔记:震动实现
  • CSDN每日一题学习训练——Java版(二叉搜索树迭代器、二叉树中的最大路径和、按要求补齐数组)
  • WPF中有哪些布局方式和对齐方法
  • 【2012年数据结构真题】
  • k8s_base
  • 2023年亚太杯APMCM数学建模大赛数据分析题MySQL的使用
  • 自学SLAM(8)《第四讲:相机模型与非线性优化》作业
  • STL—next_permutation函数
  • Mysql 三种不使用索引的情况
  • Ladybug 全景相机, 360°球形成像,带来全方位的视觉体验
  • centos 6.10 安装swig 4.0.2
  • mask: rle, polygon
  • 【JMeter】JMeter压测过程中遇到Non HTTP response code错误解决方案
  • 【Kingbase FlySync】评估工具安装及使用
  • pandas教程:Data Aggregation 数据聚合
  • 开启创造力之门:掌握Vue中Slot插槽的使用技巧与灵感
  • 【算法练习Day48】回文子串最长回文子序列
  • ubuntu下C++调用matplotlibcpp进行画图(超详细)
  • 芯科科技推出新的8位MCU系列产品,扩展其强大的MCU平台
  • Flink CDC
  • 数据结构-链表的简单操作代码实现3-LinkedList【Java版】
  • JTS: 24 MinimumDiameter 最小矩形
  • MacOS Ventura 13 优化配置(ARM架构新手向导)
  • 多区域OSPF配置