【机器学习】通俗易懂决策树(实战篇)python实现(为新患者找到合适的药物)

2023-11-09

决策树

我们将学习一种更流行的机器学习算法——决策树,我们将使用此算法从患者的历史数据以及他们对不同药物的反应大数据中,用训练过的决策树来构建分类模型预测未知患者的类别,或者说为新患者找到合适的药物。

导入以下包

  • numpy (as np)
  • pandas
  • DecisionTreeClassifier from sklearn.tree
import sys
import numpy as np 
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import sklearn.tree as tree

数据集的说明

假设你是一名医学研究院,收集了一组患有相同疾病患者的数据。在这些患者的治疗过程中,每位患者会对5种药物种的一种做出反应:A、B、C、X、Y。

你的一部分工作是建立一个模型,找出那种药物可能适合未来患有相同疾病的患者。这个数据集的几个指标(特征)是患者的年龄、性别、血压和胆固醇,标签是每个患者反应的药物。

这个数据是一个多分类器的样本,我们用训练集来构建决策树,然后用它来预测未知患者的类别,也就是为患者开药。

下载数据

点我下载

读取数据

my_data = pd.read_csv("drug200.csv", delimiter=",")
my_data[0:5]
Age Sex BP Cholesterol Na_to_K Drug
0 23 F HIGH HIGH 25.355 drugY
1 47 M LOW HIGH 13.093 drugC
2 47 M LOW HIGH 10.114 drugC
3 28 F NORMAL HIGH 7.798 drugX
4 61 F LOW HIGH 18.043 drugY

数据的大小

my_data.shape
(200, 6)

数据预处理

my_data 作为 Drug.csv 的数据,声明以下变量:

  • X 特征矩阵(Feature Matrix)
  • y 响应向量(response vector)

把目标列的名称给删了。

X = my_data[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].values
X[0:5]

array([[23, 'F', 'HIGH', 'HIGH', 25.355],
       [47, 'M', 'LOW', 'HIGH', 13.093],
       [47, 'M', 'LOW', 'HIGH', 10.113999999999999],
       [28, 'F', 'NORMAL', 'HIGH', 7.797999999999999],
       [61, 'F', 'LOW', 'HIGH', 18.043]], dtype=object)

你可能会发现,此数据集中的某些特征是分类的,例如 SexBP。 不幸的是,Sklearn 决策树不处理分类变量。 我们仍然可以使用 pandas.get_dummies() 将这些特征转换为数值
将分类变量转换为虚拟/指标变量。

from sklearn import preprocessing
le_sex = preprocessing.LabelEncoder()
le_sex.fit(['F','M'])
X[:,1] = le_sex.transform(X[:,1]) 


le_BP = preprocessing.LabelEncoder()
le_BP.fit([ 'LOW', 'NORMAL', 'HIGH'])
X[:,2] = le_BP.transform(X[:,2])


le_Chol = preprocessing.LabelEncoder()
le_Chol.fit([ 'NORMAL', 'HIGH'])
X[:,3] = le_Chol.transform(X[:,3]) 

X[0:5]

array([[23, 0, 0, 0, 25.355],
       [47, 1, 1, 0, 13.093],
       [47, 1, 1, 0, 10.113999999999999],
       [28, 0, 2, 0, 7.797999999999999],
       [61, 0, 1, 0, 18.043]], dtype=object)

把因变量给提出来

y = my_data["Drug"]
y[0:5]
0    drugY
1    drugC
2    drugC
3    drugX
4    drugY
Name: Drug, dtype: object

构建决策树

让我们从 sklearn.cross_validation 导入train_test_split,来拆分训练集和测试集。

from sklearn.model_selection import train_test_split

train_test_split 将返回 4 个不同的参数。 我们将它们命名为:

X_trainset, X_testset, y_trainset, y_testset


train_test_split 需要以下参数:

X, y, test_size=0.3, and random_state=3.


X 和 y 是拆分前需要的数组,test_size 表示测试数据集的比例,random_state 确保我们获得相同的拆分。

X_trainset, X_testset, y_trainset, y_testset = train_test_split(X, y, test_size=0.3, random_state=3)

打印训练集和测试集的大小。 确保大小匹配。

print('Shape of X training set {}'.format(X_trainset.shape),'&',' Size of Y training set {}'.format(y_trainset.shape))

