Pipeline管道

目录

  • 一、介绍
  • 二、为什么使用pipeline
    • 1.读入数据集
    • 2、数据预处理
      • 1、缺失值、重复值处理
      • 2、数据编码、标准化
    • 3、分割数据集
    • 4、模型训练、预测
    • 5、调参:网格搜索
    • 6、模型保存
    • 7、预测新进用户
  • 三、pipeline示例
    • 1、读取数据
    • 2、数据处理
      • 1、数据类型拆分
      • 2、分类变量处理
      • 3、数值变量处理
    • 3、建立pipeline
    • 4、分割数据集
    • 5、建模、调参
    • 6、查看最优参数组合
    • 7、查看预测效果
    • 8、模型保存
    • 9、使用新数据集预测

一、介绍

pipelines直译为管道,类似于流水线的意思,可以将数据预处理和建模流程封装起来。在数据处理过程中,很多步骤都是重复或者类似的,比如数据处理,特征选择,标准化,分类等,pipeline就可以实现以下几点好处

  • 1、简化代码:直接将步骤封装成完整的工作流,避免代码重复
  • 2、更少出bug,流程规范话,避免在建模和部署过程中漏掉某个步骤
  • 3、更易于生产/复制:直接调用fit和predict来对管道中所有的算法模型进行一次性进行训练和预测
  • 4、简化模型验证过程:网格搜索(grid search)可以遍历管道中所有评估器等参数

pipeline数用(key,value)的列表构建的,其中key数步骤名称的字符串,而value时一个估计器对象

Sklearn中有2个pipeline类型的模块,分别是

  • 1、ColumnTransformer,主要用于用于数据于特征处理的工作流,可并行
  • 2、pipeline,可用于任何需求的工作流,只能串行
    注意:管道中的所有评估器,除了最后一个评估器,管道的所有评估器必须是转换器。例如,必须有transform方法。最后一个评估器的类型不限(转换器、分类器等)

二、为什么使用pipeline

正如介绍中所说,可以简化流程,如果不使用呢,请看如下模型示例

1.读入数据集

# 读入数据集,数据探索
df = pd.read_csv('./data/L1_L2/保险数据_第一期.csv')
df.head(5)

在这里插入图片描述

2、数据预处理

1、缺失值、重复值处理

# 数据与特征处理
#重复值
df.duplicated().sum()

#缺失值(缺失值占比很少,直接删除)
df1 = df.dropna()  # 异常值,可不处理

#分割标签
labels = df1.pop('resp_flag')

2、数据编码、标准化

# 数据类型拆分
cat_cols = df1.select_dtypes(include=['object']) # 分类型变量
num_cols = df1.select_dtypes(exclude=['object']) # 数值型变量

# 数据编码
from sklearn.preprocessing import OrdinalEncoder
cat_encode = OrdinalEncoder()
cat_trans = cat_encode.fit_transform(cat_cols)
df_cat = pd.DataFrame(cat_trans,columns=cat_cols.columns)

# 数据标准化
from sklearn.preprocessing import StandardScaler
num_std = StandardScaler()
num_trans = num_std.fit_transform(num_cols)
df_num = pd.DataFrame(num_trans,columns=num_cols.columns)

# 数据合并
data = pd.concat([df_cat,df_num],axis=1)

3、分割数据集

# 分割测试集
from sklearn.model_selection import train_test_split
xtrainn,xtest,Ytrain,Ytest = train_test_split(data,labels,test_size=0.3,stratify=labels,random_state=42)

4、模型训练、预测

# 模型选择-决策树
from sklearn.tree import DecisionTreeClassifier
DT = DecisionTreeClassifier()
DT.fit(xtrainn,Ytrain)

from sklearn.metrics import classification_report
print(classification_report(Ytest,DT.predict(xtest)))

在这里插入图片描述

# 模型选择-逻辑回归
from sklearn.linear_model import LogisticRegression
LR = LogisticRegression()
LR.fit(xtrainn,Ytrain)

