编码要在KMeans集群中使用的分类功能

时间:2019-07-23 10:10:23

标签: python-3.x k-means categorical-data

我有一个既包含数字特征又包含分类特征(非数字)的数据集,而分类特征可以具有许多值(无限制)。 我需要将这些数据转换为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]))

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

1 个答案:

答案 0 :(得分:0)

这是一篇很棒的文章,关于对训练和测试集中的分类特征进行编码:

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

它也说明了如何在训练和测试中使用相同的分类代码。如果您希望模型以较高的精度进行预测,则它们应该相等。