首页 > 解决方案 > 如何对列中的字符串数据进行编码,以便我可以应用机器学习技术进行分类,例如 k-means?

问题描述

我在具有相应 ID (Range[kksId]) 的列中有字符串变量 (Range[VarName])。我需要创建一个算法,将新变量分类为现有 ID,或者如果不可能将它们单独放在 N/A 类中。

在此处输入图像描述

如何对列中的字符串数据进行编码,以便我可以应用机器学习技术进行分类,例如 k-means?

标签: pythonstringalgorithmmachine-learninghash

解决方案


通常,由于您的变量“Range[kksId]”是您的目标类,因此您将每个字符串映射到一个唯一的整数,这是一个如何在 python 中实现的示例:

import pandas as pd


def _categoricalToNumeric(dataset):
    categoric_id_mapping = {}
    curr_id_to_assign = 0
    for row in dataset.index:
        categorical_value = dataset.loc[row]
        if categorical_value in categoric_id_mapping:
            dataset.loc[row] = categoric_id_mapping[categorical_value]
        else:
            categoric_id_mapping[categorical_value] = curr_id_to_assign
            dataset.loc[row] = curr_id_to_assign
            curr_id_to_assign += 1
    return dataset


df = pd.read_excel('DataModel.xlsx', index_col=0)
df['Range[kksId]'] = _categoricalToNumeric(df['Range[kksId]'])

然后,对于字符串特征,在一个简单的分类器中,它们一般将每个字符映射到一个变量中。例子:

R_r_DegPit1_In_St
R_r_DegPit1_In

变成:

x0  x1  x2  x3  x4  x5  x6  x7  x8  x9 x10 x11 x12 x13 x14 x15 x16
 R   _   r   _   D   e   g   P   i   t   1   _   I   n   _   S   t
 R   _   r   _   D   e   g   P   i   t   1   _   I   n  \0  \0  \0

由于您将拥有与数据集中最长的字符串一样多的变量,因此对于不会占用所有变量的字符串,您应该使用指示空字符的值填充剩余的变量。您还应该将字符值更改为数字,但是,重要的是不要根据每列重置数字计数。结果可能是这样的:

x0  x1  x2  x3  x4  x5  x6  x7  x8  x9 x10 x11 x12  x13 x14 x15 x16
 3   1   4   1   5  10  11   6  12  13   2   1   7   14   1   8   9
 3   1   4   1   5  10  11   6  12  13   2   1   7   14   0   0   0

请记住,更高级的 ML/DL 技术以不同的方式处理它们的字符串。


推荐阅读