PyCon2018:两款最新ML数据可视化库:Altair和Yellowbrick

2,050 阅读2分钟

原作者David 9

原文发于作者个人博客,点击查看原文,掘金已获得转载授权。再次感谢作者。


PyCon2018两款最新ML数据可视化库:Altair和Yellowbrick,函数式编程的可视化库和scikit-learn增强可视化库

数据科学的可视化库和深度学习框架库一样,虽然层出不穷,但是大致分为两种:

一种是通用可视化库任何类似json schema的静态数据都可以用它作图如: Pandas, Seaborn , ggplot, Bokeh, pygal, Plotly

另一种是和框架耦合较高的可视化库,如TensorFlow的TensorBoard,scikit-learn增强可视化库Yellowbrick

对于第一种通用库,方便简洁、易用的趋势一直没有改变。这届PyCon2018上的talk:Exploratory Data Visualization with Vega, Vega-Lite, and Altair 就介绍了Altair这种新的函数式编程可视化库,其简洁程度,只要拿到panda的dataframe数据,多加一句声明代码,就可以进行可视化了:

import altair as alt# to use with Jupyter notebook (not JupyterLab) run the following# alt.renderers.enable('notebook')# load a simple dataset as a pandas DataFramefrom vega_datasets import datacars = data.cars()# 这里是声明代码,是不是有函数式编程的味道 ?alt.Chart(cars).mark_point().encode(    x='Horsepower',    y='Miles_per_Gallon',    color='Origin',)

Altair例程

如果要把点的样式改成线的样式,只需把函数mark_point()改成mark_line()即可:

    alt.Chart(cars).mark_line().encode(    x='Horsepower',    y='Miles_per_Gallon',    color='Origin',)

这里可以注意到无论你的car数据集有多少特征,可视化时你需要什么特征,在encode函数中声明就可以了。当然,Altair API还有许多便捷的地方,许多实例的jupyterNOTEBOOK例子可以先试试

而对于和scikit-learn耦合较高的可视化库Yellowbrick, 甚至在可视化的过程中,已经融入的训练过程:

    from sklearn.linear_model import LogisticRegressionfrom yellowbrick.classifier import ROCAUC# 初始化分类模型和可视化logistic = LogisticRegression()visualizer = ROCAUC(logistic)visualizer.fit(X_train, y_train)  # visualizer对象其实就是estimater类的继承,可以进行fit训练visualizer.score(X_test, y_test)  # 在测试集上得分g = visualizer.poof()             # 获得ROCAUC的分析图

如上述代码,在logistic回归模型训练完毕就立即输出分析图

来自:http://www.scikit-yb.org/en/latest/api/classifier/rocauc.html

同样,PCA分析也一样,可视化和训练代码是耦合的:

from yellowbrick.features.pca import PCADecompositionvisualizer = PCADecomposition(scale=True, center=False, color=y)visualizer.fit_transform(X,y)visualizer.poof()

上述代码直接实现了两维的PCA可视化:

参考文献:

  1. www.scikit-yb.org/en/latest/
  2. github.com/altair-viz/…

本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com

或直接扫二维码: