0

我将这样的 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)

然后我使用OneVsRestClassifierwithLinearSVC来训练数据。

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 行,在预测中

返回 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])

_predict_binary 中的文件“/usr/lib/pymodules/python2.7/sklearn/multiclass.py”,第 40 行

返回 np.ravel(estimator.decision_function(X))

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

self._check_n_features(X)

_check_n_features 中的文件“/usr/lib/pymodules/python2.7/sklearn/svm/base.py”,第 748 行

X.shape[1]))

ValueError: X.shape[1] 应该是 3421,而不是 690。

我不明白为什么当输入格式是稀疏矩阵时它会寻找更多特征?我怎样才能让它正确预测测试标签?

4

1 回答 1

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, )
于 2014-07-03T08:45:45.380 回答