Shape of X training set (140, 5) &  Size of Y training set (140,)
print('Shape of X training set {}'.format(X_testset.shape),'&',' Size of Y training set {}'.format(y_testset.shape))

Shape of X training set (60, 5) &  Size of Y training set (60,)

构建模型

我们将首先创建一个 DecisionTreeClassifier的实例,称为 drugTree.
在分类器内部,指定 criterion="entropy" ,这样我们就可以看到每个节点的信息增益。
drugTree = DecisionTreeClassifier(criterion="entropy", max_depth = 4)
drugTree # it shows the default parameters
DecisionTreeClassifier(criterion='entropy', max_depth=4)

接下来,我们将使用训练特征矩阵 X_trainset 和训练响应向量 y_trainset 对数据进行拟合

drugTree.fit(X_trainset,y_trainset)
DecisionTreeClassifier(criterion='entropy', max_depth=4)

预测表

让我们在测试数据集中做一些 预测,并将其存储到一个名为 predTree的变量中。
predTree = drugTree.predict(X_testset)

如果希望直观地比较预测与实际值,可以打印出predTreey_testset

print (predTree [0:5])
print (y_testset [0:5])

['drugY' 'drugX' 'drugX' 'drugX' 'drugX']
40     drugY
51     drugX
139    drugX
197    drugX
170    drugX
Name: Drug, dtype: object

评估

接下来,让我们从sklearn导入 metrics,并检查我们的模型的准确性。
from sklearn import metrics
import matplotlib.pyplot as plt
print("DecisionTrees's Accuracy: ", metrics.accuracy_score(y_testset, predTree))
DecisionTrees's Accuracy:  0.9833333333333333

准确率分类分数计算子集的准确率:为一个样本预测的标签集必须精确匹配y_true中对应的标签集。

在多标签分类中,函数返回子集精度。 如果样本的整个预测标签集与真实标签集严格匹配,则子集精度为1.0; 否则为0.0。


可视化

让我们来可视化这棵树

# Notice: You might need to uncomment and install the pydotplus and graphviz libraries if you have not installed these before
#!conda install -c conda-forge pydotplus -y
#!conda install -c conda-forge python-graphviz -y
tree.plot_tree(drugTree)
plt.show()

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【机器学习】通俗易懂决策树(实战篇)python实现(为新患者找到合适的药物) 的相关文章

