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

Python 目标编码:填充扩展平均编码值中生成的NaN,python,machine-learning,data-science,feature-engineering,Python,Machine Learning,Data Science,Feature Engineering,我正在研究目标列中有五个类的多类分类问题。我已经使用扩展平均编码(目标编码)生成了分类变量的特征。该方法基于使用每个值的目标变量平均值对分类变量值进行编码 这也会产生一些NaN值,如“Transaction-Type_mean_target”列中的值 填充这些NaN值的最佳方法是什么?我应该填吗 这些与列的意思一致 如何为测试数据生成均值编码作为 目标/因变量“投诉状态”不存在 输入数据: 生成平均编码: def add_feat_mean_encoding(col_list): ""

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

这也会产生一些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)
    

    如果你的特征是分类的,那么用平均值进行插补是没有意义的,至少这意味着你为NAN创造了一个新的值。这就是你想要的吗

    为了回答您的问题:

  • 对于分类功能,您可以尝试不同的方法。您可以从scikit的
    SimpleImputer
    开始(请参阅),例如:
  • FILL_值=100
    imp_1=SimpleImputer(缺少_值=np.nan,strategy='most_Frequency')
    imp_2=SimpleImputer(缺少_值=np.nan,策略=常量,填充值=填充值)
    
  • 请提供关于测试集的信息:哪些是特性?如果测试集中没有功能
    投诉状态
    ,有两种方法:

    • 您可以使用训练集预测测试集的功能
      投诉状态
      (以及您希望预测的功能
      投诉状态
      ,如Y所示)。尝试不同的分类器,并选择一个提供最佳结果的分类器
    • 您也可以使用二维Y,带有您的实际Y+
      投诉状态

  • 你好,我只是想了解一下:你的特征中哪些是分类的,哪些是标量的?CmpantStatus是标量还是分类(可能是布尔值,0/1)?