pydotplus的安装、基本入门和决策树的可视化
off999 2024-10-10 07:49 35 浏览 0 评论
1 说明
=====
1.1 pydotplus是旧pydot项目的一个改进版本,它为graphviz的点语言提供了一个python接口。
1.2 复习一下:
1.2.1 pydot已经淘汰了,不再更新了。
1.2.2 Dot是开源工具包Graphviz上用来画图的一门脚本语言,本次不介绍了。
1.3 提到基本绘制图形,dot语法类似,泰坦尼克号决策树的可视化;讲解清楚,注释仔细,通俗易懂,适合收藏。
2 介绍
=====
2.1 官网:
https://pydotplus.readthedocs.io/
https://github.com/carlos-jenkins/pydotplus2.2 安装:
pip install pydotplus
#本机安装
sudo pip3.8 install pydotplus2.3 有时候可能需要安装graphviz:
pip install graphviz  #注意环境变量设置3 效果展示
========
3.1 入门级图1
3.2 图1代码:
import pydotplus as pdp
#方法一,单引号
#graph = pdp.graph_from_dot_data('digraph demo1{a -> b -> c; c ->a; }')
#方法二,双引号
graph = pdp.graph_from_dot_data(
    '''
        digraph demo1{
            a -> b -> c; c ->a; }
     '''
     )
#生成jpg图片
#graph.write_jpg('/home/xgj/Desktop/pydotplus/3dot.jpg')
#生成png图片
graph.write_png('/home/xgj/Desktop/pydotplus/3dot.png')
#生成pdf文件
#graph.write_pdf('/home/xgj/Desktop/pydotplus/3dot.pdf')3.3 图2
3.4 图2代码
import pydotplus as pdp
#语法符合原dot语法
dot = '''
//定义节点属性
  digraph g {
      //==========定义节点关系============
      a->b;
      b->c;
      c->a;
      c->d->e->f;
      d->g;
      e->h;
      //==========定义节点属性============
      //定义a节点为长方形, 样式为填充, 填充颜色为#ABACBA
      a[shape=box,label="Server1\nWebServer",fillcolor="#ABACBA",style=filled];
      //定义b为5边形, 标签为"bb", 样式为填充, 填充色为red
      b[shape=polygon,sides=5,label="bb",style=filled,fillcolor=red];
      //c, 默认为椭圆
      d[shape=circle,label="加油",fontname="Microsoft YaHei"]; //圆
      e[shape=triangle]; //三角形
      f[shape=polygon, sides=4, skew=0.5]; //平行四边形
      g[shape=polygon, distortion=0.5]; //梯形, 上边长
      h[shape=polygon, distortion=-.5]; //梯形, 下边长
  }
'''
graph = pdp.graph_from_dot_data(dot)
graph.write_jpg('/home/xgj/Desktop/pydotplus/4dot.jpg')3.5 图3
3.6 图3代码:
import pydotplus as pdp
dot_cn = """
    digraph demo{
        node [shape=box, style="rounded", color="black", fontname="Microsoft YaHei"];
        edge [fontname="Microsoft YaHei"];
        a -> b[label="哈尼"]
        a[label="你好么?"]
        b[label="我很好!"]
        }
    """
