从 Python 中不同类别的 n 长度数组编码分类数据

Encoding categorical data from n-length arrays of varying categories in Python

我目前仍处于理解机器学习的早期阶段(我是一名试图提高技能的网络程序员)并且 运行 遇到了基于 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

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

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

虽然这可能暂时有效,但可能无法扩展,因为我目前有 10,000 种独特的成分,将来还会有数万种。

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

使用:

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<string>} 列加载为 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']