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))
相关推荐
CHENKONG_CK4 分钟前
RFID 技术赋能汽车制造:发动机气缸缸体生产线智能化升级案例
人工智能·生产制造·rfid
葡萄城技术团队1 小时前
实战视角:为何专用小型语言模型(SLM)正成为企业 AI 选型新宠—与 LLM 的全面对比指南
大数据·人工智能·语言模型
AndrewHZ1 小时前
【图像处理基石】老照片修复入门:用技术唤醒沉睡的回忆
图像处理·人工智能·opencv·计算机视觉·cv·图像修复
GIS数据转换器1 小时前
科技赋能农业现代化的破局之道
大数据·科技·安全·机器学习·智慧城市·制造
PONY LEE1 小时前
Flink keyby使用随机数踩坑记
大数据·python·flink
一只小松许️1 小时前
量化投资从入门到入土:金融基础概念
python·金融
AI_Auto1 小时前
MES系列-制造流程数字化的实现
大数据·人工智能·自动化·制造·数字化
DolphinDB智臾科技1 小时前
DolphinDB × 浙江大学合作新课——量化金融:理论与应用
人工智能·金融·浙江大学·量化金融·dolphindb
老赵聊算法、大模型备案1 小时前
广西 “人工智能 + 制造” 政策科普:十大支持方向与补贴明细
人工智能·aigc·制造
格林威1 小时前
AOI在PCB制造领域的核心应用
人工智能·数码相机·计算机视觉·视觉检测·制造·pcb·aoi