随机推荐

  • qt,设置窗体的颜色和样式

    在 Qt 中 可以使用 QPalette 类来设置窗体的颜色和样式 具体步骤如下 创建一个 QPalette 对象 使用 QColor 类来设置颜色 例如 QColor color 255 255 255 设置为白色 使用 QPalette
  • GD32E103首次烧写程序后J-link无法识别的解决方法

    原因 用的例程的时钟配置与电路板所用晶振频率不一致 导致第一次能识别单片机 烧写程序后 无法再次识别 解决方法 使用J Flash擦除 具体步骤 1 建立Falsh工程 此时BOOT0 0 如果不是复位状态 则无法连接目标板 此时需要将RE
  • 使用openssl命令方式生成公钥、私钥、证书

    以下是在 Windows 环境下使用 OpenSSL 命令生成这些文件的步骤 生成私钥 打开命令提示符 并导航到您希望保存私钥文件的目录 然后执行以下命令以生成私钥文件 例如 private key openssl genpkey algo
  • Java8 函数式编程

    函数式编程 这里 函数 应该理解为数学上的函数 即y f x 函数式编程的理解出发点 比如给Swing中Button添加监听器addListener Listener接口 为例 没有lambda表达式时一般都是通过匿名内部类new XXXL
  • JavaScript笔记_this指向

    this 指向问题 普通函数的this由调用规则来确定 而箭头函数的的this 本身没有this 取决于父作用域的this 代码执行后 箭头函数取决于父级作用域的this 只跟随父作用域的this改变而改变 普通函数的this取决于调用方式
  • Tomcat 无法访问,未发送任何数据

    问题描述 直接上图 解决 开启的Tomcat 的cmd窗口不要关闭 访问localhost 8080 试试 8080接口被其它服务占用了 修改8080接口 不要修改为1 1023端口和常用端口3306等 首先关闭Tomcat 双击shutd
  • 【Java】Java基础习题1

    这里写目录标题 1 编译Java应用程序源文件将产生相应的字节码文件 字节码文件的扩展名为 2 Java源程序文件的扩展名为 3 编译Java源代码 java 文件的工具为 4 执行Java字节码 class 文件的工具为 5 main方法
  • Spring Security的十一个拦截器

    目录 一 SecurityContextPersistenceFilter 二 LogoutFilter 三 AbstractAuthenticationProcessingFilter 四 DefaultLoginPageGenerati
  • 基于PaddleOCR的DBNet多分类文本检测网络

    目录 目的 模型网络结构对比 代码实现 1 数据集格式 2 配置文件调整 3 数据预处理 4 模型代码调整 5 添加多分类loss 6 修改db postprocess py 7 修改train py eval py infer det p
  • VS无法定位程序输入点于动态链接库

    Qt系列文章目录 文章目录 Qt系列文章目录 前言 一 问题原因 前言 我们使用QtCreator创建的工程 使用visual studio 打开 前提是vs中安装了qt vsaddin msvc插件 VS无法定位程序输入点于动态链接库 一
  • 清除mac中自动记录的git用户名和密码

    应用程序 实用工具 双击钥匙串 右上角搜索github 右击选项删除
  • 陀螺研究院

    摘要 产业动态 由建行发起的价值30亿美元数字债券将推迟上市 15国正式签署RCEP 全球规模最大自贸协定达成 浙江省首个产业区块链赋能中心落地宁波江北 越南教育和培训部计划在2021年实施区块链技术颁发文凭 深圳市政务区块链专委会正式揭牌
  • pytorch代码实现之SAConv卷积

    SAConv卷积 SAConv卷积模块是一种精度更高 速度更快的 即插即用 卷积 目前很多方法被提出用于降低模型冗余 加速模型推理速度 然而这些方法往往关注于消除不重要的滤波器或构建高效计算单元 反而忽略了特征内部的模式冗余 原文地址 Sp
  • 图像处理(RGB分离)

    图像处理技术 RGB分离 最近学习了图像处理技术 第一个小工程做的事将一张图片的rgb分离 存为三张图片 就像PS中的RGB通道的三张图片一样 我们先准备两张24位真彩色图片 一张宽度像素为4的倍数 一张则不是 我们来看下它的文件头和信息头
  • js文字朗读

    var u new SpeechSynthesisUtterance function read text speed u text text u lang zh u rate speed speechSynthesis speak u
  • 游戏开发安卓知识杂谈系列:关于下载jdk

    想要下载jdk11 去oracle官网下载jdk 发现jdk13以下的版本需要账号登陆 但是去注册账号发现官网账号无法注册 找了半天 网上说Oracle自java SE 8的某个版本以后 需要进行付费才能下载 两个解决办法 找百度网盘或者第
  • webpack使用(5)之处理CSS

    一 需要引入的loader 1 style loader 主要负责创建style标签 并将标签塞入到文档中 2 css loader 主要负责css解析 3 less loader 负责解析less 二 如何引入css资源 1 安装配置st
  • 【数据结构】哈希表

    散列表 也叫哈希表 是根据关键码值而直接进行访问的数据结构 它通过把关键码值映射到表中一个位置来访问记录 以加快查找的速度 哈希表的核心是合适的hash函数 数据范围 解决冲突的办法 这里通过数字分析法设计哈希函数 链地址法解决从冲突 冲突
  • 2023华为OD机试真题【敏感字段加密/字符串风格】【2023.Q2】

    题目描述 给定一个由多个命令字组成的命令字符串 1 字符串长度小于等于127字节 只包含大小写字母 数字 下划线和偶数个双引号 2 命令字之间以一个或多个下划线 进行分割 3 可以通过两个双引号 来标识包含下划线 的命令字或空命令字 仅包含
  • 【机器学习】通俗易懂决策树(实战篇)python实现(为新患者找到合适的药物)

    决策树 我们将学习一种更流行的机器学习算法 决策树 我们将使用此算法从患者的历史数据以及他们对不同药物的反应大数据中 用训练过的决策树来构建分类模型预测未知患者的类别 或者说为新患者找到合适的药物 导入以下包 numpy as np pan