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))
相关推荐
周末程序猿7 分钟前
LLM智能路由实践:通过 Harness 工程节约模型成本
人工智能·agent
冬奇Lab9 分钟前
代码库知识库系列(04):三种 Chunking 策略对比——AST 精确分割反而输了?
人工智能
宋哥转AI43 分钟前
深入理解 AI Agent 02|混合检索与重排序实战:BM25、RRF 与 Cross-Encoder 的工程实践
人工智能
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-08-01
人工智能·深度学习·神经网络·搜索引擎·百度
小燕子~~1 小时前
PS 怎么调整图片尺寸?4 种方法避免拉伸变形与放大失真
图像处理·人工智能·ai·aigc·photoshop
小K讲AI营销1 小时前
AI 链定价逻辑切换:用“估值透支“框架重估一个月跌三成
人工智能
龙山云仓1 小时前
八一亮剑 · 造化进行时(AI-类人)
人工智能
lipku2 小时前
数字人直播开源项目LiveStream
python·开源·数字人·数字人直播
小赵AI手记2 小时前
技术拆解(十五)具身智能:RT-2为什么能听懂“灭绝动物”?VLM知识如何变成动作
人工智能·机器人
就是一顿骚操作2 小时前
全球 AI 大事件新闻汇总 2026-08-01
大数据·人工智能