我有一大串字符串。每個字符串都是訓練數據集中的一個不同示例,幷包含一個類別列表,每個類別由逗號分隔。例如。分類數據 - 單熱編碼
mesh = ['aligator, dog, cat', 'cat, mouse, aligator', '']
某些示例可能不屬於任何類別,因此將表示爲空字符串。
我希望使用單熱編碼來編碼這些類別以用於機器學習。
我該怎麼做?我沒有完整的類別列表,並且有大約5000種可能的類別。
我有一大串字符串。每個字符串都是訓練數據集中的一個不同示例,幷包含一個類別列表,每個類別由逗號分隔。例如。分類數據 - 單熱編碼
mesh = ['aligator, dog, cat', 'cat, mouse, aligator', '']
某些示例可能不屬於任何類別,因此將表示爲空字符串。
我希望使用單熱編碼來編碼這些類別以用於機器學習。
我該怎麼做?我沒有完整的類別列表,並且有大約5000種可能的類別。
演示:
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 [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
還有一堆不同的方式來編碼分類變量:
In [68]: cv.get_feature_names()
Out[68]: ['aligator', 'cat', 'dog', 'mouse']
我們可以通過可視化Pandas.SparseDataFrame它對於機器學習,我們在scikit-learn-cont中實現了其中的一小部分(包括One-Hot)肋骨包:category_encoders:
https://github.com/scikit-learn-contrib/categorical-encoding
如果你已經在使用scikit學習和/或熊貓,它可能是一個簡單的解決方案。像你提到的那樣具有非常高的維度,以及你不一定知道所有類別的情況,你可能會更喜歡HashingEncoder。
你的'mesh'看起來不像'1維numpy字符串數組...'你有1D的字符串數組或字符串數組嗎? – MaxU
@MaxU編輯 – scutnex
@MaxU的答案有問題嗎?它應該爲空字符串工作 – elphz