首页 > 解决方案 > 编码要在 KMeans 聚类中使用的分类特征

问题描述

我有一个包含数字和分类特征(非数字)的数据集,而分类特征可以有很多值(无限)。我需要将这些数据转换为 KMeans 聚类模型。

目前,我在训练过程中使用 python 函数将所有非数字数据编码为数字格式,并在测试过程中使用相同的函数对非数字数据进行编码。下面的代码是我用来编码非数字特征的函数。

def handle_non_nemeric(df):
  columns = df.columns.values

  for column in columns:
    text_digit_dict = {}
    def convert_to_int(val):
      return text_digit_dict[val]

    if(df[column].dtype != np.float64 or df[column].dtype != np.int64):
      column_content = df[column].values.tolist()
      unique_elements = set(column_content)
      x = 1

      for unique in unique_elements:
        if unique not in text_digit_dict:
          if unique == 0 or unique == '-':
            text_digit_dict[unique] = 0

          else:
            text_digit_dict[unique] = x
            x += 1

      df[column] = list(map(convert_to_int, df[column]))

当我在测试过程中应用此函数对非数值特征进行编码时,可以为非数值数据分配一个数值,而在训练阶段它具有另一个数值。这会对我的测试过程造成问题吗?

标签: pythonk-meanscategorical-data

解决方案


这是一篇关于在训练和测试集中编码分类特征的精彩文章:

https://medium.com/@vaibhavshukla182/how-to-solve-mismatch-in-train-and-test-set-after-categorical-encoding-8320ed03552f

它还解释了如何在训练和测试中制作相同的分类代码。如果您希望模型以良好的精度进行预测,它们应该是相等的。


推荐阅读