【发布时间】:2020-02-19 16:47:06
【问题描述】:
我正在尝试训练 OneVsRest 算法,它得到一个具有这种形状的 tf-idf 矩阵(称为 x_train):
和 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 mlb = MultiLabelBinarizer() ----> 2 mlb.fit_transform(y_train)
D:\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py 在 fit_transform(自我,y) 884 885 如果不是 self.sparse_output: --> 886 yt = yt.toarray() 887 第888章回来了
D:\Anaconda3\lib\site-packages\scipy\sparse\compressed.py 在 toarray(自我,订单,出) 960 如果 out 是 None 并且 order 是 None: 961订单=self._swap('cf')[0] --> 962 out = self._process_toarray_args(order, out) 963 如果不是(out.flags.c_contiguous 或 out.flags.f_contiguous): 964 raise ValueError('输出数组必须是 C 或 F 连续')
D:\Anaconda3\lib\site-packages\scipy\sparse\base.py 在 _process_toarray_args(self, order, out) 1185 return out 1186 else: -> 1187 返回 np.zeros(self.shape, dtype=self.dtype, order=order) 1188 1189
内存错误:
我假设发生这种情况是因为内存不足。 有没有办法部分地做到这一点,所以我不会耗尽内存?
【问题讨论】:
标签: python scikit-learn large-files