def query(file_path): retry_max = 3 # 再実行の上限回数 retry_interval = 3 # 再実行の間隔(秒) # データ読み込み with open(file_path) as f: dic = {} line = f.readline() for line in f: line = line.rstrip() ls = line.split('\t') if len(ls) == 2: my_id = ls[0] my_value = float(ls[1]) dic[my_id] = my_value d = Datum(dic) var_nam = os.path.basename(file_path) client = jubatus.Classifier(host, port, name, 300) for i in range(1, retry_max + 1): try: # RPC実行 res = client.classify([d]) ret = "" for j in range(len(res[0])): ret += "{0}\t{1}\t{2}\t{3}\n".format(res[0][j].label, res[0][j].score, var_nam, argvs[2]) client.get_client().close() return ret except (msgpackrpc.error.TransportError, msgpackrpc.error.TimeoutError, msgpackrpc.error.RPCError) as e: client.get_client().close() client = jubatus.Classifier(host, port, name, 60) print(e) print("Re-try Querying time:{0} file:{1}".format(i, file_path)) time.sleep(retry_interval) except (jubatus.common.client.InterfaceMismatch) as e: print(e) print("Failed Querying___{0}".format(file_path)) client.get_client().close() ret = "Failed Querying {0}\n".format(file_path) return ret
def learn(cat, file_path): # 形成済みデータファイルをもらって1回だけ学習する retry_max = 10 # 再実行の回数上限 retry_interval = 3 # 再実行の間隔(秒) # データ読み込み with open(file_path) as f: dic = {} line = f.readline() for line in f: line = line.rstrip() ls = line.split('\t') if len(ls) == 2: my_id = ls[0] my_value = float(ls[1]) dic[my_id] = my_value d = Datum(dic) t_d = [[cat, d]] client = jubatus.Classifier(host, port, name, 60) for i in range(1, retry_max + 1): try: client.train(t_d) print("Finish training {0}".format(file_path)) client.get_client().close() return file_path, 1 except (msgpackrpc.error.TransportError, msgpackrpc.error.TimeoutError, msgpackrpc.error.RPCError) as e: client.get_client().close() client = jubatus.Classifier(host, port, name, 60) print(e) print("Re-try Learning time:{0} file:{1}".format(i, file_path)) time.sleep(retry_interval) except (jubatus.common.client.InterfaceMismatch) as e: print(e) print("Failed Learning___{0}".format(file_path)) client.get_client().close() return file_path, 0
def dim2_classifier_train(self, datafile): import jubatus from jubatus.common import Datum import pandas as pd host = "127.0.0.1" port = 9199 name = "2dim_classifier" client = jubatus.Classifier(host, port, name) df = pd.read_csv(datafile, names=('x', 'y', 'label')) for ix, row in df.iterrows(): client.train([(str(row['label']), Datum({ 'x': row['x'], 'y': row['y'] }))]) # print "ix:{0}".format(ix) self.query_num = ix + 1 self.query_type = "2dim_classifier_train"
def post(): title = u"Train" if request.method == 'POST': mongo_server_ip = request.form['mongo_server_ip'] mongo_server_port = request.form['mongo_server_port'] jubatus_server_ip = request.form['jubatus_server_ip'] jubatus_server_port = request.form['jubatus_server_port'] db_name = request.form['db_name'] collection_name = request.form['collection_name'] # POSTで得られる値はstr型なのでintに変換する jubatus_server_port = int(jubatus_server_port) mongo_server_port = int(mongo_server_port) # jubaclassifierのtrainの実行および表示 client = jubatus.Classifier(jubatus_server_ip, jubatus_server_port, name) lux_classifier = LuxClassifier() result_list = lux_classifier.train(client, mongo_server_ip, mongo_server_port, db_name, collection_name) # データフレームの取得 convert_mongo = convertMongo() train_sensors_dic = convert_mongo.getTrainSensorsDic( mongo_server_ip, mongo_server_port, db_name, collection_name) data_frame = convert_mongo.getTable(train_sensors_dic) # とりあえずターミナル上に表示 print data_frame return render_template('index.html', title=title, jubatus_server_ip=jubatus_server_ip, jubatus_server_port=jubatus_server_port, mongo_server_ip=mongo_server_ip, mongo_server_port=mongo_server_port, result_list=result_list) else: # エラーなどでリダイレクトしたい場合はこんな感じで print train_sensor_data return redirect(url_for('hello'))
# training data must be shuffled on online learning! random.shuffle(train_data) # run train client.train(train_data) def predict(client): # predict the last shogun data = [ Datum({'name': u'慶喜'}), Datum({'name': u'義昭'}), Datum({'name': u'守時'}), ] for d in data: res = client.classify([d]) # get the predicted shogun name sys.stdout.write(max(res[0], key=lambda x: x.score).label) sys.stdout.write(' ') sys.stdout.write(d.string_values[0][1].encode('utf-8')) sys.stdout.write('\n') if __name__ == '__main__': # connect to the jubatus client = jubatus.Classifier(host, port, name) # run example train(client) predict(client)
#!/usr/bin/env python # -*- coding:utf-8 -*- from requests_oauthlib import OAuth1Session import jubatus import time from lux_classifier import LuxClassifier client = jubatus.Classifier('127.0.0.1', 9199, 'test') previous_result = 'previous' oath_key_dict = { "consumer_key": "a71iiYuMoJrhSSZBQBWF5bDVm", "consumer_secret": "bhKEUnaccqA75t9JWjHJ6A7E76RlU4ce1N23p8Y61muh8NvF2k", "access_token": "2587234754-SBW9JesNhQEOPlsrqwSpt3YlhwYCliMDfyAbvPU", "access_token_secret": "ntqzPEeLlvXsG14KCEkdxeGLSKRKIVrQT3dg3E9rA7njj" } CK = oath_key_dict["consumer_key"] CS = oath_key_dict["consumer_secret"] AT = oath_key_dict["access_token"] AS = oath_key_dict["access_token_secret"] # ツイート投稿用のURL url = "https://api.twitter.com/1.1/statuses/update.json" # ツイート本文 for d in range(0, 10): params = {"status": d} twitter = OAuth1Session(CK, CS, AT, AS) req = twitter.post(url, params=params)