def result_integrate_intra(time_now): training_type = 'intra' span = len(proportional_list) fold_path = root_path + '/result_test1/proportional_integrate' new_fold(fold_path) feature_type = 'TD4' norm = '_norm' subject_list = ['subject_' + str(i) for i in range(1, 6)] res_all = [] blank_line = ['' for i in range(len(channel_pos_list))] res_all.append(blank_line) for action in action_lists: for subject in subject_list: res = [] index = 2 res_ind = 1 data = result_load('250_100',feature_type, subject, norm, action, training_type) title = feature_type+'_'+subject+'_action_1-'+str(action) res_head = [title] res_head.extend(proportional_list) res.append(res_head) for i in range(len(channel_pos_list)): res_intra = [channel_pos_list[i]] # print res_intra res_intra.extend(map(float,data[index:index+span,4][:])) index += span res.append(res_intra) res_np = np.array(res) res_aver = ['average'] for i in range(len(proportional_list)): res_aver.append(np.mean(map(float,res_np[res_ind:,i+1]))) res.append(res_aver) # file_path = fold_path + '/prop_'+training_type+'_'+title+'_'+str(time_now) # log_result(res, file_path, 2) res_all.extend(res) res_all.append(blank_line) res_all.append(blank_line) res_all.append(blank_line) res_all.append(blank_line) res_all.append(blank_line) file_path = fold_path + '/prop_'+training_type+'_all_'+str(time_now) log_result(res_all, file_path, 2)
def feature_action_sensitivity(featuret_type="TD4", action_num=7): """ 对每个特征,分析其在不移位和移位情况下的差异性 """ results = [] subjects = ["subject_" + str(i + 1) for i in range(5)] channel_pos_list = ["S0", "U1", "U2", "D1", "D2", "L1", "L2", "R1", "R2"] # 中心位置 # 上 下 左 右 pos_num = len(channel_pos_list) actions = [i + 1 for i in range(action_num)] groups = [i + 1 for i in range(4)] if feature_type == "TD4": feature_list = ["MAV", "ZC", "SSC", "WL"] elif feature_type == "TD5": feature_list = ["MAV", "ZC", "SSC", "WL", "RMS"] feat_num = len(feature_list) # 4 特征维度 groups = [i + 1 for i in range(4)] group_num = len(groups) # 4 通道数 action_span = feat_num * group_num # 16 train_dir = "train4_250_100" results.append(["subject", "action", "feature", "group"] + channel_pos_list[1:]) for subject in subjects: for action in actions: filename = subject + "_feat_" + featuret_type + "_action_" + str(action) data = np.load(root_path + "/train4_250_100/" + filename + ".npy") means = np.mean(data, axis=0) stds = np.std(data, axis=0) for group in groups: for feat_idx, feat_name in enumerate(feature_list): idx = np.array( [(i + 1) * action_span + feat_idx + (group - 1) * feat_num for i in range(pos_num - 1)] ) idx_S0 = (group - 1) * feat_num + feat_idx # print idx, idx_S0 # variation = abs(means[idx] - means[idx_S0])/means[idx_S0] \ # + abs(stds[idx]-stds[idx_S0])/stds[idx_S0] variation = abs(means[idx] - means[idx_S0]) / means[idx_S0] results.append([subject, str(action), feat_name, str(group)] + map(str, variation)) # print results # print subject, action, feat_name, group, variation[:] fold_path = root_path + "/result_gaussian/sensitivity/" new_fold(fold_path) log_result(results, fold_path + "feature_action_sensitivity", 2)
def feature_extract(raw_data, target, window, overlap, sample_rate, feature_type='TD4', out_dir='train1', subject='subject_1', feat_num=4): ''' 生成数据样本集合(提取特征),参数:原始数据,类别,时间窗(250),重叠窗(100),采样率(1024)''' # print raw_data.shape, target, window, overlap print "----feature_extract target ", target, "...................." start_time = time.time() winsize = (int)(sample_rate * window * 0.001) incsize = (int)(sample_rate * overlap * 0.001) start = 0 # print winsize, incsize x_dim = (raw_data.shape[0] - winsize) / incsize + 1 y_dim = raw_data.shape[1] * feat_num index = 0 trains = np.zeros((x_dim, y_dim)) while start + winsize < raw_data.shape[0]: train = np.array([]) for i in range(raw_data.shape[1]): if feature_type == 'TD4': cur_win_feature = fe.extract_TD4( raw_data[start:start + winsize, i]) # 提取TD4(MAV,ZC,SSC,WL)四种时域特征 if feature_type == 'TD5': cur_win_feature = fe.extract_TD5( raw_data[start:start + winsize, i]) # 提取TD4(MAV,ZC,SSC,WL)四种时域特征 # elif feature_type: # cur_win_feature = fe.extract_TD4_AR(raw_data[start:start+winsize, # i]) # 提取TD4(MAV,ZC,SSC,WL)四种时域特征+AR特征 train = np.concatenate( (train, cur_win_feature), axis=None) # 对每个时间窗提取特征 # print train.shape trains[index] = train index += 1 start += incsize log_file = root_path + '/' + out_dir + '/' + \ subject + '_feat_' + feature_type + '_action_' + str(target) if(not new_fold(root_path + '/' + out_dir)): sys.exit(1) np.save(log_file + '.npy', trains) # np.savetxt(log_file + '.csv', trains, fmt="%s", delimiter=",") print "----feature_extract target ", target, " over, time elapsed:", time.time() - start_time
def feature_action_sensitivity(featuret_type='TD4', action_num=7): ''' 对每个特征,分析其在不移位和移位情况下的差异性 ''' results = [] subjects = ['subject_' + str(i + 1) for i in range(5)] channel_pos_list = [ 'S0', # 中心位置 'U1', 'U2', 'D1', 'D2', 'L1', 'L2', 'R1', 'R2' ] # 上 下 左 右 pos_num = len(channel_pos_list) actions = [i + 1 for i in range(action_num)] groups = [i + 1 for i in range(4)] if feature_type == 'TD4': feature_list = ['MAV', 'ZC', 'SSC', 'WL'] elif feature_type == 'TD5': feature_list = ['MAV', 'ZC', 'SSC', 'WL', 'RMS'] feat_num = len(feature_list) # 4 特征维度 groups = [i + 1 for i in range(4)] group_num = len(groups) # 4 通道数 action_span = feat_num * group_num # 16 train_dir = 'train4_250_100' results.append(['subject', 'action', 'feature', 'group'] + channel_pos_list[1:]) for subject in subjects: for action in actions: filename = subject + '_feat_' + featuret_type + '_action_' + str( action) data = np.load(root_path + '/train4_250_100/' + filename + '.npy') means = np.mean(data, axis=0) stds = np.std(data, axis=0) for group in groups: for feat_idx, feat_name in enumerate(feature_list): idx = np.array([(i + 1) * action_span + feat_idx + (group - 1) * feat_num for i in range(pos_num - 1)]) idx_S0 = (group - 1) * feat_num + feat_idx # print idx, idx_S0 # variation = abs(means[idx] - means[idx_S0])/means[idx_S0] \ # + abs(stds[idx]-stds[idx_S0])/stds[idx_S0] variation = abs(means[idx] - means[idx_S0]) / means[idx_S0] results.append( [subject, str(action), feat_name, str(group)] + map(str, variation)) # print results # print subject, action, feat_name, group, variation[:] fold_path = root_path + '/result_gaussian/sensitivity/' new_fold(fold_path) log_result(results, fold_path + 'feature_action_sensitivity', 2)