机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

本例构造一个降维管道(pipeline), 通过它做一个支持向量分类器预测。在这里,我们演示使用函数GridSearchCVPipeline优化不同类型的估计量。请注意,Pipeline能通过参数memory实例化,将转换器存储在管道里,避免重复拟合相同的转换器。

Pipeline and GridSearchCV

本节说明具有GridSearchCV的管道使用方法。首先,导入必需的模块。

# Authors: Robert McGibbon, Joel Nothman, Guillaume Lemaitrefrom __future__ import print_function, divisionimport numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.svm import LinearSVC
from sklearn.decomposition import PCA, NMF
from sklearn.feature_selection import SelectKBest, chi2print(__doc__)

建立一个管道,包括主成分pca和线性支持向量分类器LinearSVC.

pipe = Pipeline([('reduce_dim', PCA()),('classify', LinearSVC())
])

建立列表型参数网格,列表里的元素是字典型参数。

N_FEATURES_OPTIONS = [2, 4, 8]
C_OPTIONS = [1, 10, 100, 1000]
param_grid = [{'reduce_dim': [PCA(iterated_power=7), NMF()],'reduce_dim__n_components': N_FEATURES_OPTIONS,'classify__C': C_OPTIONS},{'reduce_dim': [SelectKBest(chi2)],'reduce_dim__k': N_FEATURES_OPTIONS,'classify__C': C_OPTIONS},
]
reducer_labels = ['PCA', 'NMF', 'KBest(chi2)']

函数GridSearchCV在建立的管道上,按照指定的参数网格,以3倍交叉验证法穷尽地搜索一个最终的估计量grid

grid = GridSearchCV(pipe, cv=3, n_jobs=1, param_grid=param_grid)

加载手写数字数据集,该数据集在【Python实例第3讲】介绍过。用估计量对象grid在数据集上作拟合。

digits = load_digits()
grid.fit(digits.data, digits.target)

计算平均分数并作图比较三种不同的降维技术在不同的特征数下的分类准确率。

mean_scores = np.array(grid.cv_results_['mean_test_score'])
# scores are in the order of param_grid iteration, which is alphabetical
mean_scores = mean_scores.reshape(len(C_OPTIONS), -1, len(N_FEATURES_OPTIONS))
# select score for best C
mean_scores = mean_scores.max(axis=0)
bar_offsets = (np.arange(len(N_FEATURES_OPTIONS)) *(len(reducer_labels) + 1) + .5)plt.figure()
COLORS = 'bgrcmyk'
for i, (label, reducer_scores) in enumerate(zip(reducer_labels, mean_scores)):plt.bar(bar_offsets + i, reducer_scores, label=label, color=COLORS[i])plt.title("Comparing feature reduction techniques")
plt.xlabel('Reduced number of features')
plt.xticks(bar_offsets + len(reducer_labels) / 2, N_FEATURES_OPTIONS)
plt.ylabel('Digit classification accuracy')
plt.ylim((0, 1))
plt.legend(loc='upper left')
plt.show()

在管道里存储转换器

有时候,如果一个指定的转换器有可能多次使用,可以在管道里存储它的状态。这主要是通过管道参数memory实现。请注意,当拟合一个转换器时,同时存储它是耗时且占用内存资源的。下面举一个在管道存储转换器的实例。

from tempfile import mkdtemp
from shutil import rmtree
from sklearn.externals.joblib import Memory# Create a temporary folder to store the transformers of the pipeline
cachedir = mkdtemp()
memory = Memory(cachedir=cachedir, verbose=10)
cached_pipe = Pipeline([('reduce_dim', PCA()),('classify', LinearSVC())],memory=memory)# This time, a cached pipeline will be used within the grid search
grid = GridSearchCV(cached_pipe, cv=3, n_jobs=1, param_grid=param_grid)
digits = load_digits()
grid.fit(digits.data, digits.target)# Delete the temporary cache before exiting
rmtree(cachedir)

下面显示一部分结果。

精彩内容,请关注微信公众号:统计学习与大数据

