0

このような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)

次に with を使用OneVsRestClassifierLinearSVCてデータをトレーニングします。

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([_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))

ファイル "/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] は 690 ではなく 3421 である必要があります。

入力形式が疎行列の場合に、なぜより多くの機能を探しているのかわかりません。テストラベルを正しく予測するにはどうすればよいですか?

4

1 に答える 1

1

私は自分で問題を解決しました。問題は、SVMLIGHT/LIBSVM 形式を使用してデータセットを 1 つずつ読み込むと、トレーニング マトリックスが同じサイズの機能セットを持つことが期待されることでした。そのため、2 つの回避策があります。load_svmlight_files1 つは、コマンドを使用してすべてのデータを一度に入力することです。

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 に答える