目标编码:填充扩展平均编码值中生成的 NaN

Posted

技术标签:

【中文标题】目标编码:填充扩展平均编码值中生成的 NaN【英文标题】:Target Encoding : Fill NaN generated in expanding mean encoded values 【发布时间】:2019-06-20 11:01:04 【问题描述】:

我正在研究目标列中有五个类的多类分类问题。我使用扩展平均编码(目标编码)为分类变量生成了特征。该方法基于使用每个值的目标变量的平均值对分类变量值进行编码。

这也会导致一些 NaN 值,例如“Transaction-Type_mean_target”列。

    填充这些 NaN 值的最佳方法是什么?我应该填写 这些与列均值。

    如何为我的测试数据生成平均编码作为 目标/因变量“投诉状态”不存在?

输入数据:

生成平均编码:

def add_feat_mean_encoding(col_list):
    """
        Expanding mean encoding 
    """
    for i in col_list:
        cumsum = train.groupby(i)['Complaint-Status'].cumsum() - train['Complaint-Status']
        cumcnt = train.groupby(i).cumcount()
        train[i+'_mean_target'] = cumsum/cumcnt

cat_var = ['Transaction-Type','Complaint-reason','Company-response','Consumer-disputes']
add_feat_mean_encoding(cat_var)

【问题讨论】:

你好,只是为了理解:你的特征中哪些是分类的,哪些是标量的? CmpantStatus 是标量或分类(可能是布尔值,0/1)? 【参考方案1】:

如果你的特征是分类的,用均值估算没有意义,至少这意味着你为 Nans 创造了新的价值。那是你要的吗 ?

为了回答您的问题:

    对于分类特征,您可以尝试不同的方法。您可以从 scikit 的SimpleImputer 开始(参见here),例如:
FILL_VALUE=100
imp_1 = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
imp_2 = SimpleImputer(missing_values=np.nan, strategy='constant', fille_value=FILL_VALUE)

    请提供有关您的测试集的信息:有哪些功能?如果测试集中没有Complaint-Status这个特性,有两种方法:

    您可以使用训练集预测测试集的特征Complaint-Status(以及您希望预测的特征Complaint-Status,作为Y)。尝试不同的分类器,然后选择能提供最佳结果的分类器。 您还可以使用二维 Y,实际 Y + Complaint-Status

【讨论】:

以上是关于目标编码:填充扩展平均编码值中生成的 NaN的主要内容,如果未能解决你的问题,请参考以下文章

熊猫:在每组中按平均值填充缺失值

熊猫:在每组中按平均值填充缺失值

如何使用组均值填充 df 中的 nan 值?

在pyspark中用平均值填充缺失值

使用前几天同一小时的平均值填充 NaN

Pandas:在每组中平均填充缺失值比变换更快