我将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)
然后我使用 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_)
这给了我错误 . 我把原型转移到这里 .
回溯(最近一次调用最后一次):文件“test.py”,第36行,在predict = clf.predict(X_)文件“/usr/lib/pymodules/python2.7/sklearn/multiclass.py”,第151行,预测返回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中返回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 回答
我自己解决了这个问题 . 问题是使用SVMLIGHT / LIBSVM格式逐个加载数据集需要训练矩阵具有相同大小的特征集 . 所以有两种解决方法 . 一种是使用
load_svmlight_files
命令一次输入所有数据 .其次,您可以明确提及功能的数量 .