【问题标题】:How to handle string data in ML classificationML分类中如何处理字符串数据
【发布时间】:2019-02-02 11:57:10
【问题描述】:

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

【问题讨论】:

    标签: python machine-learning keras


    【解决方案1】:

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

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

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

    在 LabelEncoding 中,您必须 fit_transform 模型在训练数据的一列上,然后 transform 在测试数据的同一列上。然后对下一个类别列进行相同的处理。

    您可以遍历分类列列表以使其变得简单。考虑下面的 sn-p:

    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 模型? (即不需要labelEncoding、OneHot编码等)
    • @Hossein 你可以试试 CatBoost。非常适合预处理最少的分类数据。
    【解决方案2】:

    您可以使用从字符串到整数的映射创建字典。可以在此处找到示例:enter link description here。然后你使用 onehot 编码或者只是将整数输入神经网络。如果字符有一些含义,你也可以在每个字符的基础上而不是基于单词的基础上做。但这取决于任务。如果此 String 是列的唯一标识符,请不要使用它,不要将其提供给您的模型。

    【讨论】:

      猜你喜欢
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 2022-11-29
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      相关资源
      最近更新 更多