我将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行,
预测= 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。
我不明白为什么当输入格式是稀疏矩阵时它会寻找更多功能?如何才能正确预测测试标签呢?
答案 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, )