我有一大串字符串。每个字符串是训练数据集中的不同示例,并包含类别列表,其中每个类别由逗号分隔。例如
mesh = ['aligator, dog, cat', 'cat, mouse, aligator', '']
某些示例可能不属于任何类别,因此将表示为空字符串。
我希望使用单热编码对这些类别进行编码,以用于机器学习。
我该怎么做?我没有完整的类别列表,大约有5,000种可能的类别。
答案 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。