背景介绍

从学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 npfrom 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 PredictionErrorvisualizer = 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了。

Python机器学习之数据探索可视化库yellowbrick相关推荐

  1. 机器学习实战 | 数据探索(缺失值处理)

    点击"阅读原文"直接打开[北京站 | GPU CUDA 进阶课程]报名链接 接着上一篇:<机器学习实战-数据探索>介绍,机器学习更多内容可以关注github项目:mac ...

  2. 机器学习实战-数据探索(变量变换、生成)

    原文链接:点击打开链接 <机器学习实战-数据探索(1.变量识别:2.单变量分析:3.双变量分析)> 机器学习实战-数据探索(缺失值处理) 机器学习实战-数据探索(异常值处理) 上面三篇文章 ...

  3. Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

    [导读]Kaggle 的房价预测竞赛从 2016 年 8 月开始,到 2017 年 2 月结束.这段时间内,超过 2000 多人参与比赛,选手采用高级回归技术,基于我们给出的 79 个特征,对房屋的售 ...

  4. 房价预测python_详解 Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索...

    [导读]Kaggle 的房价预测竞赛从 2016 年 8 月开始,到 2017 年 2 月结束.这段时间内,超过 2000 多人参与比赛,选手采用高级回归技术,基于我们给出的 79 个特征,对房屋的售 ...

  5. Python机器学习:数据科学,机器学习和人工智能的主要发展技术趋势概述

    1.介绍 Python因易于学习而广为人知,并且它仍然是数据科学,机器学习和科学计算中使用最广泛的语言.根据最近的一项民意的调查,该调查对1,800多名研究人员分析,数据科学和机器学习偏好的参与者进行 ...

  6. python包 wget_Python数据科学“冷门”库

    原标题 | Lesser Known Python Libraries for Data Science 作者 | Parul Pandey 译者 | CONFIDANT(福建师范大学).Seabis ...

  7. Python 抓取数据并可视化

    Python 抓取数据并数据可视化 前言 一.数据抓取篇 1.简单的构建反爬措施 2.解析数据 3.完整代码 二.数据可视化篇 1.数据可视化库选用 2.案例实战 (1).柱状图Bar (2).地图M ...

  8. WRF后处理/Python处理nc数据与可视化/极坐标网格绘制(Cartopy、netcdf4)——以北极雪水当量数据为例

    试了下用python处理并绘制北极雪水当量数据(来源:北极雪水当量格网数据集,,以往数据处理与图像绘制我习惯于使用matlab或R,绘制使用ArcGIS.不过python毕竟是万金油语言,试一试如何处 ...

  9. 【手把手教你】Python获取财经数据和可视化分析

    内容来自:微信公众号:python金融量化 关注可了解更多的金融与Python干货. "巧妇难为无米之炊",找不到数据,量化分析也就无从谈起.对于金融分析者来说,获取数据是量化分析 ...

最新文章

  1. 普华永道:2018 AI预测报告 将回答关于数据的重大问题
  2. Android 面试题目之 关于AbstractQueuedSynchronizer的注解翻译
  3. 图解Java 开发教程
  4. c#下简单的文件读写
  5. devStack安装OpenStack Ocata版本 (Linux Bridge+VLAN)
  6. arm shellcode 编写详析1
  7. 华为机试——字串的连接最长路径查找
  8. django 1.8 官方文档翻译: 1-2-5 编写你的第一个Django应用,第5部分
  9. JAVA数组子集_【Java虚拟机】JVM系列学习之JVM体系(一)
  10. pku2594 Treasure Exploration
  11. css如何设置固定位置,用css固定位置的方法
  12. centos8 yum安装mysql8 流程配置
  13. [Flash开发笔记] List控件--删除指定label或data的项
  14. 走进Selenium新世界
  15. MySQL使用SQL语句修改字段长度、字段名称
  16. 计算机网络 IP:ABC类地址与 子网掩码(ABC类网络均有属于自己的私有IP段 节省32位IP资源 ) 网络地址 主机地址 子网 与子网掩码之间的关系换算 IP和子网掩码相互依存
  17. Golang中defer、return、返回值之间执行顺序的坑
  18. screenX、client X、pageX、offsetX、layerX
  19. python 泰森多边形边界_泰森多边形
  20. 如何为新的微信公众号做引流矩阵的8个渠道

热门文章

  1. java.net.UnknownHostExceptin:,DNS域名无法解析
  2. 无线设计中LNA和PA的基本原理
  3. Thinkpad E431升级之路
  4. 肺炎在家自学C#--从入门到放弃然后又入门又放弃又入门
  5. postgres 数据库 citus 集群分片
  6. Ubuntu 14.04 升级到 Ubuntu 16.04
  7. SD 信用模拟检查增强
  8. HDU 1804 Deli Deli
  9. 服务器系统日志事件id41,win10系统经常蓝屏,事件ID41,Kernel-Power
  10. 如何申请著作权,流程和费用有哪些