在本教程中,我们将查看各种Scikit Learn模型的分数,并使用Yellowbrick的可视化诊断工具对它们进行比较,以便为我们的数据选择最佳的模型。

代码下载

1 使用说明

1.1 模型选择三原则

关于机器学习的讨论通常以单一的模型选择为特点。不管是logistic回归、随机森林、贝叶斯方法,还是人工神经网络,机器学习的实践者通常很快就能表达他们的偏好。原因主要是历史原因。尽管现代的第三方机器学习库使得多个模型的部署变得几乎微不足道,但传统上,即使是其中一个算法的应用和调整都需要多年的研究。因此,机器学习的实践者往往对特定的(可能更熟悉的)模型有强烈的偏好。
然而,模型选择要比简单地选择“正确”或“错误”算法更为微妙。实际上,工作流程包括:

  • 选择和/或工程最小和最具预测性的特征集
  • 从模型族中选择一组算法
  • 调整算法超参数以优化性能

最近,通过网格搜索方法、标准化的api和基于GUI的应用程序,这个工作流的大部分已经实现了自动化。然而,在实践中,人类的直觉和指导比穷尽搜索更有效地磨练质量模型。通过可视化模型选择过程,数据科学家可以转向最终的、可解释的模型,并避免陷阱。

Yellowbrick库是一种用于机器学习的诊断可视化平台,它使数据科学家可以控制模型的选择过程。Yellowbrick通过新的核心对象:Visualizer扩展了Scikit-Learn API。可视化工具允许在Scikit-Learn流水线过程中对可视模型进行拟合和转换,从而在整个高维数据转换过程中提供可视化诊断。

1.2 关于数据

本教程使用Yellowbrick 示例数据集模块中的蘑菇数据。我们的目标是根据蘑菇的特征来预测蘑菇是否有毒或可食用。蘑菇数据的YB版本不同于UCI机器学习存储库中的蘑菇数据集。Yellowbrick版本已被有意修改,使建模更具挑战性。这些数据包括对蘑菇和麻风菌科23种有鳃蘑菇的假设样本的描述。每一个物种都被确定为绝对可食用,绝对有毒,或未知的食用性和不推荐(后一类是与有毒的一类相结合)。

Yellowbrick的数据包含3个属性的信息和8124个蘑菇实例的目标值(4208个可食,3916个有毒)。

让我们加载数据:

from yellowbrick.datasets import load_mushroom

X, y = load_mushroom()
# inspect the first five rows
# 查看前五行数据
print(X[:5])
    shape surface   color
0 convex smooth yellow
1 bell smooth white
2 convex scaly white
3 convex smooth gray
4 convex scaly yellow

1.3 特征提取

我们的数据(包括目标)是分类的。我们将需要将这些值更改为数字值以进行机器学习。为了从数据集中提取数据,我们必须使用scikit-learn转换器将输入数据集转换为适合模型的数据。幸运的是,scikit-learn确实提供了将类别标签转换为数字整数的转换器:sklearn.preprocessing.LabelEncodersklearn.preprocessing.OneHotEncoder

我们将结合使用scikit-learn的Pipeline对象。

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder, LabelEncoder # Label-encode targets before modeling
# 标记编码目标
y = LabelEncoder().fit_transform(y) # One-hot encode columns before modeling
# 建立一个热编码建模器
model = Pipeline([
('one_hot_encoder', OneHotEncoder()),
('estimator', estimator)
])

1.4 建模与评估

1.4.1 评估分类器的通用指标

精确度是正确阳性结果的数量除以所有阳性结果的数量(例如,我们预测的蘑菇中实际有多少可以食用?)。
召回率是正确的阳性结果数除以应该返回的阳性结果数(例如,我们准确预测了多少有毒的蘑菇是有毒的?)。
F1成绩是测试准确性的一个衡量标准。它同时考虑了测试的精确性和召回率来计算分数。F1分数可以解释为精确度和召回率的加权平均值,F1分数在1时达到最佳值,最差值在0时达到最差值。

其计算公式如下:

precision = true positives / (true positives + false positives)

recall = true positives / (false negatives + true positives)

F1 score = 2 * ((precision * recall) / (precision + recall))

现在我们准备做出一些预测!

让我们建立一种评估多个估计量的方法-首先使用传统的数字评分(稍后将与Yellowbrick库中的某些视觉诊断进行比较)。