graph = pdp.graph_from_dot_data(dot_cn)
graph.write_jpg('/home/xgj/Desktop/pydotplus/5dot.jpg')4 泰坦尼克号的决策树
=================
4.1 效果图
4.2 注意
======
4.2.1 决策树是机器学习中一个比较重要而且常用的算法, 是基于香农的信息论计算信息熵然后计算信息增益。
4.2.2 参考文章:
#https://blog.csdn.net/qq_42768234/article/details/99453826?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.add_param_isCf4.2.3 数据集:打开网页,复制,并修改txt为csv
http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt4.3 代码:
import numpy as np
import pandas as pd
file_path = "/home/xgj/Desktop/pydotplus/titanic.csv"
data = pd.read_csv(file_path)
data["age"].isnull().sum()  # 年龄有680个缺失值
x = data[["pclass", "age", "sex"]]
y = data["survived"]
x["age"].fillna(x["age"].mean(), inplace=True)  # 用平均年龄来填充缺失值
from sklearn.model_selection import train_test_split  # 导入数据集分割
from sklearn.feature_extraction import DictVectorizer  # 导入特征工程
from sklearn.tree import DecisionTreeClassifier  # 导入决策树分类器
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)  # 分割数据
info = DictVectorizer(sparse=False)  # 特征工程
x_train = info.fit_transform(x_train.to_dict(orient="records"))
x_test = info.fit_transform(x_test.to_dict(orient="records"))
dec = DecisionTreeClassifier(max_depth=5)
dec.fit(x_train, y_train)
dec.score(x_test, y_test)
dec.predict(x_test[0: 1])  # 进行测试预测
from sklearn import tree
import pydotplus  # 可视化
dot_data = tree.export_graphviz(dec, out_file=None,
                        filled=True, rounded=True,
                        special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.get_nodes()[7].set_fillcolor("#FFF2DD")
graph.write_png("/home/xgj/Desktop/pydotplus/graph7.png")
5 加载sklearn自身数据集
===================
5.1 效果图
5.2 参考文章
#https://blog.csdn.net/qq_39290225/article/details/99684091?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-4.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-4.add_param_isCf5.3 代码
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
wine=load_wine()#集合自身的数据集
Xtrain,Xtest,Ytrain,Ytest=train_test_split(wine.data,wine.target,test_size=0.3)
#训练
clf=tree.DecisionTreeClassifier(criterion='entropy')
clf=clf.fit(Xtrain,Ytrain)
#查看一下准确度
score=clf.score(Xtest,Ytest)
f_name=['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','稀释葡萄酒','脯氨酸']
dot_data=tree.export_graphviz(clf
                              ,feature_names=f_name
                              ,class_names=['茅台','啤酒','黄酒']
                              ,filled=True
                              ,rounded=True,
                              out_file=None
                             )
import pydotplus  # 可视化
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_png("/home/xgj/Desktop/pydotplus/graph8.png")
6 加载自身数据集、生成dot文件和决策树
===============================
6.1 图
6.2 代码:
#参考文章
#https://www.jianshu.com/p/59b510bafb4d
from sklearn import tree
from sklearn.datasets import load_iris
#导入数据集
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
#生成dot文件
with open("/home/xgj/Desktop/pydotplus/iris.dot", 'w') as f:
    f = tree.export_graphviz(clf, out_file=f)
#决策树pydotplus可视化
import pydotplus 
dot_data = tree.export_graphviz(clf, out_file=None) 
graph = pydotplus.graph_from_dot_data(dot_data) 
graph.write_png("/home/xgj/Desktop/pydotplus/iris.png") 7 彩蛋
=====
7.1 dot文件可视化两种方法:
7.2 方法一:终端执行dot语法,dot文件在根目录下
dot -Tpng -o world.png world.dot7.3 方法二:python代码sklearn,并熟悉xy向量
7.3.1 图
7.3.2 代码
#用决策树建模
import sklearn.tree as tree
from sklearn.tree import DecisionTreeRegressor
import numpy as np
clf=tree.DecisionTreeRegressor(min_samples_split=50,max_leaf_nodes=15)
'''
DecisionTreeClassifier 能够实现多类别的分类。输入两个向量
向量X,大小为[n_samples,n_features],用于记录训练样本;
向量Y,大小为[n_samples],用于存储训练样本的类标签。
'''
#产生随机数据集和xy向量
rng = np.random.RandomState(1)
x = np.sort(5 * rng.rand(80, 1), axis=0)
y = np.sin(x).ravel()
y[::5] += 3 * (0.5 - rng.rand(16))
#熟悉fit
clf_fit=clf.fit(x,y)
#打开dot文件
tree.export_graphviz(clf_fit,out_file="/home/xgj/Desktop/yhsj/world.dot"  )
import pydotplus 
dot_data = tree.export_graphviz(clf_fit, out_file=None, filled=True, rounded=True, 
special_characters=True) 
graph = pydotplus.graph_from_dot_data(dot_data) 
graph.write_jpg('/home/xgj/Desktop/yhsj/dot.jpg')小结
基本从简单到复制,难点在clf.fit(x,y)。
相关推荐
- 阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?
 - 
        
TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...
 
- 高流量大并发Linux TCP性能调优_linux 高并发网络编程
 - 
        
其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...
 
- 性能测试100集(12)性能指标资源使用率
 - 
        
在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...
 
- Linux 服务器常见的性能调优_linux高性能服务端编程
 - 
        
一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...
 
- Nginx性能优化实战:手把手教你提升10倍性能!
 - 
        
关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...
 
- 高并发场景下,Spring Cloud Gateway如何抗住百万QPS?
 - 
        
关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...
 
- Kubernetes 高并发处理实战(可落地案例 + 源码)
 - 
        
目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...
 
- 高并发场景下,Nginx如何扛住千万级请求?
 - 
        
Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...
 
- Spring Boot+Vue全栈开发实战,中文版高清PDF资源
 - 
        
SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...
 
- Docker-基础操作_docker基础实战教程二
 - 
        
一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...
 
- 你有空吗?跟我一起搭个服务器好不好?
 - 
        
来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...
 
- 部署你自己的 SaaS_saas如何部署
 - 
        
部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...
 
- Docker Compose_dockercompose安装
 - 
        
DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...
 
- 京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统
 - 
        
前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...
 
- Kubernetes (k8s) 入门学习指南_k8s kubeproxy
 - 
        
Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...
 
欢迎 你 发表评论:
- 一周热门
 - 
                    
- 
                            
                                                                
抖音上好看的小姐姐,Python给你都下载了
 - 
                            
                                                                
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
 - 
                            
                                                                
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
 - 
                            
                                                                
python入门到脱坑 输入与输出—str()函数
 - 
                            
                                                                
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
 - 
                            
                                                                
Python三目运算基础与进阶_python三目运算符判断三个变量
 - 
                            
                                                                
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
 - 
                            
                                                                
慕ke 前端工程师2024「完整」
 - 
                            
                                                                
失业程序员复习python笔记——条件与循环
 - 
                            
                                                                
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
 
 - 
                            
                                                                
 
- 最近发表
 
- 标签列表
 - 
- python计时 (73)
 - python安装路径 (56)
 - python类型转换 (93)
 - python进度条 (67)
 - python吧 (67)
 - python的for循环 (65)
 - python格式化字符串 (61)
 - python静态方法 (57)
 - python列表切片 (59)
 - python面向对象编程 (60)
 - python 代码加密 (65)
 - python串口编程 (77)
 - python封装 (57)
 - python写入txt (66)
 - python读取文件夹下所有文件 (59)
 - python操作mysql数据库 (66)
 - python获取列表的长度 (64)
 - python接口 (63)
 - python调用函数 (57)
 - python多态 (60)
 - python匿名函数 (59)
 - python打印九九乘法表 (65)
 - python赋值 (62)
 - python异常 (69)
 - python元祖 (57)
 
 