from sklearn.metrics import classification_report
print(classification_report(Ytest,LR.predict(xtest)))

在这里插入图片描述

5、调参:网格搜索

# 调参,网格搜索
from sklearn.model_selection import GridSearchCV

#参数字典
param = {'C':np.arange(1,2,0.1),    # 启、止,步长
         'class_weight':[None,'balanced']
         }
lr = LogisticRegression()
grid_lr = GridSearchCV(lr,param,n_jobs=1)
grid_lr.fit(xtrainn,Ytrain)

print(classification_report(Ytrain,grid_lr.predict(xtrainn)))
grid_lr.best_params_
grid_lr.best_score_

在这里插入图片描述

6、模型保存

# 模型保存(与读取)
import joblib
joblib.dump(grid_lr,'grid_lr_model_20240516.joblib')

在这里插入图片描述

7、预测新进用户

数据读取

df_new = pd.read_csv('./data/L1_L2/保险案例_新进用户.csv')
df_new

在这里插入图片描述

grid_lr.predict(df_new) 

在这里插入图片描述
结论:从报错不难看出,需要重新做数据清洗,很麻烦,所以考虑使用pipeline。

三、pipeline示例

1、读取数据

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity='all'

import pandas as pd
import numpy as np

import warnings
warnings.filterwarnings('ignore')

# 数据导入、处理
df1 = pd.read_csv('./data/L1_L2/保险数据_一.csv')
labels = df1.pop('resp_flag') #取出y

2、数据处理

1、数据类型拆分

# 数据类型拆分
cat_cols = df1.select_dtypes(include=['object']) # 分类型变量
num_cols = df1.select_dtypes(exclude=['object']) # 数值型变量

引入机器学习相关包

from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OrdinalEncoder,StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer

2、分类变量处理

# 分类型变量
cat_imp = SimpleImputer(strategy='most_frequent')
cat_encode = OrdinalEncoder()
cat_pipeline = Pipeline(steps=[('cat_imp',cat_imp),('cat_encode',cat_encode)]) # list of (name ,transform) tuples

3、数值变量处理

# 数值型变量
num_imp = SimpleImputer(strategy='mean')
num_std = StandardScaler()
num_pipeline = Pipeline(steps=[('num_imp',num_imp),('num_std',num_std)])

# columnTransformer,list(name,transformer,columns) tuples
cat_trains = ColumnTransformer(transformers=[('cat_pipeline',cat_pipeline,cat_cols.columns),
                                             ('num_pipeline',num_pipeline,num_cols.columns)])

单元测试

# 单元测试
aaa = cat_trains.fit_transform(df1)
pd.DataFrame(aaa)

3、建立pipeline

# 实例化模型,建立pipeline
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()

lr_pipeline = Pipeline(steps=[('cat_trains',cat_trains),('lr',lr)])

4、分割数据集

# 分割测试集 
from sklearn.model_selection import train_test_split
xtrainn,xtest,Ytrain,Ytest = train_test_split(df1,labels,test_size=0.3,stratify=labels,random_state=42)

5、建模、调参

# 网格搜索,使用<estimator>_<parameter>访问每个transform内部等参数
from sklearn.model_selection import GridSearchCV

#参数字典
param = dict(lr__C = np.arange(1,2,0.1),    # 启、止,步长
         lr__class_weight = [None,'balanced'],
         cat_trains__num_pipeline__num_imp__strategy = ['mean','median'] #从外向内一层层写转换器
         )

grid_lr_pipeline = GridSearchCV(lr_pipeline,param,cv=3,n_jobs=-1)
grid_lr_pipeline.fit(xtrainn,Ytrain)

在这里插入图片描述

6、查看最优参数组合

grid_lr_pipeline.best_params_
grid_lr_pipeline.best_score_

在这里插入图片描述

7、查看预测效果

from sklearn.metrics import classification_report
print(classification_report(Ytest,grid_lr_pipeline.predict(xtest)))

在这里插入图片描述

8、模型保存

