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



我将这样的LIBSVM格式的数据输入到SciPy稀疏矩阵中。训练集是多标签、多类的,如我问的这个问题所描述的: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行,在

predict = clf.predict(X_)

File "/usr/lib/pymodules/python2.7/sklearn/multiclass.py",第151行,in predict

返回predict_ovr(self.estimators_, self.estimators_)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])

File "/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.

我不明白为什么它寻找更多的功能时,输入格式是一个稀疏矩阵?我怎样才能让它正确地预测测试标签?

我自己解决了这个问题。问题是,使用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, )

相关内容

  • 没有找到相关文章