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

时间:2014-07-03 07:43:20

标签: scipy scikit-learn test-data multilabel-classification

我将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_)

这里给我错误。我把原型转移到这里。

  

追踪(最近一次呼叫最后一次):

     

文件“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(估算器中e的[_ predict_binary(e,X)])

     

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

     

返回np.ravel(estimator.decision_function(X))

     

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

     

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 个答案:

答案 0 :(得分: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, )