掌握Python 机器学习 读书笔记 9 (流水线 && 算法保存)

这篇具有很好参考价值的文章主要介绍了掌握Python 机器学习 读书笔记 9 (流水线 && 算法保存)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

cha14 流水线

在机器学习里可以看到有一些必要的步骤, 这些步骤是可以作为workflow 自动化的。 而且流水线可以对每个fold来进行处理, 这样很大程度避免了数据泄露。 这也是为什么使用流水线的原因。

14.1 数据准备和建模的流水线

使用机器学习的时候很容易落入一个陷阱, 就是泄露你的训练数据到测试数据。 为了不陷入这个陷阱, 你需要严格的把训练和测试数据分开。 比如一种情况, 你在做正则化和标准化给整个数据集的时候, 很可能把整个数据集进行了处理。 这是不对的, 因为包括了训练和测试数据。 Pipeline 流水线会在这个地方帮助到你, 就是说在标准化的时候可以严格的作用在每fold上, 而不是互相干扰。 如下例:

  • 其实从例子你看不到内在的这个处理, 这个是具体实现的时候
# Create a pipeline that standardizes the data then creates a model
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# load data
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
# create pipeline
estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('lda', LinearDiscriminantAnalysis()))
model = Pipeline(estimators)
# evaluate pipeline
kfold = KFold(n_splits=10, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

# 0.773462064252

14.2 特征抽取和建模流水线

特征抽取是另外一个很容易数据泄露的过程。 比如数据准备的时候, 特征抽取过程必须限定在你的训练数据里面。 而Pipeline流水线提供了一个FeatureUnion的方法帮你. 它可以把几种特征抽取放在一起然后得到更大的一组特征。 而且更为重要的是, 它会作为在每一个fold上, 而不是全部。

这个过程有四个部分:

  • 用PCA 来做特征抽取
  • 用统计选择来做特征抽取
  • 特征联合
  • 做逻辑回归
# Create a pipeline that extracts features from the data then creates a model
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.pipeline import FeatureUnion
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest
# load data
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
# create feature union
features = []
features.append(('pca', PCA(n_components=3)))
features.append(('select_best', SelectKBest(k=6)))
feature_union = FeatureUnion(features)
# create pipeline
estimators = []
estimators.append(('feature_union', feature_union))
estimators.append(('logistic', LogisticRegression()))
model = Pipeline(estimators)
# evaluate pipeline
kfold = KFold(n_splits=10, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

# 0.776042378674


14.3 其他

    1. Data Leakage定义

存在和利用这种倒‘因’为‘果’的feature的现象,叫数据竞赛中的Data Leakage。

这里的Data Leakage 跟其他场合说的数据安全数据泄漏完全不一样。从字面上理解,我们说的Data Leakage不是数据泄漏,而是因果关系的纰漏,是由于数据准备过程中出现的失误,使模型沿着有纰漏的,甚至是颠倒的因果关系进行预测,但得到极好的预测结果。

案例 Chris老师就举过一个非常经典的例子。在处理电信用户流失的时候,用原有的数据集轻轻松松就可以把AUC达到0.99以上。这让人非常警惕。于是Chris老师仔细查看了一下模型和数据,原来数据中有一个权重极高的feature是“3个月内的缴费纪录”。很多流失用户的账户内,这个feature的值是0。再进一步,他跟会计核实了一下,在会计记账中,这个feature 代表的是用户已经流失后的三个月的缴费纪录,那肯定就是0了。这是典型的因果关系颠倒。

竞赛选手们肯定希望自己能够找到Data Leakage, 这样排名就可以大幅度提升。但对于竞赛主办方,或者实际工作中的数据科学家,则要千方百计识别Data Leakage,要不然比赛会被引入歧途,还会影响日常工作质量。

refer to 1 data leakage http://blog.csdn.net/jiandanjinxin/article/details/54633475

17 保存和使用你的算法

这章是告诉大家如何保存你的算法, 然后如何实际使用。 通过本章的学习, 你可以知道

  • 序列化算法的重要性
  • 使用pickle来序列化和反序列化学习模型
  • 使用joblib来序列化和反序列化学习模型

17.1 使用pickle来持久化你的算法

# Save Model Using Pickle
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from pickle import dump
from pickle import load
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33, random_state=7)
# Fit the model on 33%
model = LogisticRegression()
model.fit(X_train, Y_train)
# save the model to disk
filename = 'finalized_model.sav'
dump(model, open(filename, 'wb'))
# some time later...
# load the model from disk
loaded_model = load(open(filename, 'rb'))
result = loaded_model.score(X_test, Y_test)
print(result)

# 0.755905511811

17.2 使用joblib来持久化你的算法

# Save Model Using joblib
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.externals.joblib import dump
from sklearn.externals.joblib import load
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33, random_state=7)
# Fit the model on 33%
model = LogisticRegression()
model.fit(X_train, Y_train)

