LoginSignup
7
3

More than 5 years have passed since last update.

scikit-learnのload_svmlight_file関数でデータを読み込む際の注意点

Last updated at Posted at 2016-07-11

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)形式のファイルを読み込む

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3