# 模型保存
import joblib
joblib.dump(grid_lr_pipeline,'grid_lr_pipeline_model_20240516.joblib')

9、使用新数据集预测

# 预测新进用户
df_new = pd.read_csv('./data/L1_L2/保险案例_新进用户.csv')
grid_lr_pipeline.predict(df_new)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/674099.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第二证券今日投资参考:猪价趋势上行 电网工程投资力度有望加强

上星期五&#xff0c;两市股指盘中窄幅震动上扬&#xff0c;尾盘翻绿。到收盘&#xff0c;沪指跌0.16%报3086.81点&#xff0c;深证成指跌0.22%报9364.38点&#xff0c;创业板指跌0.44%报1805.11点&#xff0c;两市算计成交7149亿元。工作方面&#xff0c;传媒、轿车、半导体、…

酷开科技丨将运动进行到底!酷开系统开启家庭健身新风尚

随着健康生活方式的普及&#xff0c;健身已经成为了许多人日常生活的重要部分。在这种情况下&#xff0c;居家健身成为了一个非常方便实用的健康生活方式。健身是一种享受&#xff0c;一种与自己独处的方式。它让我们有机会聆听身体的声音&#xff0c;感受心灵的平静&#xff0…

ElasticSearch高级搜索深入,聚合查询深入

文章目录 一、相关性和相关性得分1、概述2、相关性&#xff08;Relevance&#xff09;3、什么是TF-IDF4、BM255、通过Explain API查看TF-IDF6、Boosting 二、bool查询1、概述2、bool查询语法3、如何解决结构化查询“包含而不是相等”的问题4、利用bool嵌套实现should not逻辑 三…

CST电磁仿真软件表面等离子极化激元SPP --- 一维光栅耦合 - 衍射模式, 效率, Floquet端口

这两期我们看一下衍射光栅的高阶衍射、衍射效率、反射率。具体到仿真设置&#xff0c;就是Floquet端口的模式分析&#xff0c;S参数与衍射效率和反射率的关系。那么研究这些衍射和表面等离子极化激元SPP有什么关系呢&#xff1f;关系可大了&#xff0c;光栅是一种能够用来激励出…

促进设备缺陷闭环管理,引入智能巡检系统正当时

经过近些年的应用与发展&#xff0c;智能巡检系统的功能与可操作性已经非常成熟&#xff0c;在巡检工作整合管理、与其他系统调用对接、促进设备缺陷闭环管理方面的优秀表现&#xff0c;使其在安全管理工作中的发挥了超预期的工具价值。 一、巡检工作整合管理 设备巡检管理、安…

前端JS必用工具【js-tool-big-box】学习,检测密码强度

js-tool-big-box 前端工具库&#xff0c;实用的公共方法越来越多了&#xff0c;这一小节&#xff0c;我们带来的是检测密码强度。 我们在日常开发中&#xff0c;为了便于测试&#xff0c;自己总是想一个简单的密码&#xff0c;赶紧输入。但到了正式环境&#xff0c;我们都应该…

Redis连接池

本次实现的Redis连接池是一个单例且多线程安全的连接池。 主要实现的功能为&#xff1a;读取配置&#xff0c;将配置中对应建立redis连接并加入到连接池中&#xff0c;然后从连接池中取出连接使用。每当配置进行修改&#xff0c;重新往池子中加入连接。 通用类 实现一些基础都…

记一次cms代码审计

000&#xff1a;前言 记录一次小型cms代码审计 001&#xff1a;任意文件删除 由于代码繁杂&#xff0c;不再一一展示 /app/controller/kindeditor.class.php 关键漏洞代码 public function delete() {$path ROOT_PATH.$_GET[pic];unlink($path);$flash M("flash&qu…

冶金比例换向阀放大器

冶金比例换向阀是一种重要的液压控制元件&#xff0c;它通过BEUEC比例放大器驱动调节阀门开度来精确控制流量&#xff0c;进而控制压力或速度。在液压系统中&#xff0c;比例阀的接线设备是确保其正常工作和实现精确控制的关键部分。比例阀的接线方式主要包括电流输入和电压输入…

