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

3
我正在处理一个多类别分类问题,目标列有五个类别。我已经使用扩展平均编码(Target encoding)为分类变量生成了特征。该方法基于将分类变量值编码为每个值的目标变量平均值。
这也会导致一些NaN值,例如“Transaction-Type_mean_target”列。
1. 如何填充这些NaN值?我应该用列平均值来填充吗? 2. 当目标/依赖变量“Complaint-Status”不存在时,如何为我的测试数据生成平均编码?
输入数据:

enter image description here

生成平均编码:
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)? - Catalina Chircu
1个回答

1
如果您的特征是分类的,则用平均值进行插补没有意义,至少这意味着您为NaN创建了一个新值。这是您想要的吗?
为了回答您的问题:
1. 对于分类特征,您可以尝试不同的方法。您可以从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作为Y)来预测测试集的特征Complaint-Status。尝试不同的分类器并选择提供最佳结果的分类器。
  • 您还可以使用二维的Y,其中实际的Y + Complaint-Status

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接