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

Python 如何在ML分类中处理字符串数据,python,machine-learning,keras,Python,Machine Learning,Keras,您好,我是一名机器学习的初学者,我以前曾处理过一些二进制ml任务,其中数据是数字的。现在我面临一个问题,我必须找到一个特定组合的概率。我现在不能透露数据集或代码。我的数据是由10列组成的数据框。我必须在8列上训练我的模型,并预测最后2列的可能性。也就是说,我的标签是最后两列的组合。我面临的问题是,这些列值不是数字。我尝试了我遇到的一切,但找不到任何合适的方法将其转换为数值。我已经尝试了来自sklearn的LabelEncoder,它可以处理标签,但如果我再次使用它,就会抛出内存错误。我试着从pa

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

您可以使用字符串到整数的映射创建字典。可以在此处找到一个示例:。然后你使用一个热编码或者只把整数输入神经网络。如果这些字符有某种意义,你也可以按每个字符而不是按单词来做。但这取决于任务。如果此字符串是列的唯一标识符,请将其保留,不要将其提供给您的模型。

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

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

    在标签编码中,您必须
    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])
    

    我们是否有能够自己处理分类字符串值的特定ML模型?(即不需要标签编码、OneHot编码等)@Hossein您可以尝试CatBoost。非常适合分类数据,预处理最少。