决策树(三)决策树与Jupyter小部件的交互式可视化

简介

  决策树是广泛用于分类和回归任务的监督模型。 在本文中,我们将讨论决策树分类器以及如何动态可视化它们。 这些分类器在训练数据上构建一系列简单的if / else规则,通过它们预测目标值。

   在本演示中,我们将使用sklearn_wine数据集,使用sklearn export_graphviz函数,我们可以在Jupyter中显示树。

from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn import tree
from sklearn.datasets import load_wine
from IPython.display import SVG
from graphviz import Source
from IPython.display import display
# load dataset
data = load_wine()

# feature matrix
X = data.data

# target vector
y = data.target

# class labels
labels = data.feature_names

# print dataset description
print(data.DESCR)
estimator = DecisionTreeClassifier()
estimator.fit(X, y)

graph = Source(tree.export_graphviz(estimator, out_file=None
   , feature_names=labels, class_names=[‘0‘, ‘1‘, ‘2‘]
   , filled = True))
display(SVG(graph.pipe(format=‘svg‘)))

  在树形图中,每个节点包含分割数据的条件(if / else规则)以及节点的一系列其他度量。基尼是指基尼杂质,它是节点杂质的量度,即节点内样品的均匀程度。我们说当一个节点的所有样本属于同一个类时它是纯粹的。在这种情况下,不需要进一步拆分,这个节点称为叶子。 Samples是节点中的实例数,而value数组显示每个类的这些实例的分布。在底部,我们看到节点的多数类。当export_graphviz的填充选项设置为True时,每个节点将根据多数类进行着色。

  虽然易于理解,但通过构建复杂模型,决策树往往会过度拟合数据。过度拟合的模型很可能不会在“看不见的”数据中很好地概括。防止过度拟合的两种主要方法是修剪前和修剪后。预修剪意味着在创建之前限制树的深度,而后修剪是在树构建之后移除非信息节点。

  Sklearn学习决策树分类器仅实现预修剪。可以通过若干参数来控制预修剪,例如树的最大深度,节点保持分裂所需的最小样本数以及叶所需的最小实例数。下面,我们在相同的数据上绘制决策树,这次设置max_depth = 3。

  这个模型不太深,因此比我们最初训练和绘制的模型简单。

  除了预修剪参数之外,决策树还有一系列其他参数,我们在构建分类模型时尝试优化这些参数。 我们通常通过查看准确度指标来评估这些参数的影响。 为了掌握参数的变化如何影响树的结构,我们可以再次在每个阶段可视化树。 我们可以使用Jupyter Widgets(ipywidgets)来构建我们树的交互式绘图,而不是每次进行更改时都绘制树。

  Jupyter小部件是交互式元素,允许我们在笔记本中呈现控件。 通过pip和conda安装ipywidgets有两种选择。

用pip安装

pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension

用conda安装

conda install -c conda-forge ipywidgets

  对于此应用程序,我们将使用交互式功能。 首先,我们定义一个训练和绘制决策树的函数。 然后,我们将此函数与针对交互式函数感兴趣的每个参数的一组值一起传递。 后者返回我们用display显示的Widget实例。

from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn import tree
from sklearn.datasets import load_wine
from IPython.display import SVG
from graphviz import Source
from IPython.display import display
from ipywidgets import interactive
# load dataset
data = load_wine()
# feature matrix
X = data.data
# target vector
y = data.target
# class labels
labels = data.feature_names
def plot_tree(crit, split, depth, min_split, min_leaf=0.2):
estimator = DecisionTreeClassifier(random_state = 0
      , criterion = crit
      , splitter = split
      , max_depth = depth
      , min_samples_split=min_split
      , min_samples_leaf=min_leaf)
    estimator.fit(X, y)
graph = Source(tree.export_graphviz(estimator
      , out_file=None
      , feature_names=labels
      , class_names=[‘0‘, ‘1‘, ‘2‘]
      , filled = True))

    display(SVG(graph.pipe(format=‘svg‘)))
return estimator
inter=interactive(plot_tree
   , crit = ["gini", "entropy"]
   , split = ["best", "random"]
   , depth=[1,2,3,4]
   , min_split=(0.1,1)
   , min_leaf=(0.1,0.5))
display(inter)

在此示例中,我们公开以下参数:

  • criterion:衡量节点分裂质量的标准
  • splitter:每个节点的拆分策略
  • max_depth:树的最大深度
  • min_samples_split:节点中所需的最小实例数
  • min_samples_leaf:叶节点上所需的最小实例数

最后两个参数可以设置为整数或浮点数。 浮点数被解释为实例总数的百分比。 有关参数的更多详细信息,请阅读sklearn类文档。

原文地址:https://www.cnblogs.com/jin-liang/p/9610929.html

时间: 2024-11-02 07:36:21

决策树(三)决策树与Jupyter小部件的交互式可视化的相关文章

