为什么在Sklearn管道中进行OneHotEncoding后,我得到的列比预期的多?

2024-06-28 20:22:08 发布

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

我正在使用sklearn管道对数据进行预处理

from sklearn.pipeline import Pipeline
from sklearn.impute import KNNImputer
from sklearn.preprocessing import StandardScaler, LabelEncoder, OneHotEncoder

numeric_transformer = Pipeline(steps=[('scaler', StandardScaler()),
    ('imputer', KNNImputer(n_neighbors=2,weights='uniform', metric='nan_euclidean', add_indicator=True))
   ])
categorical_transformer = Pipeline(steps=[ 
    ('one_hot_encoder', OneHotEncoder(sparse=False, handle_unknown='ignore'))])


from sklearn.compose import make_column_selector as selector

numeric_features = ['Latitud','Longitud','Habitaciones','Dormitorios','Baños','Superficie_Total','Superficie_cubierta']
categorical_features = ['Tipo_de_propiedad']
from sklearn.compose import ColumnTransformer
preprocessor = ColumnTransformer(
   transformers=[
    ('numeric', numeric_transformer, numeric_features, selector(dtype_exclude="category"))
   ,('categorical', categorical_transformer, categorical_features, selector(dtype_include="category"))])

功能Tipo_de_propiedad有3类:“Departamento”、“Casa”、“PH”。所以其他7个特性加上这些假人在转换后应该给我10个,但是当我应用fit_transform时,它返回14个特性

train_transfor=pd.DataFrame(preprocessor.fit_transform(X_train))
train_transfor.head()

output

当我使用pd.get_dummies时,它工作得很好,但我不能用它来应用于PipelineOneHotEncoder很有用,因为我可以适应火车集并在测试集上转换

dummy=pd.get_dummies(df30[["Tipo_de_propiedad"]])
df_new=pd.concat([df30,dummy],axis=1)
df_new.head()

output


Tags: fromimportpipelinedetrainsklearnselectorpd