如何在大量列表中使用MultiLabelBinarizer

问题描述 投票:0回答:1

我正在尝试训练OneVsRest算法,使其获得具有以下形状的tf-idf矩阵(称为x_train):

<< 3323504x900282的类型为的稀疏矩阵,具有119378243以压缩稀疏行格式存储的元素>

和y_train,它是列表的列表(长度为3323499)。每个成员有5个标签(最多)。因此,y_train看起来像这样:

[[['mysql','triggers'],['mercurial','rebase'],['c#','.net'],...]

当我执行此代码时:

ovr_clf = OneVsRestClassifier(SVC(gamma="auto", random_state=42))
ovr_clf.fit(x_train, y_train)

我收到以下消息:

ValueError:您似乎正在使用旧的多标签数据表示。不再支持序列序列;用一个而是使用二进制数组或稀疏矩阵-MultiLabelBinarizer转换器可以转换为这种格式。

尝试执行MultiLabelBinarizer之后,如下所示:

mlb = MultiLabelBinarizer()
mlb.fit_transform(y_train)

我收到消息:

MemoryError Traceback(最近的呼叫最后)1毫升= MultiLabelBinarizer()----> 2 mlb.fit_transform(y_train)

D:\ Anaconda3 \ lib \ site-packages \ sklearn \ preprocessing \ label.py在fit_transform(self,y)884885(如果不是self.sparse_output)-> 886码= yt.toarray()887888 return yt

D:\ Anaconda3 \ lib \ site-packages \ scipy \ sparse \ compressed.py在toarray(自己,命令,输出)960如果out为None且order为None:961订单= self._swap('cf')[0]-> 962出= self._process_toarray_args(顺序,出)963(如果不是)(out.flags.c_contiguous或out.flags.f_contiguous):964引发ValueError('输出数组必须为C或F连续')

D:\ Anaconda3 \ lib \ site-packages \ scipy \ sparse \ base.py在_process_toarray_args(self,order,out)1185返回1186否则:-> 1187返回np.zeros(self.shape,dtype = self.dtype,order = order)1188 1189

MemoryError:

我假设发生这种情况是因为它耗尽了内存。有一种方法可以部分执行此操作,这样我就不会用完内存?

python scikit-learn large-files
1个回答
0
投票
使用稀疏格式
© www.soinside.com 2019 - 2024. All rights reserved.