アットウィキロゴ

Jubatusによる異常検知 > データ量についての試行錯誤

No. 方針 なぜか コマンド例 備考
1 マシンのスペックはCPUよりメモリを重視する。 元のCSVファイルが小さくてもメモリを大量に消費して時間がかかるから。 (仮想マシンに割り当てるメモリ容量はできるだけ多くする)  
2 最初は1000件ぐらいの小さなデータで試す。 いきなり生データを投入すると1日中実行しても完了しないから。
リソース消費量の見込みをたてないと従量課金制度のクラウドでお金がかかるから。
入手したファイル:kddcup.data.csv.original
jubatusに投入するファイル:kddcup.data.csv
# head -n 1000 kddcup.data.csv.original > kddcup.data.csv

 
jubatus公式のチュートリアルですと
KDDI CUPのデータの「10%版」を使っています。
http://jubat.us/ja/tutorial/anomaly.html
3

サンプルコードのwhile文やfor文には
何回かに一度、時刻と処理件数を出力する処理を
追加しておく。

進捗が見えないと、あとどれだけPCを起動させておく必要があるか予想できないから。
No.2の試行について次はどの程度件数を増やしてよいのか予想できないから。
書き込む先の変数の名前がdataの場合。

the_count = 0
# Pythonで時間を出力する場合は以下の宣言が必要。
from datetime import datetime

# 最終的に得られるデータ
data = []
with open("kddcup.data.csv", "r") as f:
    while True:
        the_count += 1
        if (the_count % 100) ==0:
            print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))
            print(the_count)

#以後、適切なインデントで処理が続く…。

カウンタ変数を用意せず len(data)で計測することもできます。

一行にまとめたい場合。
print("{theTime}, count: {intc}".format(theTime=datetime.now().strftime("%Y/%m/%d %H:%M:%S"), intc=the_count))
4 サンプルコードを繰り返しテストする場合は、clearの処理を入れておく。 前回の実行結果が学習に追加されてF値が意図しない値になるから。
実行時間が増大していくから。
client = jubatus.Anomaly('127.0.0.1', 9199, 'kdd')
client.clear()
 
5 OSの再起動を入れながらデータを小分けに覚えさせたい場合はsave、loadの処理を活用する。 サービスを再起動すると学習結果は失われてしまうから。

# "save_kdd"という識別子でデータをロード、セーブする場合。

# 学習の保存
#client.save("save_kdd")

# 学習の再開
client.load("save_kdd")

 

オブジェクト名やclear、save、loadの記述箇所はそのプログラムの内容によります。

養成読本のサンプルプログラムの場合、1000件では1.7M程度のファイルが作成されます。
EOR        

 

最終更新:2016年04月05日 14:30