【问题标题】:Encoding categorical data from n-length arrays of varying categories in Python在 Python 中对来自不同类别的 n 长度数组的分类数据进行编码
【发布时间】:2019-04-05 08:21:23
【问题描述】:

我目前仍处于了解机器学习的早期阶段(我是一名试图提升技能的网络程序员)并且遇到了基于 Kaggle 提供的数据集的问题。

这是一个数据集,其中每个特征都包含 1..n 个标签,描述了一顿饭的成分,以及这顿饭来自哪道菜的目标字段。

Ingredients {ArrayOf<string>} | Cuisine {string}
[Tomato, Spaghetti, Beef, Basil, Oregano] | Italian
[Coriander Seeds, Cumin, Paprika, Chicken, Garlic, Ginger] | Indian
[Beef, Onion] | French

此数据经过程式化以说明如何描述数据的要点,食材是我的输入,美食是我的目标输出。

我想知道的是我的方法背后是否有正确的理论

  • 在预处理中遍历数据帧的每个特征
  • 获取所有成分并将它们添加到集合中
  • 为每种成分添加一个新列到以该成分命名的数据框中
  • 遍历每个特征并根据每种成分将后续列设置为 1 或 0(即将“牛肉”列设置为 1)
  • 根据转换后的数据集训练模型

虽然目前这可能有效,但它可能无法扩展,因为我目前拥有 10,000 种独特的成分,并且将来会体验到更多。

我的想法是否正确,我是否应该考虑将来扩展功能?是否有任何内置功能支持我正在尝试做的事情?

【问题讨论】:

  • 你能给出一个你想要的输出示例吗?
  • 配料是输入,菜品是我的输出。我希望使用一系列成分来预测美食。干杯!

标签: python pandas machine-learning categorical-data conceptual


【解决方案1】:

用途:

vocab = set(j for i in df['Ingredients'] for j in i) 

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(vocabulary=vocab, analyzer=lambda x: x)

X = cv.fit_transform(df['Ingredients'])

如果您将Ingredients {ArrayOf&lt;string&gt;} 列加载为text,则必须转换为列表-

df['Ingredients'] = df['Ingredients {ArrayOf<string>} '].apply(lambda x: [i.strip() for i in x.replace('[','').replace(']','').split(',')])

输出

X 将是您的输入矩阵 -

X.todense()

matrix([[1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1],
        [0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0],
        [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]], dtype=int64)

对于词汇 -

cv.get_feature_names()

['Basil',
 'Beef',
 'Chicken',
 'Coriander Seeds',
 'Cumin',
 'Garlic',
 'Ginger',
 'Onion',
 'Oregano',
 'Paprika',
 'Spaghetti',
 'Tomato']

【讨论】:

    猜你喜欢
    • 2017-10-19
    • 2020-08-23
    • 1970-01-01
    • 2018-01-19
    • 2011-07-27
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    相关资源
    最近更新 更多