ColumnTransformer学习笔记

简单介绍

  1. 可以一次性实现对不同的列使用不同的处理方法进行处理。
  2. 适合的场景是:不同的特征需要做不同的处理,比如连续变量和标称变量。

    功能

  3. 一次性对不同的列实现不同的处理。

    代码实例

  4. 以下代码主要实现了分别对“Time”列进行了缺失值填充处理,对V1、V2、V3进行了缺失值填充和标准化,其他列不做处理,最终使用处理后的特征进行训练和预测。
  5. 结合了ColumnTransformer和Pipeline。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    from sklearn.compose import ColumnTransformer
    from sklearn.pipeline import Pipeline
    from sklearn.impute import SimpleImputer
    from sklearn.preprocessing import StandardScaler, OneHotEncoder
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import train_test_split, GridSearchCV
    import pandas as pd
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.metrics import roc_auc_score
    # 读取数据

    data=pd.read_csv("/Users/yuxuemin/Documents/pywork/mLearn/jiandu/data/creditcard.csv")

    # 将数据分为特征与标签
    y=data['Class']
    x=data.drop('Class',axis=1)
    train_x,test_x,train_y,test_y=train_test_split(x,y)

    print(data.dtypes)
    print(data.isnull().any())
    f1=['Time']
    f1_transformer=Pipeline(steps=[('imputer',SimpleImputer(strategy='constant',fill_value=1))])
    f2=['V1','V2','V3']
    f2_transformer=Pipeline(steps=[('imputer',SimpleImputer(strategy='constant')),('scaler',StandardScaler())])

    preprocessor=ColumnTransformer(transformers=[('f1',f1_transformer,f1),('f2',f2_transformer,f2)],remainder='passthrough')


    pipe=Pipeline(steps=[('preprocessor',preprocessor),('clf',RandomForestClassifier())])
    model=pipe.fit(train_x,train_y)

    # 预测
    predict_y=model.predict(test_x)
    auc=roc_auc_score(test_y,predict_y)
    print("auc:"+str(auc))

相关文章