Android Widget 小部件(三) 在Activity中添加Widget

package com.stone.ui; import static android.util.Log.d; import android.app.Activity; import android.appwidget.AppWidgetHost; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; import android.content.Intent; imp

桌面小部件Wight父类AppWidgetProvider的三个方法

onUpdate()这个方法会在每次更新App Widget的时候调用,数据更新的逻辑都写在这个方法里边.而且要注意的是:在用户添加小部件的时候,会首先调用这个方法,应该在这个方法里进行初始化操作,比如初始化展示给用户的界面等等.....比如:TextView的更新,使某一个控件可见或者不可见之类的操作. onEnabled()这个方法会在App Widget可用的时候调用,注意在用户添加小部件的时候首先调用的不是这个方法,不是这个方法!不要在这里进行初始化操作..... onDisabled(

HTML5实战 文摘 第二章 HTML5用于创建表单的输入小部件 数据绑定以及数据验证

HTML5表单在原有表单特性的基础上增加了一些比较便捷的特性,使得我们实现一些常用的表单的小部件.输入类型.输入验证不再那么大费周章.上一篇文章提到了HTML5实现的几种新的输入类型,现在我们更加详尽的了解HTML5的表单产生的新特性和功能. 1. 输入类型和输入属性 菜鸟教程上给出了HTML5新增加的input输入类型,可以在上面尝试一下不同类型的样子,基本可以满足日常开发需求了.类型不同会照成什么内在差异呢?主要有三点,首先,浏览器会根据输入类型进行基本的数据校验,例如type="email

优质Android小部件:索尼滚动相册

虽然骚尼手机卖的不怎么样,但是有些东西还是做的挺好的,工业设计就不用说了,索尼的相册的双指任意缩放功能也是尤其炫酷.其桌面小部件滚动相册我觉得也挺好的,比谷歌原生的相册墙功能好多了,网上搜了一下也没发现有人写这个,于是,下面就介绍下我的高A货. 首先是效果图: 主要手势操作有: 上/下满速移动,可以上滑/下滑一张图片 上/下快读移动,则根据滑动速度,上滑/下滑多张图片 单击则请求系统图库展示该图片 该小部件的主要优点:在屏幕内的小范围内提供一个很好的图片选择/浏览部件,尤其是切换图片时有很强的靠

AppWidght全面学习之电量监控小部件的实现详解

前几天翻看之前下载的各种资料,无意中发现了一款AppWidght应用的源代码,想起之前一直想研究这块,却一直没机会,于是花费了两天时间,把这款桌面电量监控小插件的实现研究了一下,收获颇丰,特此把学到的东西与大家分享.明天就是苦逼的信息论的期末考试了,我是一点看不懂,唉,就这样吧,重修再说吧,我们换个好心情,看一下这款小软件是如何实现的. 虽然这个小软件实现的不错,但是代码质量我却不敢恭维,费了好大劲,才把很多没用的代码和文件剔除,并且对一些实现进行了优化,话不多说,咱们先来看看效果图饱饱眼福.

Android小部件Widget----全解析

一.Android应用的Widget介绍 App Widget是应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新. 首先上一张图来给大家看一看效果. Widget小部件,通常具备一定的功能:并且通常是和某个应用程序是关联的,通过点击手机桌面上的Widget小部件,会触发启动相对应的应用程序.Widget小部件,通常需要用户手动自行摆放到手机桌面(长按手机桌面,添加"小部件",从小部件列表中选择). 很多应用程序APP自带

Android开发5:应用程序窗口小部件App Widgets的实现

前言 本次主要是实现一个Android应用,实现静态广播.动态广播两种改变 widget内容的方法,即在上篇博文中实验的基础上进行修改,所以此次实验的重点是AppWidget小部件的实现啦~ 首先,我们简单说一下Widget是一个啥玩意~ 应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget provider来发布一个Widget.可以容纳其它App Widget的应用程序组件被称为App Widge

Qt Widgets——动作类与小部件菜单项

本文主要涉及以下三个类: QAction ——QWidgetAction QActionGroup QAction可称为动作类,它一般可当作菜单中的项组成菜单,也可作为工具栏上的按钮,它主要由图标.文本及快捷键三部分组成.QActionGroup用于将QAction分组,设置组内各QAction的互斥性质(exclusive ),设置后,组内的动作,在外观上形成多选框(不互斥)或单选框(互斥).QWidgetAction继承自QAction,它可将自定义的小部件插入到菜单项中,用于QSystem

Android 之窗口小部件详解--App Widget

1 App Widget简介 App Widget是应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget Provider来发布一个Widget. 本文参考Android官方文本,先介绍App Widget的主要组件,然后再以示例来详细说明. 2 App Widget主要的相关类介绍 2.1 AppWidgetProvider AppWidgetProvider 继承自 BroadcastRecei