Python机器学习之数据探索可视化库yellowbrick

背景介绍

从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维。陆续使用过plotly、seaborn,最终定格在了Bokeh,因为它可以与Flask完美的结合,数据看板的开发难度降低了很多。

前阵子看到这个库可以较为便捷的实现数据探索,今天得空打算学习一下。原本访问的是英文文档,结果发现已经有人在做汉化,虽然看起来也像是谷歌翻译的,本着拿来主义,少费点精力的精神,就半抄半学,还是发现了一些与文档不太一致的地方。

# http://www.scikit-yb.org/zh/latest/quickstart.html
# http://www.scikit-yb.org/en/latest/quickstart.html
import pandas as pd
data = pd.read_csv(‘data/bikeshare/bikeshare.csv‘)
X = data[[
    "season", "month", "hour", "holiday", "weekday", "workingday",
    "weather", "temp", "feelslike", "humidity", "windspeed"
]]
y = data["riders"]
from yellowbrick.features import Rank2D
visualizer = Rank2D(algorithm="pearson")
visualizer.fit_transform(X.values)
visualizer.poof() # 在notebook显示
# visualizer.poof(outpath="pcoords.jpg",clear_figure=True)  # 输出为png、jpg格式

由上图可以看出特征向量7、8为强相关;0、1相关系数也比较高。
下面再来通过曲线拟合看看两者的相关度。

from yellowbrick.features import JointPlotVisualizer
visualizer = JointPlotVisualizer(feature=‘temp‘, target=‘feelslike‘)
visualizer.fit(X[‘temp‘], X[‘feelslike‘])
visualizer.poof()

JointPlotVisualizer 让我们能快速浏览有强相关性的特征,以及各个特征的范围和分布情况。需要注意的是图中的各个轴都已经标准化到0到1之间的值,这是机器学习中一中非常常用的减少一个特征对另一个影响的技术。

from yellowbrick.regressor import ResidualsPlot
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# Create training and test sets
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.1
)

visualizer = ResidualsPlot(LinearRegression())
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.poof()

残差图还向我们展示了模型的误差是怎么产生的:那根加粗的水平线表示的是 residuals = 0 ,也就是没有误差;线上方或者下方的点则表示误差值的大小。比如大部分残差是负值,并且其值是由 actual - expected 算得,也就是说大部分时间预测值比实际值要大,比如和实际相比我们的模型总是预测有更多的骑手。|

import numpy as np

from sklearn.linear_model import RidgeCV
from yellowbrick.regressor import AlphaSelection
# RidgeCV:多个阿尔法,得出多个对应最佳的w,然后得到最佳的w及对应的阿尔法
alphas = np.logspace(-10, 1, 200)
visualizer = AlphaSelection(RidgeCV(alphas=alphas))
visualizer.fit(X, y)
visualizer.poof()

alpha = visualizer.alpha_
visualizer.alpha_
3.612342699709438

在探索模型家族的过程中,第一个要考虑的是模型是怎样变得更复杂的。当模型的复杂度增加,由于方差增加形成的误差也相应增加,因为模型会变得过拟合并且不能泛化到未知数据上。然而,模型越简单由于偏差造成的误差就会越大;模型欠拟合,因此有更多的未中靶预测。大部分机器学习的目的就是要产生一个复杂度适中的模型,在偏差和方差之间找到一个中间点。

对一个线性模型来说,复杂度来自于特征本身以及根据模型赋予它们的值。因此对线性模型期望用最少的特征达到最好的阐释结果。正则化是实现如上目标的其中一种技术,即引入一个alpha参数来对其相互之间系数的权重进行标准化并且惩罚其复杂度。Alpha和复杂度之间是一个负相关。alpha值越大,复杂度越小,反之亦然。

我们现在可以训练我们最终的模型并且用 PredictionError 对其进行可视化了:

from sklearn.linear_model import Ridge
from yellowbrick.regressor import PredictionError

visualizer = PredictionError(Ridge(alpha=alpha))
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.poof()

用预测误差visualizer将实际(测量)值对期望(预测)值进行可视化。黑色的45度虚线表示误差为0的点。和残差图一样,这让我们可以看到误差在何处出现,值为多大。

在这个图上,我们可以看到大部分的点集中在小于200骑手的位置。我们也许想要尝试用正交匹配追踪算法(OMP)或者样条(spline)来训练一个将更多区域性考虑进来的回归模型。我们还可以看到残差图中奇怪的拓扑结构好像已被Ridge回归纠正,而且在我们的模型中大值和小值之间有了更多的平衡。Ridge正则化可能纠正了两个特征之间的协方差问题。当我们用其他模型的形式将我们的数据分析推进的同时,我们可以继续visualizers来快速比较并且可视化我们的结果。

