scikit-learnのload_svmlight_file
関数でsvm_light形式のデータを次のように読み込もうとしたらエラーが.
from sklearn.datasets import load_svmlight_file
X_train, y_train = load_svmlight_file("train.dat")
X_test, y_test = load_svmlight_file("test.dat")
clf = svm.SVC(kernel='linear')
clf.fit(X_train, y_train)
エラー内容
ValueError: X.shape[1] = 9930 should be equal to 9947, the number of features at training time
訓練データとテストデータの特徴量の次元が違うと怒られています。
エラー内容にまつわる詳細はこちらと同じ状況でした。
ValueError while using linear SVM of scikit-learn python(stackoverflow)
原因
疎行列としてデータが読み込まれ、load_svm_file
が特徴量の次元を推量するらしいのですが、訓練データに含まれない特徴がテストデータに現れるとき、上記のエラーがでることがあるらしい(上記stack overflowより)
解決策1
load_svmlight_filesを使い、訓練データとテストデータを一緒に読み込む
X_train, y_train, X_test, y_test = load_svmlight_files(['train.dat', 'test.dat'])
解決策2
n_featuresを使い、特徴量の次元を明示する。
X_train, y_train = load_svmlight_file("dataset_svm/train.dat")
X_test, y_test = load_svmlight_file("dataset_svm/test.dat", n_features=X_train.shape[1])
リンク
load_svmlight_file(scikit-learn公式)
scikit-learnでsvmlight(libsvm)形式のファイルを読み込む