帮助选择机器学习模型的可视化分析和诊断工具
摄影 Quatro Cinco, 经许可使用, Flickr Creative Commons.
这个README是针对开发者的指南,如果你对Yellowbrick感兴趣,请查看我们的文档.
Yellowbrick是由一套被称为"Visualizers"组成的可视化诊断工具组成的套餐,其由Scikit-Learn API延伸而来,对模型选择过程起指导作用。总之,Yellowbrick结合了Scikit-Learn和Matplotlib并且最好得传承了Scikit-Learn文档,对 你的 模型进行可视化!
Visualizers也是estimators(从数据中习得的对象),其主要任务是产生可对模型选择过程有更深入了解的视图。从Scikit-Learn来看,当可视化数据空间或者封装一个模型estimator时,其和转换器(transformers)相似,就像"ModelCV" (比如 RidgeCV, LassoCV)的工作原理一样。Yellowbrick的主要目标是创建一个和Scikit-Learn类似的有意义的API。其中最受欢迎的visualizers包括:
- Rank Features: 对单个或者两两对应的特征进行排序以检测其相关性
- Parallel Coordinates: 对实例进行水平视图
- Radial Visualization: 在一个圆形视图中将实例分隔开
- PCA Projection: 通过主成分将实例投射
- Feature Importances: 基于它们在模型中的表现对特征进行排序
- Scatter and Joint Plots: 用选择的特征对其进行可视化
- Class Balance: 看类的分布怎样影响模型
- Classification Report: 用视图的方式呈现精确率,召回率和F1值
- ROC/AUC Curves: 特征曲线和ROC曲线子下的面积
- Confusion Matrices: 对分类决定进行视图描述
- Prediction Error Plots: 沿着目标区域对模型进行细分
- Residuals Plot: 显示训练数据和测试数据中残差的差异
- Alpha Selection: 显示不同alpha值选择对正则化的影响
- K-Elbow Plot: 用肘部法则或者其他指标选择k值
- Silhouette Plot: 通过对轮廓系数值进行视图来选择k值
- Term Frequency: 对词项在语料库中的分布频率进行可视化
- TSNE: 用随机邻域嵌入来投射文档
以及更多!Visualizers随时在增加中,请务必查看示例(甚至是develop分支上的),并且随时欢迎你对Visualizers贡献自己的想法。
Yellowbrick和Python 2.7及以后版本兼容,但是倾向于使用Python 3.5及以后版本,这样可发挥其全部功能。Yellowbrick依赖于Scikit-Learn 0.18及以后版本和Matplotlib 1.5及以后版本。安装Yellowbrick最简单的方法就是用来自于PyPI的pip方法 —— Python首选的包安装器。
$ pip install yellowbrick
需要注意的是Yellowbrick是一个在建的项目,目前常规发布新的版本,并且每一个新版本都将会有新的可视化功能更新。为了将Yellowbrick升级到最新版本,你可以用如下pip命令.
$ pip install -u yellowbrick
你也可以用 -u
标记对Scikit-Learn,matplotlib或者其他和Yellowbrick兼容的第三方包进行升级.
如果你使用的是Windows或者Anaconda,你也可以充分利用conda:
conda install -c districtdatalabs yellowbrick
然而需要注意的是,在Linux上用Anaconda安装matplotlib时有一个 已知的漏洞 。
为了更好得配合Scikit-Learn一起使用,我们特意对Yellowbrick API进行了一些特殊设计。如下是一个比较典型的使用Scikit-Learn和Yellowbrick的工作流程。 The Yellowbrick API is specifically designed to play nicely with Scikit-Learn. Here is an example of a typical workflow sequence with Scikit-Learn and Yellowbrick:
下面这个例子将向我们展示Rank2D是怎样用一种特殊的算法对数据中的特征进行两两比较,然后将其结果排列至左下角三角区的视图。
from yellowbrick.features import Rank2D
visualizer = Rank2D(features=features, algorithm='covariance')
visualizer.fit(X, y) # Fit the data to the visualizer
visualizer.transform(X) # Transform the data
visualizer.poof() # Draw/show/poof the data
这个例子里,我们将实例化一个Scikit-Learn分类器,然后我们用Yellowbrick的ROCAUC类来对分类中的敏感度和特异性之间的权衡进行可视化。
from sklearn.svm import LinearSVC
from yellowbrick.classifier import ROCAUC
model = LinearSVC()
model.fit(X,y)
visualizer = ROCAUC(model)
visualizer.score(X,y)
visualizer.poof()
想要对如何开始使用Yellowbrick有更多了解,请查看我们的 示例笔记.
还有 快速开始指南.
Yellowbrick是一个开源项目,其支持社区将会谦卑地接受你对项目所做的任何贡献,并对此表示感激。不论是大还是小,任何贡献都能使其发生大的变化;如果你从来没有对开源项目进行过贡献,我们希望你能从Yellowbrick开始!
主要来讲,Yellowbrick的开发是添加和创建 visualizers — 对象,其通过对数据的学习创造一个对数据或者模型的可视化呈现。针对某些特定目标,Visualizers还可与Scikit-Learn的estimators,transformers以及pipelines结合使用,使其更易于创建和部署。最常见的贡献方式就是为一个特定的模型或者模型家族创建一个visualizer。我们后面将会详细讨论怎样创建一个visualizer。
除了创建visualizer,还有很多做贡献的方法:
- 在 GitHub Issues 上提交漏洞报告或者特征请求。
- 在我们的示例库中用Jupyter notebook的方式贡献示例 gallery 。
- 在 user testing 上帮助我们
- 在我们网站上帮我们加入文档 scikit-yb.org 。
- 对我们项目进行单元测试或者集成测试。
- 在issues,mailing list,Stack Overflow或者其他地方帮我们回答问题。
- 帮我们把文档翻译成其他语言。
- 写一个博客,tweet或者和他人分享我们的项目。
- 教别人使用Yellowbrick。
正如你看到的,你可以通过多种方式加入到我们当中来。并且我们也非常开心你能加入我们!我们唯一的要求是你遵守开放的原创,尊敬并且体谅他人,就如下面描述的一样 Python Software Foundation Code of Conduct 。
想要了解更多,请查看 CONTRIBUTING.md
文件中repository的根目录或者详细的文档 Contributing to Yellowbrick 。
Yellowbrick包含对开发有帮助的脚本,包括下载测试数据的脚本和管理比较图片的脚本。
图片比较帮手脚本通过将文件从 actual_images
文件夹拷贝到设置基线对测试目录的 baseline_images
文件夹进行管理。要用这个脚本的话,首先运行测试(会产生“image not found”错误产生),然后按照如下方式将图片拷入基线:
$ python -m tests.images tests/test_visualizer.py
tests/test_visualizer.py
是包含有图片比较测试的测试文件。所以相关的测试都会被发掘、证实,并且拷贝到基线目录。如果想要将图片从现行的或这基线的状态重设到测试状态,可用如下 -C
参数:
$ python -m tests.images -C tests/test_visualizer.py
可以用Glob语法来移除多个文件。比如,将所有分类器测试重设:
$ python -m tests.images tests/test_classifier/*
然而推荐的的方法是有针对性进行测试,而不是对整个目录进行更新。