# save the model to disk
filename = 'finalized_model.sav'
dump(model, filename)
# some time later...
# load the model from disk
loaded_model = load(filename)
result = loaded_model.score(X_test, Y_test)
print(result)

# 0.755905511811

两种办法没有看出啥区别, 就是包不同: joblib 是scikitlearn里面提供的, 而pickle 则是单独的一个。

14.3 一些注意点

  • python 版本
  • library 的版本
  • 使用手册的序列化

作者:zzbb

原文地址:https://my.oschina.net/sizhe/blog/1591642文章来源地址https://www.toymoban.com/news/detail-837391.html

喜欢 0

到了这里,关于掌握Python 机器学习 读书笔记 9 (流水线 && 算法保存)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云计算与大数据笔记之Spark【重点:流水线机制】

    图片和部分笔记来自于厦门大学-林子雨-大数据技术原理与应用(第3版) 配套PPT Storm、Hadoop和Spark都是处理大数据的框架,但它们各自在设计上有着不同的侧重点,这导致了它们在实际应用中的不同定位。 主要组件 :Hadoop Distributed File System (HDFS) 和 MapReduce。 设计理念 :主要

    2024年04月16日
    浏览(41)
  • DevOps落地笔记-14|部署流水线:打造一站式部署的关键平台

    上一课时我主要介绍了实现自动化测试的范围、流程和结构图,自动化测试是持续集成实践不可或缺的一部分,从而使得软件向高效率和高质量迈进了一大步。持续集成主要关注的是代码是否可以编译成功、是否可以通过单元测试和验收测试等。但持续集成并不能实现软件包

    2024年02月22日
    浏览(62)
  • 【计算机网络笔记】传输层——可靠数据传输之流水线机制与滑动窗口协议

    什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率 计算机网络体系结构概念 OSI参考模型

    2024年02月06日
    浏览(42)
  • 1.6流水线:流水线、流水线周期、流水线执行时间、流水线吞吐率、流水线加速比

    相关参数计算:流水线执行时间计算、流水线吞吐率、流水线加速比等。 流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均

    2024年02月09日
    浏览(50)
  • MLOPS:大数据/服务器下的大规模机器学习技术—流水线处理技术的简介(标准化/自动化/可复用化)、常用框架(Pipeline/TFX、Airflow/Beam/Kubeflow/MLflow、Fli

    MLOPS:大数据/服务器下的大规模机器学习技术—流水线处理技术的简介(标准化/自动化/可复用化)、常用框架(Pipeline/TFX、Airflow/Beam/Kubeflow/MLflow、Flink/Kafka)之详细攻略 目录 流水线处理技术的简介 1、流水线处理技术的概述(标准化/自动化/可复用化)

    2024年02月08日
    浏览(55)
  • 计算机系统基础(六)之RISC-V流水线设计——用ChatGPT辅助学习

    一、CPU的流水线通常被划分为五个部分,它们是: 取指令(Instruction Fetch):从内存中获取指令并将其放入指令寄存器中。 指令译码(Instruction Decode):将指令从指令寄存器中读取并解码成相应的操作。 执行指令(Execution):根据操作码执行指令,可能需要读取寄存器或内

    2024年02月03日
    浏览(38)
  • 8位加法器的流水线设计(2级流水、四级流水)

    思考:流水线的设计是为了提高频率,在一个耗时比较长的组合逻辑中,加入寄存器, 可以将这个较长的组合逻辑分裂几份,从而提升主频,缺点是增加了寄存器的资源。 二级流水线的加法器的设计思想如下: 在第一个周期完成低四位的加法计算,使用一个四位加法器即可

    2024年02月11日
    浏览(42)
  • 云效-流水线(基本教程)

    阿里云效地址: https://accountid-devops.aliyun.com/ 代码在码云, 服务器在腾讯云, 代码是个聚合代码 1. 选择适合自己的模板 2. 创建码云链接 3. 选择代码仓库, 分支即可下一步 4. 部署,主机部署 5. 保存运行(获取打包路径) 6. 完善部署命令 按自己的需求进行填写, 包括打包成docker镜像

    2024年02月09日
    浏览(52)
  • jenkins流水线

    1、 二、 三、 四、 五、 六、  

    2024年02月05日
    浏览(52)
  • Jenkins的流水线详解

    来源:u.kubeinfo.cn/ozoxBB 什么是流水线 声明式流水线 Jenkinsfile 的使用 jenkins 有 2 种流水线分为 声明式流水线 与 脚本化流水线 ,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。 声明式流水线 在声明式流水线语

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包