python:k分割交差検証の前処理で起こる不具合の原因を特定したい

python

1def normalize_angle_with_sin(data):2 """ 3 与えられた角度の時系列データについて, 値を[0, 1)に正規化して返す. phiはsin, cosを取り[-1, 1)とする. 4 5 """6 phi = data[:, :, 0:2]7 phi_s = np.sin(phi/64.0 * 2.0 * np.pi)8 phi_c = np.cos(phi/64.0 * 2.0 * np.pi)9 10 #psi = data[:, :, 2:4] / (np.pi/2.0)11 psi = data[:, :, 2:4] / 16.012 n, s, a = data.shape 13 ret = np.zeros([n, s, a+2])14 ret[:, :, 0:2] = phi_s 15 ret[:, :, 2:4] = phi_c 16 ret[:, :, 4:6] = psi 17 return ret 18 19def apply_moving_average(time_index, data, windowsize):20 """ 21 与えられた時系列データについて, 単純移動平均を所定の秒数のウインドウサイズで実行し, その結果の時系列を返す. 22 """23 window_size = np.searchsorted(time_index, windowsize)24 window = np.ones((window_size,))/window_size 25 return np.apply_along_axis(lambda m: np.convolve(m, window, mode='valid'), axis=0, arr=data)26 27def apply_pca_with_normalization(data):28 """ 29 与えられた時系列データについて, 主成分分析(PCA)を行い, PCA後の系列を[0,1)に正規化して全てを返す. 30 """31 n, s, a = data.shape 32 # 時間軸方向に全ての角度情報を並べる33 dim_of_input = s*a 34 dim_of_pca = s*a 35 36 input_data = data.reshape(n, s*a)37 # pca実行38 pca = PCA(n_components=dim_of_pca, random_state=0)39 feature = pca.fit_transform(input_data)40 PCA_comp = pca.components_ #基底行列41 ret = np.dot(feature, PCA_comp).T 42 43 # 各時系列データの最大値と最小値を求める44 data_min = data.min(axis=1, keepdims=True)45 data_max = data.max(axis=1, keepdims=True)46 47 # 最大値と最小値を使って正規化する48 return (data - data_min) / (data_max - data_min)49 50def pre_process(mode=None):51 """ 52 53 """54 prefix_list = set([f.split(".")[0] for f in os.listdir(pcapngDir) if f.endswith(".npy")])55 for item in prefix_list:56 label = label_table[item]57 if not label.startswith(mode):58 continue59 60 dirname = os.path.join(savedir, mode, label)61 if not os.path.exists(dirname):62 os.makedirs(dirname)63 64 65 p524= np.load(pcapngDir+"/"+item+'.p524L.npy') # [N][52][4]66 tacc= np.load(pcapngDir+"/"+item+'.tacc.npy')67 68 69 train_time_index, test_time_index, train_data, test_data = get_time_range_data(tacc, p524, 30, 90, 150)70 #train_time_index, test_time_index, train_data, test_data = get_split_data(tacc, p524, 30, 150)71 72 for train_mode, time_index, data in [["train", train_time_index, train_data],73 ["test", test_time_index, test_data]]:74 plot_data = [data]75 if mode == "LOS":76 data = normalize_angle_with_sin(data)77 plot_data.append(data)78 #data = apply_moving_average(time_index, data, 1.0)79 #plot_data.append(data)80 data = apply_pca_with_normalization(data)81 plot_data.append(data)82 83

コメントを投稿

0 コメント