sklearn自定义pipeline的数据处理

将自定义的频数编码处理整合到sklearn的pipeline流程里面:

python 复制代码
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.pipeline import make_pipeline, Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import PolynomialFeatures # 多项式
from sklearn.metrics import confusion_matrix, classification_report, roc_auc_score
import lightgbm as lgb

import pandas as pd

def load_data(path):
    data = pd.read_csv(path,usecols=lambda col: col != 'id')
    data['subscribe'] = data['subscribe'].apply(lambda x: 1 if x == 'yes' else 0,)
    return data

# 自定义转换器1 将类别特征按频次编码
class Freqencode(BaseEstimator, TransformerMixin):
    def __init__(self, cat_cols=[]):
        self.cat_cols = cat_cols
    # 返回对象本身
    def fit(self, X, y=None):
        # 计算统计量
        return self
    # 转换数据
    def transform(self, X):
        # 数据转换逻辑
        for col in self.cat_cols:
            freq = X[col].value_counts(normalize=True).to_dict()
            X[col] = X[col].map(freq)
        return X


def pipeline_model(cat_cols):
    pip_model = Pipeline(steps=[
                    ('freq_encode', Freqencode(cat_cols=cat_cols)),
                    ('imputer', SimpleImputer(strategy='mean')),
                    ('poly', PolynomialFeatures(degree=2, interaction_only=False, include_bias=False)),
                    ('model', lgb.LGBMClassifier(verbose=-1)),
                    ])
    return pip_model


if __name__ == '__main__':
    path = r"C:\Users\12048\Desktop\python_code\data\train.csv"
    data = load_data(path)
    # 类别特征
    cat_cols = list(data.select_dtypes(include=['object']).columns)

    x, y = data.drop(labels='subscribe', axis=1), data['subscribe']
    pip_model = pipeline_model(cat_cols)
    pip_model.fit(x, y)

    print('训练集表现:')
    prob = pip_model.predict_proba(x)[:,1]
    train_pred = [1 if i>0.5 else 0 for i in prob]
    print('混淆矩阵:\n',confusion_matrix(y, train_pred))
    print('模型报告:\n',classification_report(y, train_pred))
    print('auc:',roc_auc_score(y, prob))
相关推荐
智驱力人工智能2 分钟前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
qq_160144875 分钟前
亲测!2026年零基础学AI的入门干货,新手照做就能上手
人工智能
Howie Zphile6 分钟前
全面预算管理难以落地的核心真相:“完美模型幻觉”的认知误区
人工智能·全面预算
人工不智能5778 分钟前
拆解 BERT:Output 中的 Hidden States 到底藏了什么秘密?
人工智能·深度学习·bert
盟接之桥11 分钟前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
kfyty72511 分钟前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎13 分钟前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
h64648564h28 分钟前
CANN 性能剖析与调优全指南:从 Profiling 到 Kernel 级优化
人工智能·深度学习
数据与后端架构提升之路30 分钟前
论系统安全架构设计及其应用(基于AI大模型项目)
人工智能·安全·系统安全
忆~遂愿33 分钟前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能