使用带OnehotEncoder和StandaScaler+直通的make_column_变压器

2024-09-27 04:26:25 发布

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

每当我同时使用StandardScaler和OnehotEncoding时,我无法使用余数class='passthrough'。不管我怎么说,我都有问题。要么是参数前的关键字,要么是fit_-tranform的问题。。。你说吧。我现在做的是:

trans_cols= make_column_transformer((OneHotEncoder(),['job', 'marital', 'education', 
 'default','housing','loan','contact','month','poutcome']),remainder='passthrough')

trans_cols.fit_transform(X)

here are my columns:
Index(['age', 'job', 'marital', 'education', 'default', 'balance', 'housing',
   'loan', 'contact', 'month', 'duration', 'campaign', 'pdays', 'previous',
   'poutcome', 'y'],
  dtype='object')

上面的代码是有效的,当使用余数关键参数时,我无法组合这两个估计器。以下是我尝试的原因:

trans_cols= make_column_transformer((OneHotEncoder(),['job', 'marital', 'education', 'default','housing','loan',
                                                  'contact','month','poutcome']),remainder='passthrough',

(StandardScaler(),['age', 'job', 'marital', 'education', 'default', 'balance',
                  'housing','loan', 'contact', 'month', 'duration',
                  'campaign', 'pdays', 'previous','poutcome']))

但是,在我删除remainder并保留2个元组之前,上述方法不起作用。这是可以理解的。然而,这样做是试图编码我的一些数字,我有一条消息告诉我,它遇到了一些列有浮动。加上我的准确性下降严重


Tags: defaulttrans参数contactjobcolseducationloan
1条回答
网友
1楼 · 发布于 2024-09-27 04:26:25

首选做法是不要在一个热编码列上使用StandardScaler。下面的第一个示例演示了OHE在分类变量上的应用,以及StandardScaler在数字列上的应用。第二个示例显示了OHE在选定列上的顺序应用和StandardScaler在所有列上的顺序应用,但不建议这样做

示例1:

import numpy as np
import pandas as pd

from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.compose import make_column_transformer
from sklearn.pipeline import Pipeline

df = pd.DataFrame({'Cat_Var': np.random.choice(['a', 'b'], size=5),
                   'Num_Var': np.arange(5)})

cat_cols = ['Cat_Var']
num_cols = ['Num_Var']

col_transformer = make_column_transformer(
        (OneHotEncoder(), cat_cols),
        remainder=StandardScaler())

X = col_transformer.fit_transform(df)

输出:

df
Out[57]: 
  Cat_Var  Num_Var
0       b        0
1       a        1
2       b        2
3       a        3
4       a        4

X
Out[58]: 
array([[ 0.        ,  1.        , -1.41421356],
       [ 1.        ,  0.        , -0.70710678],
       [ 0.        ,  1.        ,  0.        ],
       [ 1.        ,  0.        ,  0.70710678],
       [ 1.        ,  0.        ,  1.41421356]])

例2:

col_transformer_2 = ColumnTransformer(
        [('cat_transform', OneHotEncoder(), cat_cols)],
        remainder='passthrough'
        )

pipe = Pipeline(
        [
         ('col_tranform', col_transformer_2),
         ('standard_scaler', StandardScaler())
         ])

X_2 = pipe.fit_transform(df)

输出:

X_2
Out[62]: 
array([[-1.22474487,  1.22474487, -1.41421356],
       [ 0.81649658, -0.81649658, -0.70710678],
       [-1.22474487,  1.22474487,  0.        ],
       [ 0.81649658, -0.81649658,  0.70710678],
       [ 0.81649658, -0.81649658,  1.41421356]])

相关问题 更多 >

    热门问题