我将这样的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)
然后我使用OneVsRestClassifier
和LinearSVC
来训练数据。
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, )