如何自动化编码过程?

数据挖掘 机器学习 熊猫 特征工程 编码 卡格尔
2021-10-05 16:31:02

我正在处理在 Kaggle 上举办的波士顿挑战赛,我仍在完善我的功能。查看数据集,我意识到有些列需要用二进制编码,有些用十进制编码(将它们排在 n 的范围之外),有些需要单热编码。我收集了这些列并将它们分类在不同的列表中(至少基于我对它们的数据应该如何编码的判断):

categorical_columns = ['MSSubClass', 'MSZoning', 'Alley', 'LandContour', 'Neighborhood', 'Condition1', 'Condition2',
                       'RoofStyle', 'RoofMatl', 'Exterior1st', 'Exterior2nd', 'MasVnrType', 'Foundation', 'Heating',
                       'Functional', 'GarageType', 'PavedDrive', 'SaleType', 'SaleCondition']

binary_columns = ['Street', 'CentralAir']

ranked_columns = ['LotShape', 'Utilities', 'LandSlope', 'ExterQual', 'ExterCond', 'BsmtQual', 'BsmtCond',
                  'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2', 'HeatingQC', 'KitchenQual', 'FireplaceQu',
                  'GareFinish', 'GarageQual', 'GarageCond', 'PoolQC', 'Fence', 'MiscFeature']

一位 stackexchange 用户建议我使用pandas.get_dummies()方法对分类变量进行一次热编码MSZoning,并将其附加到如下变量:

OHE_MSZoning = pd.get_dummies(train['MSZoning'])

我想知道如何使用函数和控制流语句(如for-loop.

1个回答

我是 Stackexchange 的用户,嗨!我编写了一个函数,它在你的所有代码上迭代 one-hot 编码categorical_columns

def serial_OHE(df, categorical_columns):

    # iterate on each categorical column
    for col in categorical_columns:

        # take one-hot encoding
        OHE_sdf = pd.get_dummies(df[col])

        # drop the old categorical column from original df
        df.drop(col, axis=1, inplace=True)

        # attach one-hot encoded columns to original dataframe
        df = pd.concat([df, OHE_sdf], axis = 1, ignore_index = True)

    return df

所以你可以这样称呼它:

df = serial_OHE(df, categorical_columns)

让我知道有任何问题。