from sklearn.metrics import f1_score
from sklearn.pipeline import Pipeline
from sklearn.svm import LinearSVC, NuSVC, SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
from sklearn.linear_model import LogisticRegressionCV, LogisticRegression, SGDClassifier
from sklearn.ensemble import BaggingClassifier, ExtraTreesClassifier, RandomForestClassifier models = [
SVC(gamma='auto'), NuSVC(gamma='auto'), LinearSVC(),
SGDClassifier(max_iter=100, tol=1e-3), KNeighborsClassifier(),
LogisticRegression(solver='lbfgs'), LogisticRegressionCV(cv=3),
BaggingClassifier(), ExtraTreesClassifier(n_estimators=300),
RandomForestClassifier(n_estimators=300)
] def score_model(X, y, estimator, **kwargs):
"""
Test various estimators.
"""
y = LabelEncoder().fit_transform(y)
model = Pipeline([
('one_hot_encoder', OneHotEncoder()),
('estimator', estimator)
]) # Instantiate the classification model and visualizer
# 初始化模型
model.fit(X, y, **kwargs) # 真实值
expected = y
# 预测值
predicted = model.predict(X) # Compute and return F1 (harmonic mean of precision and recall)
# #计算并返回F1(精度和召回率的平均值)
print("{}: {}".format(estimator.__class__.__name__, f1_score(expected, predicted))) for model in models:
score_model(X, y, model);
SVC: 0.6624286455630514
NuSVC: 0.6726016476215785
LinearSVC: 0.6583804143126177
SGDClassifier: 0.6343612334801763
KNeighborsClassifier: 0.6581185045215279
LogisticRegression: 0.6580434509606933 /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:757: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
"of iterations.", ConvergenceWarning) LogisticRegressionCV: 0.6583804143126177
BaggingClassifier: 0.6873056644585642
ExtraTreesClassifier: 0.6871364804544838
RandomForestClassifier: 0.6874746655857316

初步模型评估看来,根据上述F1分数的结果,哪种模型表现最好?

SGDClassifier

1.4.2 视觉模型评估

现在,让我们重构我们的模型评估函数,以使用Yellowbrick的ClassificationReport类,一个显示精度、召回率和F1分数的模型可视化工具。这个可视化的模型分析工具集成了数字分数和彩色编码的热图,以支持简单的解释和检测,特别是I型和II型错误的细微差别,它们与我们的用例非常相关(甚至可以挽救生命)!

I型错误(或“假阳性”)是指检测不存在的影响(例如,当蘑菇事实上可以食用时,但判断为蘑菇有毒)。
II错误(或“假阴性”)是指未能检测到存在的影响(例如,蘑菇实际上有毒,但可判断为以食用)。

因此我们通过一下代码显示了各个模型的混淆矩阵

from sklearn.pipeline import Pipeline
from yellowbrick.classifier import ClassificationReport def visualize_model(X, y, estimator, **kwargs):
"""
Test various estimators.
"""
y = LabelEncoder().fit_transform(y)
model = Pipeline([
('one_hot_encoder', OneHotEncoder()),
('estimator', estimator)
]) # Instantiate the classification model and visualizer
visualizer = ClassificationReport(
model, classes=['edible', 'poisonous'],
cmap="YlGn", size=(600, 360), **kwargs
)
visualizer.fit(X, y)
visualizer.score(X, y)
visualizer.show() for model in models:
visualize_model(X, y, model)

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:757: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.
"of iterations.", ConvergenceWarning)

2 参考

https://www.scikit-yb.org/en/latest/tutorial.html#modeling-and-evaluation

