分类数据 - 一热编码

时间:2017-06-05 15:01:03

标签: python scikit-learn nltk one-hot-encoding

我有一大串字符串。每个字符串是训练数据集中的不同示例,并包含类别列表,其中每个类别由逗号分隔。例如

mesh = ['aligator, dog, cat', 'cat, mouse, aligator', '']

某些示例可能不属于任何类别,因此将表示为空字符串。

我希望使用单热编码对这些类别进行编码,以用于机器学习。

我该怎么做?我没有完整的类别列表,大约有5,000种可能的类别。

2 个答案:

答案 0 :(得分:1)

演示:

In [64]: from sklearn.feature_extraction.text import CountVectorizer

In [65]: cv = CountVectorizer()

In [66]: X = cv.fit_transform(mesh)

In [67]: X.A
Out[67]:
array([[1, 1, 1, 0],
       [1, 1, 0, 1]], dtype=int64)

列名:

In [68]: cv.get_feature_names()
Out[68]: ['aligator', 'cat', 'dog', 'mouse']

我们可以使用Pandas.SparseDataFrame来显示它:

In [135]: import pandas as pd

In [136]: pd.SparseDataFrame(X, columns=cv.get_feature_names(), default_fill_value=0)
Out[136]:
   aligator  cat  dog  mouse
0         1    1    1      0
1         1    1    0      1

答案 1 :(得分:0)

有许多不同的方法可以为机器学习编码分类变量,我们在scikit-learn-contrib包中实现了一些(包括One-Hot):category_encoders:

https://github.com/scikit-learn-contrib/categorical-encoding

如果您已经在使用scikit-learn和/或pandas,那么这可能是一个简单的解决方案。像你提到的非常高的维度,以及你不一定事先了解所有类别的情况,你可能会有更好的运气,如HashingEncoder。