【Python实例第5讲】Pipeline与GridSearchCV降维法相关推荐

  1. python中bool函数的用法_python3实战python函数每日一讲 - bool([x])

    bool([x]) 英文说明:Convert a value to a Boolean, using the standard truth testing procedure. If x is fal ...

  2. python实例豆瓣代码_Python实例:通过selenium模拟登陆豆瓣

    前几天写的<Python实例:分析豆瓣影片评论Ver 1.0版本>文章中,关于爬取数据过频繁导致IP被封禁的事情让我对豆瓣数据的爬取中断了.忽然想到之前有写过关于关于使用selenium库 ...

  3. python快速入门精讲_Python快速入门精讲

    基础入门篇 第0章从零开始3 0.1克服编程恐惧3 0.2如何写出好程序4 0.3为什么选择Python5 0.4Python的发展和应用6 0.5一些建议8 0.6多平台搭建Python开发环境10 ...

  4. 在python中浮点数怎样转整数_python 浮点数 转 整数python函数每日一讲 - all()

    W WW.002pc .COM对<python 浮点数 转 整数python函数每日一讲 - all()>总结来说,为我们python培训很实用. all(iterable) 版本:该函数 ...

  5. 【数据分析师-python基础】python基础语法精讲

    python基础语法精讲 1 从数字开始 1.1 理解整数.浮点数.复数几种类型对象 1.2 掌握运算及其相关的常用函数 2 变量.表达式和语句 2.1 变量作用及定义的方法 2.2 变量命名原则和习 ...

  6. python complex函数_python十二星座python函数每日一讲 - complex()

    complex([real[, imag]]) 中文说明: 创建一个值为real + imag * j的复数或者转化一个字符串或数为复数.如果第一个参数为字符串,则不需要指定第二个参数. 参数real ...

  7. 自动化机器学习TPOT及其python实例

    自动化机器学习TPOT及其python实例 自动化机器学习,顾名思义就是输入为整理好的一个数据文件,告知特征和目标.利用该工具可以自动生成模型,实现分类或回归的预测任务.同时还能导出选用的代码管道,以 ...

  8. python接收输入的一行字符只统计数字的个数,Python(统计字符),python实例,输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数...

    Python(统计字符),python实例,输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数 题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 程序分析:利用 ...

  9. 《突破C#编程实例五十讲》源文件下载(2)

    上接<<突破C#编程实例五十讲>源文件下载(1)> 有兴趣的朋友下载看看吧,一共有9个压缩包分3篇文章,下载要注意哦,不然解压要出错哦! 转载于:https://blog.51 ...

  10. Python实例浅谈之三Python与C/C++相互调用

    参考:http://blog.csdn.net/taiyang1987912/article/details/44779719 Python实例浅谈之三Python与C/C++相互调用 二.Pytho ...

最新文章

  1. Python3-onvif协议之相机截图
  2. 通过分析 JDK 源代码研究 Hash 存储机制--转载
  3. C++实现chaining链式算法(附完整源码)
  4. stringstream字符串流的妙用
  5. Python批量删除错误图片、修改文件名以及删除重复图片
  6. 【LeetCode笔记】剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
  7. “Mvc.ExceptionHandling.AbpExceptionFilter – Processing of the LINQ expression ‘xxx’ by ‘NavigationEx
  8. 使用List在Java中的HashMap实现
  9. Python基于seaborn绘制喜欢的热力图,不同色系一览
  10. Atitit .jvm 虚拟机指令详细解释
  11. IM开发通信协议基础知识(一)---TCP、UDP、HTTP、SOCKET
  12. 通过Python将不同的附件发给不同的收件人
  13. C/C++二路归并排序
  14. 斐讯路由做php,斐讯K2路由双WiFi网速叠加教程
  15. Lenovo y50-70 黑苹果hackintosh 10.14.4 Mojave 更新后开机黑屏,引导失败,无法开机
  16. 【深度学习】Mask DINO四部曲—DETR潘多拉魔盒的正确打开方式
  17. 解决Windows 10控制面板里原本的索引选项变成Indexing Option Control Panel (32-bit)及空白图标的问题
  18. handler机制,成功跳槽百度工资从15K涨到28K,挥泪整理面经
  19. awk 不一样的分隔符 - 空格分隔符
  20. Azure 开发者新闻快讯丨开发者6月大事记一览

热门文章

  1. 关于msgpack序列化后的消息包是否再压缩
  2. 销售转向java编程的开始之路
  3. windows phone (24) Canvas元素A
  4. 计算机网络网络层之IP协议(5)——IP子网划分与子网掩码
  5. Security+ 学习笔记41 安全网络技术
  6. python基础知识-01-编码输入输出变量
  7. vue 数组遍历方法forEach和map的原理解析和实际应用
  8. 比特币 的 正统 ——BCH
  9. Android 最新原生定位折腾总结科普
  10. 【BZOJ3942】Censoring [KMP]