在ML分类中如何处理字符串数据

2024-04-25 08:50:15 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我是一个机器学习的初学者,我以前处理过一些二进制ml任务,其中的数据是数值的。现在我面临一个问题,我必须找到一个特定组合的概率。我现在不能透露数据集或代码。我的数据是10列的数据帧。我必须在8列上训练我的模型,并预测最后2列的可能性。我的标签是最后两列的组合。我面临的问题是,这些列值不是数值。我尝试了所有我遇到的方法,但找不到任何合适的方法将其转换为数值。我试过sklearn的LabelEncoder,它可以处理标签,但是如果我再次使用它,就会抛出内存错误。我试着用pandas的数字,它把所有的值都读作Nan。值的格式为“2be74fad-4d4”。对于如何处理这个问题,如有任何建议,我们将不胜感激。在


Tags: 数据方法代码模型机器二进制标签sklearn
2条回答

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

  1. Label Encoding
  2. Label Binarizer
  3. OneHot Encoding

现在,对于您的问题,您可以使用LabelEncoder。但有一个陷阱。在其他sklearn模型中,您可以声明一次,然后使用它来适应,然后对多个列进行转换。在

在LabelEncoding中,您必须fit_transform在列车数据中的一列上建立模型,然后在测试数据中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])

您可以使用从字符串到整数的映射创建字典。可以在这里找到一个例子:enter link description here。然后你用一个热编码或者把整数输入神经网络。如果这些字符有某种意义,你也可以按每个字符来做,而不是基于单词。但这取决于任务。如果这个字符串是列的唯一标识符,那么就把它放在一边,不要把它输入到模型中。在

相关问题 更多 >