class NeuralNetworkWifiTest(NeuralNetworkTest):
	def __init__(self):
		NeuralNetworkTest.__init__(self)
		self.load_in = LoadWifiData()
		pass

	def load_wifi_data_old(self, dir_path, save_path="wifi_floor.npz"):
		file_list = os.listdir(dir_path)
		floor_data = {}
		for file_name in file_list:
			if file_name.endswith("wp"):
				name, ext = os.path.splitext(file_name)
				print name
				wifi_file = name + ".wifi"
				wifi_file = os.path.join(dir_path, wifi_file)
				wp_file = os.path.join(dir_path, file_name)
				floor_data[name] = self.load_in.extract(wp_file, wifi_file)
				# temp = load_in.extract_raw(wp_file, wifi_file)
				# print temp

		# Get All WiFi Listed
		t_bind = []
		for x in floor_data:
			t_bind += floor_data[x].wifi_list
		wifi_bld_list = list(set(t_bind))

		TD = 0

		for x in floor_data:
			D = floor_data[x].wifi_matrix.shape[0]
			TD += D
			L = len(wifi_bld_list)
			t_mat = zeros((D, L))
			for i, j in enumerate(floor_data[x].wifi_list):
				ind = wifi_bld_list.index(j)
				t_mat[:, ind] = floor_data[x].wifi_matrix[:, i]
			floor_data[x].wifi_bld_mat = t_mat

		savez(save_path, floor=floor_data, wifilist=wifi_bld_list, entry_num=TD)

		return floor_data, wifi_bld_list, TD

	def load_wifi_data_new(self, dir_path, save_path="wifi_floor_temp.npz", ref_list=[]):
		load_in = LoadWifiData()
		file_list = os.listdir(dir_path)
		floor_data = {}
		for floor in file_list:
			print floor
			fl_path = os.path.join(dir_path, floor)
			if os.path.isfile(fl_path):
				continue
			floor_file_list = os.listdir(fl_path)
			for file_name in floor_file_list:
				if file_name.endswith("wifi"):
					name, ext = os.path.splitext(file_name)
					print name
					wifi_file = name + ".wifi"
					wifi_file = os.path.join(fl_path, wifi_file)
					floor_data[floor] = load_in.extract_wifi(wifi_file, ref_list)
		t_bind = []
		for x in floor_data:
			t_bind += floor_data[x].wifi_list
		wifi_bld_list = list(set(t_bind))

		TD = 0

		for x in floor_data:
			D = floor_data[x].wifi_matrix.shape[0]
			TD += D
			L = len(wifi_bld_list)
			t_mat = zeros((D, L))
			for i, j in enumerate(floor_data[x].wifi_list):
				ind = wifi_bld_list.index(j)
				t_mat[:, ind] = floor_data[x].wifi_matrix[:, i]
			floor_data[x].wifi_bld_mat = t_mat

		savez(save_path, floor=floor_data, wifilist=wifi_bld_list, entry_num=TD)
		return floor_data, wifi_bld_list, TD

	def fann_wifi_test_recovered(self, class_num, test_data, normalize=True, savepath="./temp_save.conf"):
		if not os.path.exists(savepath):
			print "No File Included"
			return []
		net = libfann.neural_net()
		net.create_from_file(savepath)
		res = zeros((test_data.shape[0], class_num))
		for i, test_array in enumerate(test_data):
			if normalize:
				# test_array = -test_array / 100.0
				test_array = self.normalize(test_array, self.m_min, self.m_max)
			res[i, :] = net.run(test_array)
		self.net = net
		return res

	def fann_wifi_test_recovered_accum(self, class_num, test_data, normalize=True, savepath="./temp_save.conf",\
	                                   accum_depth=3):
		if not os.path.exists(savepath):
			print "No File Included"
			return []
		net = libfann.neural_net()
		net.create_from_file(savepath)
		res = zeros((test_data.shape[0], class_num))
		for i, test_array in enumerate(test_data):
			test_array_raw = test_data[max(0, i - accum_depth):i + 1, :]
			test_array = self.stack_data(test_array_raw)[0]
			if normalize:
				# test_array = -test_array / 100.0
				test_array = self.normalize(test_array, self.m_min, self.m_max)
			# print test_array
			res[i, :] = net.run(test_array.round())
		self.net = net
		return res

	def fann_wifi_train(self, floor_data, wifi_bld_list, td, save_path="wifi_floor.conf", normalize=True):
		all_data_mat = zeros((td, len(wifi_bld_list)))
		all_data_cls = zeros((td, len(floor_data.keys())))

		pos_pt = 0
		cls_dict = {}

		for i, xx in enumerate(floor_data):
			d = floor_data[xx].wifi_bld_mat.shape[0]
			all_data_mat[pos_pt:pos_pt + d, :] = floor_data[xx].wifi_bld_mat
			all_data_cls[pos_pt:pos_pt + d, i] = 1
			pos_pt += d
			cls_dict[i] = xx
		net = self.fann_learn_save_norm(all_data_mat, all_data_cls, save_path, normalize)
		self.net = net
		return net

	def fann_wifi_test(self, floor_data, rec_path="wifi_floor.conf", normalize=True):
		cls_dict = {}
		for i, xx in enumerate(floor_data):
			cls_dict[i] = xx

		class_num = len(floor_data.keys())
		for x in cls_dict:
			floor = cls_dict[x]
			st = time.time()
			res = self.fann_wifi_test_recovered(class_num, floor_data[floor].wifi_bld_mat, normalize, rec_path)
			ed = time.time()
			print res
			print "Time Comsumption: %s , Ave Time Consumption: %s" % (ed-st, (ed-st) / floor_data['F1'].wifi_bld_mat.shape[0])
			res_cls = zeros((res.shape[0],1))
			cor_count = 0;
			for i, arr in enumerate(res):
				res_cls[i] = arr.argmax()
				if res_cls[i] == x:
					cor_count += 1

			print "Res_Cor: %s,Total Amount : %s, Correct Rate: %s" % (cor_count, len(res_cls), cor_count / float(len(res_cls)))
