在管道中使用普通编码器

2024-05-16 20:00:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在管道中使用sklearn OrdinalEncoder,同时确保对类别进行正确排序。我该怎么做

例如,我想将“教育水平”和“收入类别”的特征编码如下:

"Education_Level": {
        "Uneducated": 1,
        "High School": 2,
        "College": 3,
        "Graduate": 4,
        "Post-Graduate": 5,
        "Doctorate": 6
},
    "Income_Category": {
        "Less than $40K": 1,
        "$40K - $60K": 2,
        "$60K - $80K": 3,
        "$80K - $120K": 4,
        "$120K +": 5
    }

有人能帮我怎么做吗?我提醒您,我想在管道中使用OrdinalEncoder来执行任务。我可以用replace()手动完成,但是因为我正在创建一个管道,所以我需要编码器对象(至少我想是这样)


Tags: 编码管道排序水平特征sklearn类别level
1条回答
网友
1楼 · 发布于 2024-05-16 20:00:02

您可以在初始化期间指定OrdinalEncoder{}参数。这将确保您的类别具有正确的顺序

您可以执行以下操作:

from sklearn.preprocessing import OrdinalEncoder
from sklearn.compose import make_column_transformer

import pandas as pd

df = pd.DataFrame({
    'Education_Level': ['Uneducated', 'High School', 'College', 'Post-Graduate', 'Doctorate', 'Graduate'],
    'Income_Category' : ['Less than $40K','Less than $40K', '$40K - $60K', '$60K - $80K', '$80K - $120K', '$120K +']
    }
)


cat_education_lvl = [['Uneducated', 'High School', 'College', 'Graduate', 'Post-Graduate', 'Doctorate']]
income_cat = [['Less than $40K', '$40K - $60K', '$60K - $80K', '$80K - $120K', '$120K +']]
transformer = make_column_transformer(
    (OrdinalEncoder(categories=cat_education_lvl), ['Education_Level']),
    (OrdinalEncoder(categories=income_cat), ['Income_Category']),
)

transformer.fit_transform(df)

该变压器将返回以下输出:

array([[0., 0.],
       [1., 0.],
       [2., 1.],
       [4., 2.],
       [5., 3.],
       [3., 4.]])

编辑:如果您想将输出作为一个文件DataFrame,最简单的方法是按如下方式重新创建它:

df_transformed = pd.DataFrame(transformer.fit_transform(df), columns=df.columns)

相关问题 更多 >