sklearn MultiLabelBinarizer的问题

问题描述

从我的数据帧x_train开始,我想单列“体裁”。共有1000多种不同的流派,但是当我使用multilabelbinarizer函数时,它只报告31列,并且查看它们并没有什么意义,在帮助页面上查看它建议不要使用列表,而是使用数组,就像我在示例中所做的那样,但仍然没有提供36158 x 1388的矩阵。我想念的是什么?

upVotes

解决方法

奇怪的输出是由于fit_transform()的参数必须是可迭代项(see doc)的可迭代项。

必须更改变量gen的格式,以使流派分离。将包含流派的字符串划分为字符串列表,以分隔流派,例如:

'Drama Horror Thriller' => ['Drama','Horror','Thriller']

您可以一行完成:

gen = [x.split(' ') for x in list(x_train['genres'])]
gen

[['Drama'],['Drama','Thriller'],['Drama'],['Children','Drama'],['Comedy','Drama','Thriller']]

gen现在具有fit_transform()正确的格式:

from sklearn.preprocessing import MultiLabelBinarizer

multilabel_binarizer = MultiLabelBinarizer()
y = multilabel_binarizer.fit_transform(gen)

multilabel_binarizer.classes_
['Children' 'Comedy' 'Drama' 'Horror' 'Thriller']

y
array([[0,1,0],[0,1],[1,1]])