每个示例使用多个类别对分类特征进行编码 - sklearn
Encode categorical features with multiple categories per example - sklearn
我正在处理一个包含 流派 作为特征的电影数据集。数据集中的示例可能同时属于多个流派。因此,它们包含一个流派标签列表。
数据是这样的-
movieId genres
0 1 [Adventure, Animation, Children, Comedy, Fantasy]
1 2 [Adventure, Children, Fantasy]
2 3 [Comedy, Romance]
3 4 [Comedy, Drama, Romance]
4 5 [Comedy]
我想向量化这个特征。我试过 LabelEncoder 和 OneHotEncoder,但它们似乎无法直接处理这些列表。
我可以手动对此进行矢量化,但我有其他类似的特征包含太多类别。对于那些我更喜欢直接使用 FeatureHasher class 的方法。
有什么方法可以让这些编码器 classes 处理这样的功能吗?或者有没有更好的方法来表示这样的功能,使编码更容易?我很乐意欢迎任何建议。
有一些令人印象深刻的答案。在您的示例数据上,Teoretic 的最后一个答案(使用 sklearn.preprocessing.MultiLabelBinarizer
)比 Paulo Alves 的解决方案快 14 倍(并且都比公认的答案快!):
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
encoded = pd.DataFrame(mlb.fit_transform(df['genres']), columns=mlb.classes_, index=df.index)
result = pd.concat([df['movieId'], encoded], axis=1)
# Increase max columns to print the entire resulting DataFrame
pd.options.display.max_columns = 50
result
movieId Adventure Animation Children Comedy Drama Fantasy Romance
0 1 1 1 1 1 0 1 0
1 2 1 0 1 0 0 1 0
2 3 0 0 0 1 0 0 1
3 4 0 0 0 1 1 0 1
4 5 0 0 0 1 0 0 0
我正在处理一个包含 流派 作为特征的电影数据集。数据集中的示例可能同时属于多个流派。因此,它们包含一个流派标签列表。
数据是这样的-
movieId genres
0 1 [Adventure, Animation, Children, Comedy, Fantasy]
1 2 [Adventure, Children, Fantasy]
2 3 [Comedy, Romance]
3 4 [Comedy, Drama, Romance]
4 5 [Comedy]
我想向量化这个特征。我试过 LabelEncoder 和 OneHotEncoder,但它们似乎无法直接处理这些列表。
我可以手动对此进行矢量化,但我有其他类似的特征包含太多类别。对于那些我更喜欢直接使用 FeatureHasher class 的方法。
有什么方法可以让这些编码器 classes 处理这样的功能吗?或者有没有更好的方法来表示这样的功能,使编码更容易?我很乐意欢迎任何建议。
sklearn.preprocessing.MultiLabelBinarizer
)比 Paulo Alves 的解决方案快 14 倍(并且都比公认的答案快!):
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
encoded = pd.DataFrame(mlb.fit_transform(df['genres']), columns=mlb.classes_, index=df.index)
result = pd.concat([df['movieId'], encoded], axis=1)
# Increase max columns to print the entire resulting DataFrame
pd.options.display.max_columns = 50
result
movieId Adventure Animation Children Comedy Drama Fantasy Romance
0 1 1 1 1 1 0 1 0
1 2 1 0 1 0 0 1 0
2 3 0 0 0 1 0 0 1
3 4 0 0 0 1 1 0 1
4 5 0 0 0 1 0 0 0