Unix、Linux 软件包管理快速入门对照

Linux&#xff08;RHEL、Ubuntu&#xff09;或者 Unix&#xff08;macOS、FreeBSD&#xff09;可以参看下表快速入门: 命令功能/系统Darwin (macOS)FreeBSDDebian/UbuntuRHEL&#xff08;dnf yum&#xff09;搜索和查找软件包brew searchpkg searchapt listyum list查看软件包…

基于python flask+pyecharts实现的中药数据可视化大屏,实现基于Apriori算法的药品功效关系的关联规则

背景 在中医药学中&#xff0c;物品与功效之间的关联关系研究是一个非常重要的课题。传统中医药学中&#xff0c;很多药物都具有多种功效&#xff0c;而且不同药物对同一种疾病可能具有不同的疗效。因此&#xff0c;挖掘物品与功效之间的关联关系&#xff0c;可以帮助我们更加…

WIN系统 -> 以太网未识别的网络问题

1.方法1 2. 3. 根据诊断提示解决问题。 方法2. 右键以太网属性

Java mybatis

nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for proper 注意 mapper 中&#xff0c;insert into values 中 values 字段和 Java 对象保持一直

快速排序的实现

目录 一、递归 1、霍尔法&#xff1a; 2、挖坑法&#xff1a; 3、前后指针法&#xff1a; 二、非递归 三、完整代码&#xff1a; 基本思想&#xff1a; 先取这个待排序元素序列中的某一个元素最为key值&#xff0c;然后通过这个key值将这个序列分为两边&#xff0c;一边小…

vue-2

vue-cli的安装 vue-cli是一个脚手架工具&#xff0c;它集成了诸多前端技术&#xff0c;包括但不仅限于&#xff1a; webpack、 babel、eslint、http-proxy-middleware、typescript、css pre-prosessor、css module、… 这些工具&#xff0c;他们大部分都要依赖两个东西&…

访问限制

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在类的内部可以定义属性和方法&#xff0c;而在类的外部则可以直接调用属性或方法来操作数据&#xff0c;从而隐藏了类内部的复杂逻辑。但是Python并…

HALCON-从入门到入门-花式读取图片的N种方式

1.废话 很多时候我们不止读取一张图片-读取文件夹下的多张 甚至我们可能想在多个文件夹中读取多张图片。 再变态点我们想再任意若干路径下读取任意若干张图片。 没关系&#xff0c;这些halcon开发人员都替我们考虑到了。 只需要使用下面一个算子 list_files (, files, Fi…

【CMake】CMake入门(五)打包安装程序 使用CMake管理库 打包调试版和发行版

本篇文章不是新手入门教学文章&#xff0c;主要是记录笔者个人的学习笔记 CMake入门&#xff08;五&#xff09; 一、打包二、使用CMake管理库三、打包调试版和发行版 一、打包 发布程序可以有多种形式&#xff0c;比如安装包、压缩包、源文件等。CMake也提供了打包程序cpack可…

电脑数据恢复,6个方法,恢复文件很简单!

“我在使用电脑时&#xff0c;一个不小心就误删了部分重要数据&#xff0c;现在想恢复电脑数据却不知怎么操作了&#xff0c;希望大家帮帮我&#xff01;” 在数字化时代&#xff0c;电脑数据不仅是工作和学习的重要载体&#xff0c;更是我们生活中珍贵的记忆和情感的存储地。然…

二叉树创建和遍历(及相关OJ题)

个人主页 &#xff1a;敲上瘾-CSDN博客二叉树介绍&#xff1a;二叉树(详解)-CSDN博客 目录 一、二叉树的创建 二、二叉树的遍历 1.前序遍历 2.中序遍历 3.后序遍历 4.层序遍历 三、相关计算 1.总节点个数计算 2.叶子节点个数计算 3.深度计算 一、二叉树的创建 关于…