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)
示例#3
0
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
示例#4
0
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)