Exemplo n.º 2
0
class AeonUtility(SDKUtility):
	"""
	Including Utility Functions for Aeon Usage

	DataStorage Content:
		self.wp_filepath = wp_filepath
		self.wifi_filepath = wifi_filepath
		self.wifi_list = wifi_list
		self.wp_pos = wp_pos
		self.wp_ind = wp_ind
		self.wifi_matrix = wifi_matrix

	"""
	def __init__(self):
		SDKUtility.__init__(self)
		self.loader = LoadWifiData()
		self.map_ratio = 10

	def load_wifi(self, wp_path, wifi_path, ref_list=[]):
		if ref_list:
			wifi = self.loader.extract_with_ref(wp_path, wifi_path, ref_list)
		else:
			wifi = self.loader.extract(wp_path, wifi_path)
		return wifi

	def extract_aeon(self, wifi_path, ref_list):
		file_list = os.listdir(wifi_path)
		route = []
		for fn in file_list:
			if 'journal' in fn:
				continue
			data = self.extract_wifi(os.path.join(wifi_path,fn), ref_list)
			route += data
		return route

	def accuracy(self, res, test_pos, train_pos):
		RMSE = []
		for i,n in enumerate(res):
			pos_res = array(train_pos[n]);
			pos_tar = array(test_pos[i]);
			pos_diff = pos_res
			se = sqrt(((pos_tar - pos_diff) ** 2).sum()) / self.map_ratio
			RMSE.append(se)
		return RMSE

	def pos_weighted(self, w_arr, cls_pos):
		t_pos = zeros(array(cls_pos[0]).shape)
		for i, w in enumerate(w_arr):
			t_pos += array(cls_pos[i]) * w
		t_pos = t_pos / w_arr.sum()
		return t_pos

	def accuracy_proba(self, res, test_pos, train_pos):
		RMSE = []
		for n in range(res.shape[0]):
			w_arr = res[n,:]
			pos_res = self.pos_weighted(w_arr, train_pos)
			pos_tar = test_pos[n]
			se = sqrt(((pos_tar - pos_res) ** 2).sum()) / self.map_ratio
			RMSE.append(se)
		return RMSE

	def res_to_coord(self, res, train_pos, proba=False):
		# print res
		pos = []
		for x_res in res:
			if proba:
				pos_res = self.pos_weighted(x_res, train_pos)
			else:
				pos_res = array(train_pos[x_res])
			pos.append(pos_res)
		return pos
class AeonUtility(SDKUtility):
	"""
	Including Utility Functions for Aeon Usage

	DataStorage Content:
		self.wp_filepath = wp_filepath
		self.wifi_filepath = wifi_filepath
		self.wifi_list = wifi_list
		self.wp_pos = wp_pos
		self.wp_ind = wp_ind
		self.wifi_matrix = wifi_matrix

	"""
	def __init__(self):
		SDKUtility.__init__(self)
		self.loader = LoadWifiData()
		self.map_ratio = 1

	def load_wifi(self, wp_path, wifi_path, ref_list=[]):
		if ref_list:
			wifi = self.loader.extract_with_ref(wp_path, wifi_path, ref_list)
		else:
			wifi = self.loader.extract(wp_path, wifi_path)
		return wifi

	def extract_aeon(self, wifi_path, ref_list):
		file_list = os.listdir(wifi_path)
		route = []
		for fn in file_list:
			if 'journal' in fn:
				continue
			data = self.extract_wifi(os.path.join(wifi_path,fn), ref_list)
			route += data
		return route

	def accuracy(self, res, test_pos, train_pos):
		RMSE = []
		for i,n in enumerate(res):
			pos_res = array(train_pos[n]);
			pos_tar = array(test_pos[i]);
			pos_diff = pos_res
			se = sqrt(((pos_tar - pos_diff) ** 2).sum()) / self.map_ratio
			RMSE.append(se)
		return RMSE

	def pos_weighted(self, w_arr, cls_pos):
		t_pos = zeros(array(cls_pos[0]).shape)
		for i, w in enumerate(w_arr):
			t_pos += array(cls_pos[i]) * w
		t_pos = t_pos / w_arr.sum()
		return t_pos

	def accuracy_proba(self, res, test_pos, train_pos):
		RMSE = []
		for n in range(res.shape[0]):
			w_arr = res[n,:]
			pos_res = self.pos_weighted(w_arr, train_pos)
			pos_tar = test_pos[n]
			se = sqrt(((pos_tar - pos_res) ** 2).sum()) / self.map_ratio
			RMSE.append(se)
		return RMSE

	def res_to_coord(self, res, train_pos, proba=False):
		# print res
		pos = []
		for x_res in res:
			if proba:
				pos_res = self.pos_weighted(x_res, train_pos)
			else:
				pos_res = array(train_pos[x_res])
			pos.append(pos_res)
		return pos