SciPy 稀疏矩阵中的测试数据预测误差
Posted
技术标签:
【中文标题】SciPy 稀疏矩阵中的测试数据预测误差【英文标题】:Test Data Prediction Error in SciPy sparse matrix 【发布时间】:2014-08-24 05:34:13 【问题描述】:我将这样的 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_)
这给了我错误。我按原样在此处转储回溯。
Traceback(最近一次调用最后一次):
文件“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([_predict_binary(e, X) for e in estimators])
文件“/usr/lib/pymodules/python2.7/sklearn/multiclass.py”,第 40 行,在 _predict_binary 中
return np.ravel(estimator.decision_function(X))
decision_function 中的文件“/usr/lib/pymodules/python2.7/sklearn/svm/base.py”,第 728 行
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
命令一次输入所有数据。
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, )
【讨论】:
以上是关于SciPy 稀疏矩阵中的测试数据预测误差的主要内容,如果未能解决你的问题,请参考以下文章