提问者:小点点

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


我将LIBSVM格式的数据输入到一个SciPy稀疏矩阵中。培训集是多标签和多类的,如我所问的问题:理解scikit学习中的数据格式所述

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

然后我使用带有LinearSVC的OneVsRest分类器来训练数据。

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。预测(X_)

文件"/usr/lib/py模块/python2.7/skLearning/multiclass.py",第151行,在预测

返回预测值(self.estimators,self.label,binarizer,X)

文件“/usr/lib/pymodules/python2.7/sklearn/multiclass.py”,第67行,在predict\u ovr中

Y=np。数组([[u predict\u binary(e,X)表示估计量中的e])

文件“/usr/lib/pymodules/python2.7/sklearn/multiclass.py”,第40行,二进制

返回np。ravel(估计量.决策函数(X))

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

_check_n_features(X)

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

X.形状[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, )