def train(dataset): db = DB(join(dbpath,'train.db')) tbl_manifest = '%s_man'%dataset tbl_rss = '%s_rss'%dataset n_feature = int(db.queryone('value',tbl_manifest,'key="n_feature"')[0]) data = [] cls = [] for y,entry in db.query(['p_id','entry'], tbl_rss): dic = json.loads(entry) x = [-100]*n_feature for m_id,rss in dic.items(): x[int(m_id)] = float(rss) data.append(x) cls.append(y) neigh = KNeighborsClassifier(n_neighbors=5) neigh.fit(data,cls) fout = open('model.dat','w') pickle.dump(neigh,fout) fout.close()
#!/usr/bin/env python import pickle from dbhelper import DB db = DB('train.db') n_feature = int(db.queryone('value','manifest','key="n_feature"')[0]) fin = open('model.dat') clf = pickle.load(fin) fin.close def predict(dic): data = [-100]*n_feature for m_id, rss in dic.items(): data[int(m_id)] = float(rss) proba = clf.predict_proba([data]).tolist()[0] print 'proba--', proba return proba
#!/usr/bin/env python import pickle from dbhelper import DB import os from os.path import join rootpath = os.getenv('WLAN_ROOT') datapath = join(rootpath,'raw_data') dbpath = join(datapath,'DB') db = DB(join(dbpath,'train.db')) dataset = db.queryone('value','meta','key="current"')[0] tbl_manifest = '%s_man'%dataset n_feature = int(db.queryone('value',tbl_manifest,'key="n_feature"')[0]) fin = open('model.dat') clf = pickle.load(fin) fin.close def predict(dic): data = [-100]*n_feature for m_id, rss in dic.items(): data[int(m_id)] = float(rss) proba = clf.predict_proba([data]).tolist()[0] return proba
map_coord = {} for line in open('raw_data/coord.txt'): pt,xy = line.strip().split('\t') x,y = xy.split(' ') map_coord[pt] = (x,y) db.insert(('n_feature',len(map_mac)), 'manifest') db.insertmany([ (m_id,mac) for mac,m_id in map_mac.items()], 'map_mac') db.insertmany([(p_id,pt)+map_coord[pt] for pt,p_id in map_pt.items()], 'map_pt') db.commit() #-------------------------------split data---------------------------- db_train = DB('train.db') db_test = DB('test.db') for device in db.queryone('value', 'manifest', 'key="device"'): db_train.new_table(device, ('r_id integer','p_id integer','entry text')) db_test.new_table(device, ('r_id integer','p_id integer','entry text')) for record in db.queryall(device): if random.random() > 0.3: db_train.insert(record, device) else: db_test.insert(record, device) db_train.clone_from(db, 'manifest') db_train.clone_from(db, 'map_mac') db_train.clone_from(db, 'map_pt') db_test.clone_from(db, 'manifest') db_test.clone_from(db, 'map_mac') db_test.clone_from(db, 'map_pt')
#!/usr/bin/env python from dbhelper import DB import json map_mac = {} map_pt = {} feas_map = {} db = DB('train.db') mac_dic = dict([(mac,m_id) for mac,m_id in db.query(['mac','m_id'],'map_mac')]) pid_dic = dict([(p_id,pt) for p_id,pt in db.query(['p_id','pt'],'map_pt')]) coord_dic = dict([(p_id,(int(x),int(y))) for p_id,x,y in db.query(['p_id','x','y'],'map_pt')]) n_point = int(db.queryone('value','manifest','key="n_point"')[0]) p2p_matrix = [[float('inf')]*n_point for i in range(n_point)] for i in range(n_point): p2p_matrix[i][i] = 0.0 for i,j,dis in db.query(['src_pt','dest_pt','distance'],'relation'): p2p_matrix[i][j] = p2p_matrix[j][i] = dis def get_macid(mac): return mac_dic[mac] def get_pointname(pid): return pid_dic[pid] def get_coordinate(pid): return coord_dic[pid] def has_mac(mac): return mac in mac_dic def transform(entry):