実現したいこと
Pythonを用いた機械学習で、学習を表示させたい
前提
現在、筋電のデータを用いた機械学習をPythonにて行っています。
人を転倒させるときと歩行の2パターンで学習を行っています。
特徴量は任意の100データを用いています。
特徴量選択までは上手くいっていると思うのですが、いざ学習結果を表示させてみると結果がNaNとなってしまい、上手く実行させることができません。
該当のソースコード
Python
1MSEC = [50,100,200,]2Trim_time = [0.05, 0.1]3n_splits = 5 # 交差検証 Fold数4n_cv = 5 # 交差検証 何回行うか5# 学習用DF,List作成 #6Model_df = pd.DataFrame()7Result_col = []8Model_csv = pd.DataFrame()9RMS_csv = pd.DataFrame()10 11for msec in MSEC:12 for trim_time in Trim_time:13 for muscle in range(8):14 for serial in Record_df['Serial']:15 16 #転倒17 if Record_df.at[serial,'右転倒'] == True:18 EMG_df = pd.DataFrame(lp_process(serial, muscle, int(Record_df.at[serial,'転倒タイミング']))) 19 EMG_df = EMG_df.T 20 EMG_df['Type'] = 021 EMG_df['Serial'] = serial 22 Model_df = pd.concat([Model_df,EMG_df]) 23 #歩行24 elif Record_df.at[serial,'歩行'] == True:25 EMG_df = pd.DataFrame(lp_process(serial, muscle, int(Record_df.at[serial,'接地タイミング']) + average ))26 EMG_df = EMG_df.T 27 EMG_df['Type'] = 028 EMG_df['Serial'] = serial 29 Model_df = pd.concat([Model_df, EMG_df])30 31 Model_sr = Model_df['Type'] 32 del Model_df['Type'],Model_df['Serial']33 34 X = Model_df # 特徴量35 Y = Model_sr # 正解データ36 37 for i in range(0,n_cv):38 ## 交差検証 ##39 kf = StratifiedKFold(n_splits, shuffle=True)40 model = RandomForestClassifier()41 ## 評価 ##42 scores = cross_val_score(model, X, Y, cv=kf)43 average_score = scores.mean()44 Score = np.array(average_score)45 46 score = round(Score.mean(),3)47 Result_col.append(score) # 筋肉ごとの学習結果をListに格納 48 Model_df = pd.DataFrame() # DFリセット49 50 ## 切り取り時間ごとの学習結果 まとめる ## 51 Model_result = pd.DataFrame(Result_col) # ListからDF作成52 Model_result = Model_result.T # 列から行へ変換53 Model_csv = pd.concat([Model_csv,Model_result]) # 切り取り時間ごとの学習結果行をDFに格納54 Model_csv['msec'] = msec # 移動平均範囲の列を追加55 Result_col = [] # Listリセット 56 Model_result = pd.DataFrame() # DFリセット57 58 ## RMS範囲ごとの学習結果 まとめる ##59 Model_csv.index = Trim_time 60 RMS_csv = pd.concat([RMS_csv,Model_csv]) # 切り取り時間ごとの学習結果行をDFに格納 61 Model_csv = pd.DataFrame() # DFリセット62 63## CSV用DF表示 ##64RMS_csv.columns = ['右前脛骨筋','右腓腹筋外','右大腿直筋','右半腱様筋','左前脛骨筋','左腓腹筋外','左大腿直筋','左半腱様筋','msec']65print('Fold数:' + str(n_splits) + ' / ' + '交差検証回数:' + str(n_cv))66RMS_csv
結果
Fold数:5 / 交差検証回数:5
0 1 2 3 4 5 6 7 msec
0.05 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 50
0.10 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 50
0.05 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 100
0.10 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 100
0.05 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 200
0.10 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 200
このように結果が全て1.0となってしまう

0 コメント