【发布时间】:2020-01-18 00:53:52
【问题描述】:
虽然有很多关于错误ValueError: negative dimensions are not allowed的问题线程
我找不到问题的答案
使用 SGDclassifer 训练机器学习模型后
clf=linear_model.SGDClassifier(loss='log',random_state=20000,verbose=1,class_weight='balanced')
model=clf.fit(X,Y)
X 的维度是 (1651880,246177)
以下代码正在运行,即保存模型对象和使用模型进行预测时
joblib.dump(model, 'trainedmodel.pkl',compress=3)
prediction_result=model.predict(x_test)
但加载保存的模型时出错
model = joblib.load('trainedmodel.pkl')
下面是错误信息 请帮我解决它。
File "C:\Users\Taxonomy\AppData\Roaming\Python\Python36\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 598, in load
obj = _unpickle(fobj, filename, mmap_mode)
File "C:\Users\Taxonomy\AppData\Roaming\Python\Python36\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 526, in _unpickle
obj = unpickler.load()
File "C:\Users\Taxonomy\Anaconda3\lib\pickle.py", line 1050, in load
dispatch[key[0]](self)
File "C:\Users\Taxonomy\AppData\Roaming\Python\Python36\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 352, in load_build
self.stack.append(array_wrapper.read(self))
File "C:\Users\Taxonomy\AppData\Roaming\Python\Python36\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 195, in read
array = self.read_array(unpickler)
File "C:\Users\Taxonomy\AppData\Roaming\Python\Python36\site-packages\sklearn\externals\joblib\numpy_pickle.py", line 141, in read_array
array = unpickler.np.empty(count, dtype=self.dtype)
ValueError: negative dimensions are not allowed
【问题讨论】:
-
如果减少训练数据的大小会发生什么? (1651880,246177) 看起来很大,如果这会导致问题?
-
我已经从 5300000 减少到 1651880 我无法进一步减少它。我的服务器 RAM 大小为 128GB。我认为应该处理大小
-
我认为您在使用压缩时遇到了 int 溢出。可能是 zlib 问题。你可以试试不压缩吗? (我可以想象腌制文件的巨大尺寸)。尝试将sklearn升级到最新版本,可能问题已解决。
-
@amine 即使没有压缩,我也会遇到同样的错误。我还检查了将 sckit-learn 升级到 0.21.3。无法解决问题
-
我认为这是因为高度稀疏的矩阵。 ' 类型的稀疏矩阵,以压缩稀疏行格式存储 10842461 个元素>
标签: python-3.x scikit-learn pickle joblib