如何处理机器学习分类中的字符串数据

3

你好,我是一名机器学习的初学者。之前我曾经处理过一些二元机器学习任务,那时数据都是数字化的。现在我遇到了一个问题,需要找到特定组合的概率。由于某些原因,我无法透露数据集或代码。我的数据是一个包含10列的数据框。我需要在其中8列上训练模型,并预测最后2列的组合可能性。也就是说,我的标签是最后2列的组合。我遇到的问题是,这些列的值不是数字。我尝试了所有能想到的方法,但无法找到任何适当的方法将其转换为数字值。我尝试使用sklearn中的LabelEncoder,它可以用于标签,但如果再次使用会抛出内存错误。我还尝试使用pandas中的to_numeric,但它将所有值都读取为NaN。这些值的形式如'2be74fad-4d4'。非常感谢您对如何处理此问题的任何建议。

2个回答

7

要将分类数据转换为数字,您可以在sklearn中尝试以下方法:

  1. 标签编码
  2. 标签二值化
  3. 独热编码

现在,对于您的问题,您可以使用LabelEncoder。但是有一个陷阱。在其他sklearn模型中,您可以声明一次并在许多列上使用它来拟合,然后转换。

在LabelEncoding中,您必须在train数据的一列上进行fit_transform,然后在test数据的同一列上进行transform。然后是下一个分类列的相同过程。

您可以遍历分类列列表以使其更简单。请考虑下面的代码片段:

cat_cols = ['Item_Identifier', 'Item_Fat_Content', 'Item_Type', 'Outlet_Identifier', 
         'Outlet_Size', 'Outlet_Location_Type', 'Outlet_Type', 'Item_Type_Combined']
enc = LabelEncoder()

for col in cat_cols:
    train[col] = train[col].astype('str')
    test[col] = test[col].astype('str')
    train[col] = enc.fit_transform(train[col])
    test[col] = enc.transform(test[col])

我们是否有特定的机器学习模型能够单独处理分类字符串值?(即不需要进行标签编码、OneHot编码等操作) - Hossein Kalbasi
@Hossein 你可以尝试使用CatBoost。它适用于需要最少预处理的分类数据。 - Shweta Chandel

1
你可以创建一个从字符串到整数的映射字典。一个例子可以在这里找到: enter link description here。然后你可以使用onehot编码或者将整数输入神经网络。如果字符有一些意义,你也可以按字符而不是单词进行操作。但这取决于任务。如果这个字符串是列的唯一标识符之类的东西,就把它留下来,不要将其输入模型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接