目标编码:填充扩展平均编码值中生成的 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的主要内容,如果未能解决你的问题,请参考以下文章