SciPy 稀疏矩阵中的测试数据预测误差

Posted

技术标签:

【中文标题】SciPy 稀疏矩阵中的测试数据预测误差【英文标题】:Test Data Prediction Error in SciPy sparse matrix 【发布时间】:2014-08-24 05:34:13 【问题描述】:

我将这样的 LIBSVM 格式的数据输入到 SciPy 稀疏矩阵中。训练集是多标签和多类的,如我问的这个问题中所述: Understanding format of data in scikit-learn

from sklearn.datasets import load_svmlight_file
X,Y = load_svmlight_file("train-subset100.csv.csv", multilabel = True, zero_based = True)

然后我使用OneVsRestClassifierLinearSVC 来训练数据。

clf = OneVsRestClassifier(LinearSVC())
clf.fit(X, Y)

现在,当我想测试数据时,我会执行以下操作。

X_, Y_ = load_svmlight_file("train-subset10.csv", multilabel = True, zero_based = False)
predicted = clf.predict(X_)

这给了我错误。我按原样在此处转储回溯。

Traceback(最近一次调用最后一次):

文件“test.py”,第 36 行,在

预测 = clf.predict(X_)

文件“/usr/lib/pymodules/python2.7/sklearn/multiclass.py”,第 151 行,在预测中

return predict_ovr(self.estimators_, self.label_binarizer_, X)

文件“/usr/lib/pymodules/python2.7/sklearn/multiclass.py”,第 67 行,在 predict_ovr

Y = np.array([_predict_binary(e, X) for e in estimators])

文件“/usr/lib/pymodules/python2.7/sklearn/multiclass.py”,第 40 行,在 _predict_binary 中

return np.ravel(estimator.decision_function(X))

decision_function 中的文件“/usr/lib/pymodules/python2.7/sklearn/svm/base.py”,第 728 行

self._check_n_features(X)

文件“/usr/lib/pymodules/python2.7/sklearn/svm/base.py”,第 748 行,在 _check_n_features 中

X.shape[1]))

ValueError: X.shape[1] 应该是 3421,而不是 690。

我不明白为什么当输入格式是稀疏矩阵时它会寻找更多特征?如何让它正确预测测试标签?

【问题讨论】:

【参考方案1】:

我自己解决了这个问题。问题是使用 SVMLIGHT/LIBSVM 格式一个一个地加载数据集期望训练矩阵具有相同大小的特征集。所以有两种解决方法。一种是使用load_svmlight_files 命令一次输入所有数据。

X,Y,X_,Y_ = load_svmlight_files("train-subset100.csv", "train-subset10.csv",... 

multilabel = True, zero_based = False)

其次,您可以明确提及功能的数量。

X,Y=load_svmlight_file("train-subset100.csv",multilabel=True, zero_based = False)
X_,Y_ = load_svmlight_file("train-subset10.csv", n_features = X.shape[1],... 
multilabel = True, zero_based = False, )

【讨论】:

以上是关于SciPy 稀疏矩阵中的测试数据预测误差的主要内容,如果未能解决你的问题,请参考以下文章

稀疏二元矩阵的二元分类

Python中的稀疏3d矩阵/数组?

巨大的稀疏数据帧到 scipy 稀疏矩阵,无需密集变换

scipy稀疏矩阵

scipy构建稀疏矩阵

scipy中的这个稀疏矩阵是啥意思?