3
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?