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))
相关推荐
果冻人工智能1 分钟前
AI能否取代软件架构师?我将4个大语言模型进行了测试
大数据·人工智能·深度学习·语言模型·自然语言处理·ai员工
Acrel136119655142 分钟前
Acrel-EIoT 能源物联网云平台在能耗监测系统中的创新设计
大数据·人工智能·能源·创业创新
豆豆10 分钟前
机器学习 day02
人工智能·机器学习
背太阳的牧羊人15 分钟前
[CLS] 向量是 BERT 类模型中一个特别重要的输出向量,它代表整个句子或文本的全局语义信息
人工智能·深度学习·bert
ayiya_Oese1 小时前
[数据处理] 6. 数据可视化
人工智能·pytorch·python·深度学习·机器学习·信息可视化
大腾智能1 小时前
五一旅游潮涌:数字化如何驱动智慧旅游升级
大数据·人工智能·数字化·旅游数字化
没有梦想的咸鱼185-1037-16631 小时前
【大语言模型ChatGPT4/4o 】“AI大模型+”多技术融合:赋能自然科学暨ChatGPT在地学、GIS、气象、农业、生态与环境领域中的应用
人工智能·python·机器学习·arcgis·语言模型·chatgpt·数据分析
老艾的AI世界1 小时前
AI制作祝福视频,直播礼物收不停,广州塔、动态彩灯、LED表白(附下载链接)
图像处理·人工智能·深度学习·神经网络·目标检测·机器学习·ai·ai视频·ai视频生成·ai视频制作
IT古董1 小时前
【漫话机器学习系列】250.异或函数(XOR Function)
人工智能·机器学习
Blossom.1181 小时前
虚拟现实(VR)与增强现实(AR)在教育领域的应用:开启沉浸式学习新时代
人工智能·深度学习·学习·机器学习·ar·制造·vr