【问题标题】:Does OneHotEncoder in SKlearn Drop the original categorical columnSKlearn 中的 OneHotEncoder 是否会删除原始分类列
【发布时间】:2020-04-19 01:03:22
【问题描述】:

我想知道在 SKlearn 中使用 OneHotEncoder 和 Pipeline 时是否会删除原始分类列。因为我看不到随机森林算法输入了什么


#%%
numerical_features =(sorted(X_train2.select_dtypes(include=['float64']).columns))
categorical_features = (sorted(X_train2.select_dtypes(exclude=['float64']).columns))
#%%
values_after_ros=pd.DataFrame(y_train)
values_after_ros1=values_after_ros[0].value_counts()
#%%
preprocess = make_column_transformer((StandardScaler(),numerical_features),(OneHotEncoder(handle_unknown='ignore'),categorical_features))
model = make_pipeline(
    preprocess,RandomForestClassifier(verbose=250))
print(model)


#%%
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_validate
from sklearn.metrics import f1_score
f1= {'f11': make_scorer(f1_score,average=None,labels=[0]),
'f12': make_scorer(f1_score,average=None,labels=[1]),
'f13': make_scorer(f1_score,average=None,labels=[2]),
'f14': make_scorer(f1_score,average=None,labels=[3]),
'f15': make_scorer(f1_score,average=None,labels=[4]),
'f16': make_scorer(f1_score,average=None,labels=[5]),
'f17': make_scorer(f1_score,average=None,labels=[6]),
'refit_score': make_scorer(f1_score,average='micro'),
}

param_grid = {

}
#%%
grid_clf = RandomizedSearchCV(model , param_grid, cv=2,scoring=f1,refit='refit_score' ,n_iter=1,verbose=250, random_state=42)
#%%
grid_clf.fit(ros_xtrain, ros_train_y)
#%%

【问题讨论】:

  • 不,据我记得 sklearn 中的 OHE 保留了原始列。完成数据编码后,您需要手动删除它。
  • @pavel 那么我怎样才能在管道内做到这一点
  • 不幸的是,我从来没有使用过管道,所以不确定它是如何工作的。

标签: python pandas scikit-learn


【解决方案1】:

OHE 不输出转换后的原始列。这是一个例子。

import numpy as np
import pandas as pd

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder

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

pl = Pipeline([('one_hot', OneHotEncoder())])

#Transform the data frame and display the encoded data
X = pl.fit_transform(df)
X.A 

输出

df
Out[14]: 
  Str_col
0       c
1       c
2       b
3       a
4       a

X.A
Out[15]: 
array([[0., 0., 1.],
       [0., 0., 1.],
       [0., 1., 0.],
       [1., 0., 0.],
       [1., 0., 0.]])

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2022-08-03
    • 2016-06-29
    • 2021-06-26
    • 2020-07-28
    • 2020-07-15
    相关资源
    最近更新 更多