希望这个流程让你对怎样将Visualizers通过Scikit-Learn整合到机器学习中去有一个概念,并且给你启发让你将其运用到你的工作中!如果想要了解更多的有关怎样开始使用Yellowbrick的信息,请查看 模型选择教程 。然后你就在 Visualizers and API 上快速查看更多的特定visualizers了。

原文地址:https://blog.51cto.com/14509091/2431088

时间: 2024-10-02 05:15:09

Python机器学习之数据探索可视化库yellowbrick的相关文章

Python机器学习之数据探索可视化库yellowbrick-tutorial

背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plotly.seaborn,最终定格在了Bokeh,因为它可以与Flask完美的结合,数据看板的开发难度降低了很多. 前阵子看到这个库可以较为便捷的实现数据探索,今天得空打算学习一下.原本访问的是英文文档,结果发现已经有人在做汉化,虽然看起来也像是谷歌翻译的,本着拿来主义,少费点精力的精神,就半抄半学,还是发

机器学习之数据探索——数据质量分析

数据探索是对样本数据进行解释性的分析工作,它是数据挖掘和机器学习较为前期的部分,更偏重于研究数据的本质.描述数据的形态特征并解释数据的相关性. 换句话说,透过数据探索,我们应该可以回答如下问题: 样本数据的分布怎样?有什么特点?数据之间有何种关系?数据是否满足建模要求? 问题驱动发展,对以上问题进行解答,涉及到数据探索的两个方面工作: 数据质量分析 数据特征分析 需要提及的是,数据探索与数据预处理紧密相连的,二者在数据挖掘的中没有绝对的先后次序.比如,在数据质量分析中,就牵涉到数据预处理中的数据

机器学习之数据探索——数据特征分析(分布分析)

数据特征分析与数据质量分析一道构成数据探索的两方面工作,在前文中介绍过关于数据质量分析的概况,本文将对数据特征分析作简介,并着重于分布分析的角度,相比于数据质量分析,数据特征分析更注重于找寻数据间的关系. 数据特征分析包括以下几个分析角度: 1.分布分析 2.对比分析 3.统计量分析 4.帕累托分析 5.正态性检验 6.相关性分析 其上每一个分析角度都有丰富的内容. 分布分析 顾名思义,分布分析研究数据的分布特征和分布类型.对于定量数据,需要了解分布形式,发现某些特大特小的异常值,通常用到散点图

python 机器学习之数据预处理

#数据预处理方法,主要是处理数据的量纲和同趋势化问题. import numpy as np from sklearn import preprocessing #零均值规范 data=np.random.rand(3,4)#随机生成3行4列的数据 data_standardized=preprocessing.scale(data)#对数据进行归一化处理,即每个数值减去均值除以方差 主要用于svm #线性数据变换最大最小化处理 data_scaler=preprocessing.MinMaxS

Python数据可视化库-Matplotlib(一)

今天我们来学习一下python的数据可视化库,Matplotlib,是一个Python的2D绘图库 通过这个库,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率图,条形图,错误图,散点图等等 废话不多说,我们直接通过例子来进行讲解. 首先我们有一组数据如下: 我们可以看到,这组数据有日期,还有日期对应的值,因为这组数据中的日期格式不是标准的日期格式 那么我们对数据做一下转换,取1948年的整年的数据,来进行一个绘图操作 import pandas as pd unrate = pd.rea

Python机器学习库资料汇总

声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: 比较成熟的(广播)函数库: 用于整合C/C++和Fortran代码的工具包: 实用的线性代数.傅里叶变换和随机数生成函数. SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化.线性代数.积分.插值.特殊函数.快速傅里叶变换.信号处理和图像处理.常微分方程求解和其他科

常用python机器学习库总结

开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处理,科学计算,机器学习和数据挖掘领域,有很多很多优秀的Python工具包可供使用,所以作为Pythoner,也是相当幸福的.如果仔细留意微博和论坛,你会发现很多这方面的分享,自己也Google了一下,发现也有同学总结了"Python机器学习库",不过总感觉缺少点什么.最近流行一个词,全栈工

[resource]Python机器学习库

reference: http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: 比较成熟的(广播)函数库: 用于整合C/C++和Fortran代码的工具包: 实用的线性代数.傅里叶变换和随机数生成函数. SciPy是一个开源的Python算法库和数学工具包,S

Pycon 2017: Python可视化库大全

本文首发于微信公众号“Python数据之道” 前言 本文主要摘录自 pycon 2017大会的一个演讲,同时结合自己的一些理解. pycon 2017的相关演讲主题是“The Python Visualization Landscape”. 先来一张全景图镇楼~~ 看完这张图是不是有点懵? 别着急,我们一起来看看后面的阐述. python可视化库可以大致分为几类: 基于matplotlib的可视化库 基于JS的可视化库 基于上述两者或其他组合功能的库 基于matplotlib的可视化库 matp