KZKY memo

自分用メモ.

Sparse Dataset Loader

load_svmlight_file

scikit-learnにおける便利関数の話.

NPLとか高次元スパースデータ記述方法で次のような形式がある.
libsvm/liblinear/svmlightで使用されているインプットファイルフォーマット.

<label><space><feature-id>:<feature-value><space><feature-id>:<feature-value><space>....
<label><space><feature-id>:<feature-value><space><feature-id>:<feature-value><space>....
<label><space><feature-id>:<feature-value><space><feature-id>:<feature-value><space>....
...

例えば

1 197:2 321:3 399:1 561:1 575:1 587:1 917:1 1563:1 1628:3 1893:1 3246:1 4754:2 6053:1 6820:1 6959:1 7571:1 7854:2 8407:1 11271:1 12886:1 13580:1 13588:1 13601:2 13916:1 14413:1 14641:1 15950:1 20506:1 20507:1
2 7:1 1039:1 1628:1 1849:1 2686:1 2918:1 3135:1 4039:1 4059:1 6819:1 6931:1 7218:1 9232:1 10879:1 11015:2 13919:1 17142:1 19675:1 20211:1 21026:1 21030:1 21031:1
3 77:9 137:1 248:1 271:1 357:1 377:3 400:1 412:1 678:1 824:1 880:16 955:1 960:1 970:3 971:2 972:1 1007:2 1035:2 1166:1 1304:16 1354:1 1628:1 1686:2 1721:1 1877:1 2025:1 2219:1 2497:2 2539:4 2550:1 2874:1 2930:2 3378:1 3411:1 3572:17 3626:2 3688:1 3818:1 4039:1 4479:1 4526:2 4748:1 4822:1 4966:1 5479:1 5562:1 5583:2 5844:2 5848:1 6092:1 6096:1 6149:1 6268:1 6819:1 6894:18 7822:1 8139:1 8626:10 9824:17 10461:1 10609:2 10851:1 11463:1 11874:1 11875:2 12397:16 12412:1 13381:1 13384:1 13590:12 13755:2 14074:17 14166:1 14184:2 14517:1 14904:2 15400:1 15531:1 15579:17 15580:16 15936:16 16488:1 16579:1 16642:29 16793:2 17083:2 17458:1 20543:1 20544:2 21252:1 21358:2 22296:1 22479:3 23590:1 25024:17 25809:1 26235:1 26236:2 26237:1 26238:1 26239:1 26240:1 26241:2

この形式のデータはscikit-learnの便利関数load_svmlight_fileで次のように読める

import time
from sklearn.datasets import load_svmlight_file

filename = "/home/kzk/datasets/news20/news20.dat"
st = time.time()
(X, y) = load_svmlight_file(filename)
et = time.time()
print "ellapsed time: %f [s]" % (et - st)