pandas - 如何处理分类特征的未知数量的值?
问题描述
我有一个看起来像这样的熊猫数据框
Text | Label
Some text | 0
hellow bye what | 1
...
每行是一个数据点。标签是 0/1 二进制。唯一的特征是Text
它包含一组单词。我想使用每个单词的存在或不存在作为特征。例如,特征可以是contains_some
contains_what
contains_hello
contains_bye
等。这是典型的一种热编码。
但是我不想手动创建这么多的特征,词汇表中的每个单词都有一个(词汇表并不大,所以我不担心特征集爆炸)。但我只想将单词列表作为单列提供给 tensorflow,我希望它为词汇表中的每个单词创建一个二进制特征。
tensorflow/keras 是否有 API 可以做到这一点?
解决方案
您正在寻找的是一个(二进制)词袋,您可以使用他们的CountVectorizer
here从 scikit-learn 获得。
您可以执行以下操作:
from sklearn.feature_extraction.text import CountVectorizer
bow = CountVectorizer(ngram_range=(1, 1), binary=True)
X_train = bow.fit_transform(df_train['text'].values)
这将创建一个二进制值数组,指示每个文本中是否存在一个单词。binary=True
如果单词存在,则用于输出 1 或 0 。如果没有此字段,您将获得每个单词的出现次数,任何一种方法都可以正常工作。
为了检查计数,您可以使用以下内容:
# Create sample dataframe of BoW outputs
count_vect_df = pd.DataFrame(X_train[:1].todense(),columns=bow.get_feature_names())
# Re-order counts in descending order. Keep top 10 counts for demo purposes
count_vect_df= count_vect_df[count_vect_df.iloc[-1,:].sort_values(ascending=False).index[:10]]
# print combination of original train dataframe with BoW counts
pd.concat([df_train['text'][:1].reset_index(drop=True), count_vect_df], axis=1)
更新
如果您的功能包括分类数据,您可以尝试使用to_categorical
tf.keras。有关更多信息,请参阅文档。
推荐阅读
- typescript - 如何让 VSCode/Typescript 对导入的类进行自动完成?
- reactjs - 按下键onKeyDown Reactjs时删除输入中的内容
- elasticsearch - Elasticsearch 部分查询
- html - 在不影响填充的情况下增加输入字体大小
- python - python代码中的自调用函数错误
- curl - 需要将 Stripe cURL api 调用转换为 axios
- javascript - 在codeigniter中从ajax解析数组多维到控制器?
- android - 适用于 Android API 16 的 Glide 和 OkHttp 无法正常工作
- docker - 无法使用 docker 启动 kurento 媒体服务器
- php - 客户访问 Superglobals