[机器学习] Yellowbrick使用笔记2-模型选择的更多相关文章

  1. [机器学习] Yellowbrick使用笔记8-模型选择可视化

    Yellowbrick可视化工具旨在指导模型选择过程.一般来说,模型选择是一个搜索问题,定义如下:给定N个由数值属性描述的实例和(可选)一个估计目标,找到一个由特征.算法和最适合数据的超参数组成的三元 ...

  2. [机器学习] Yellowbrick使用笔记1-快速入门

    Yellowbrick是一个机器学习可视化库,主要依赖于sklearn机器学习库,能够提供多种机器学习算法的可视化,主要包括特征可视化,分类可视化,回归可视化,回归可视化,聚类可视化,模型选择可视化, ...

  3. [机器学习] Yellowbrick使用笔记3-特征分析可视化

    特征分析可视化工具设计用于在数据空间中可视化实例,以便检测可能影响下游拟合的特征或目标.因为ML操作高维数据集(通常至少35个),可视化工具将重点放在聚合.优化和其他技术上,以提供对数据的概述.这是Y ...

  4. [机器学习] Yellowbrick使用笔记4-目标可视化

    目标可视化工具专门用于直观地描述用于监督建模的因变量,通常称为y目标. 代码下载 当前实现了以下可视化: 平衡箱可视化Balanced Binning:生成带有垂直线的直方图,垂直线显示推荐值点,以将 ...

  5. [机器学习] Yellowbrick使用笔记6-分类可视化

    分类模型试图在一个离散的空间中预测一个目标,即为一个因变量实例分配一个或多个类别. 代码下载 分类分数可视化工具显示类之间的差异以及一些特定于分类器的可视化评估.我们目前已经实施了以下分类器评估: 分 ...

  6. [机器学习] Yellowbrick使用笔记5-回归可视化

    回归模型试图预测连续空间中的目标.回归计分可视化工具显示模型空间中的实例,以便更好地理解模型是如何进行预测的.代码下载 Yellowbrick已经实施了三种回归评估: 残差图Residuals Plo ...

  7. python进行机器学习(三)之模型选择与构建

    Scikit-Learn库已经实现了所有基本机器学习的算法,可以直接调用里面库进行模型构建. 一.逻辑回归 大多数情况下被用来解决分类问题(二元分类),但多类的分类(所谓的一对多方法)也适用.这个算法 ...

  8. [机器学习] Yellowbrick使用笔记7-聚类可视化

    聚类模型是试图检测未标记数据中模式的无监督方法.聚类算法主要有两类:聚集聚类将相似的数据点连接在一起,而质心聚类则试图在数据中找到中心或分区.Yellowbrick提供yellowbrick.clus ...

  9. 机器学习-学习笔记(二) --> 模型评估与选择

    目录 一.经验误差与过拟合 二.评估方法 模型评估方法 1. 留出法(hold-out) 2. 交叉验证法(cross validation) 3. 自助法(bootstrapping) 调参(par ...

随机推荐

  1. 程序员便于开发的一些工具、网站、App。

    http://www.kancloud.cn 关于文档,各种技术,框架的学习指南,API文档搜索方便. https://leetcode.com/ 程序员刷题面试网站,无聊的时候可以做一做.

  2. Spring MVC(配置、入门)

      Spring MVC 框架的模块    什么是Spring的MVC框架? Spring 配备构建Web 应用的全功能MVC框架.Spring可以很便捷地和其他MVC框架集成,如Struts,Spr ...

  3. C++之值传递&指针传递&引用传递详解

    C++之值传递&指针传递&引用传递详解 目录 C++之值传递&指针传递&引用传递详解 1.函数基础 2.值传递 3.指针传递 4.引用传递 1.函数基础 一个函数由以下 ...

  4. python基础爬虫,翻译爬虫,小说爬虫

    基础爬虫: # -*- coding: utf-8 -*- import requests url = 'https://www.baidu.com' # 注释1 headers = { # 注释2 ...

  5. 3.pygame快速入门-游戏循环及动画实现

    游戏循环的开始,意味着游戏的正式开始,游戏循环的作用如下 1.保证游戏不会直接退出 2.变化图像的位置--动画效果 3.检测用户交互--按键.鼠标等     游戏时钟 pyagame提供了一个pyga ...

  6. 部署redis-cluster

    1.环境准备 ☆ 每个Redis 节点采用相同的相同的Redis版本.相同的密码.硬件配置 ☆ 所有Redis服务器必须没有任何数据 #所有主从节点执行: [root@ubuntu2004 ~]#ba ...

  7. Cypher 笔记

    添加 // 创建节点 CREATE (n:MOVIE{name:"电影"}) // 创建节点 create (n:Test) set n.name="Test" ...

  8. numpy常用知识点备忘

    常用函数 a.max(axis=0) a.max(axis=1) a.argmax(axis=1) : 每列的最大值(在行方向找最大值).每行的最大值(在列方向找对大致).最大值的坐标 sum()求和 ...

  9. Arch Linux + KDE 配置&美化(持续更新~)

    Arch Linux + KDE 配置&美化(持续更新~) 这篇文章着重记录archlinux + KDE的一个基本的配置过程.不包括安装过程(使用archInstall.sh).内容大概有以 ...

  10. Java安全之CC6

    前言 之前三篇详细分析了CommonsCollections1利用链,两种方法,LazyMap以及TransformedMap,但是在Javaa 8u71以后,这个利⽤链不能再利⽤了,主要原因是 su ...