唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

numpyでcsvを読み込む / scikit-learnでsvmlight(libsvm)形式のファイルを読み込む

前までRを使っていたのですが、せっかくPythonを使っているのだから全部移行したいなーと思って色々勉強してます。

numpyでcsvを読み込む

numpy.genfromtxt関数numpy.loadtxt関数を使えば簡単に読み込めるみたいです。

import numpy as np
data = np.genfromtxt('data.csv', delimiter=',')

scikit-learnでsvmlight(libsvm)形式のファイルを読み込む

load_svmlight_file関数を使えば良いみたいです

以下の例のように同時に複数読み込む場合にはload_svmlight_files関数(最後にsが付いている)も使えます。

from sklearn.datasets import load_svmlight_files
feature_train, label_train, feature_test, label_test = load_svmlight_files(['train.txt', 'test.txt'])

これらの関数には注意点が2つあります。
1つ目は特徴量が疎行列として読み込まれることです。
疎行列用でない関数などを使う時はtodense関数やtoarray関数を使って形式を変換しておく必要があります。

2つ目は特徴量のサイズを指定しないといけない場合があることです。
上の例のように一度にトレーニング用のデータとテスト用のデータを読み込んでいる場合には問題ありません。
load_svmlight_file関数で一つのファイルずつバラバラに読み込む場合で、データ中の特徴量のインデックスの最大値が異なる場合には後から読み込む方にn_featuresで特徴量の次元数を指定する必要があります。

load_svmlight_file('test.txt', n_features=feature_train.shape[1])