def run_train_cv(self, fold_splits): # データをロードする self._load_data() # モデルをクロスバリデーションの分割数分作成する self._cv_models = [] for i in range(fold_splits): model = copy.deepcopy(self._model) self._cv_models.append(model) fold = KFold(n_splits=fold_splits, shuffle=False) for i, (train_index, valid_index) in enumerate( fold.split(self._whole_x, self._whole_y)): # 訓練データを抽出する tx = self._whole_x.iloc[train_index] ty = self._whole_y.iloc[train_index] # 検証データを抽出する vx = self._whole_x.iloc[valid_index] vy = self._whole_y.iloc[valid_index] # モデルがDNNの場合はデータを正規化する if type(self._model) is ModelDnn: # Max-Minスケール化 scaler, tx, vx = util.max_min_scale(tx, vx) # 学習を行う self._model.train(tx, ty, vx, vy) # 予測を行う pred_y = self._model.predict(vx) # 評価結果を出力する run_fold_name = '{0:s}_fold_{1:02d}'.format(self._run_name, i) print('#################################') print(' {0:s}'.format(run_fold_name)) print('#################################') if type(self._model) is ModelDnn: # モデルがDNNの場合はOne-Hotラベル表現用の正解率を表示する vy_onehot = keras.utils.to_categorical( vy, num_classes=self._label_num) util.print_accuracy_one_hot(vy_onehot, pred_y, self._class_names) util.print_precision_and_recall_one_hot( vy_onehot, pred_y, self._class_names) else: util.print_accuracy(vy, pred_y, self._class_names) util.print_precision_and_recall(vy, pred_y, self._class_names)
def run_train_all(self): self._load_data() train_x, train_y = self._train_x, self._train_y # モデルがDNNの場合はデータを正規化する if type(self._model) is ModelDnn: # Max-Minスケール化 self._train_all_scaler, train_x, _ = util.max_min_scale( train_x, None) # 学習実行 self._model.train(train_x, train_y) self.is_trained_all = True
def run_train_cv(self, fold_splits): # データをロードする self._load_data() # モデルをクロスバリデーションの分割数分作成する self._cv_models = [] for i in range(fold_splits): model = copy.deepcopy(self._model) self._cv_models.append(model) fold = KFold(n_splits=fold_splits, shuffle=False) for i, (train_index, test_index) in enumerate( fold.split(self._whole_x, self._whole_y)): model = self._cv_models[i] # 訓練データを抽出する tx = self._whole_x.iloc[train_index] ty = self._whole_y.iloc[train_index] # 検証データを抽出する vx = self._whole_x.iloc[test_index] vy = self._whole_y.iloc[test_index] # モデルがDNNの場合はデータを正規化する if type(self._model) is ModelDnn: # Max-Minスケール化 scaler, tx, vx = util.max_min_scale(tx, vx) # 学習を行う run_fold_name = '{0:s}_fold_{1:02d}'.format(self._run_name, i) model.train(tx, ty, vx, vy) # 予測を行う pred_y = model.predict(vx) # 評価結果を出力する self._print_evaluation_score(model, run_fold_name, vy, pred_y) # 特徴量の重要度を表示する self._show_importance_of_feature(model, run_fold_name) # Graphvizのグラフをファイルに出力する self._export_graphviz(model, run_fold_name)
def run_train_cv(self): # データをロードする self._load_data() #fold = StratifiedKFold(n_splits=3) fold = KFold(n_splits=3, shuffle=True) for i, (train_index, test_index) in enumerate( fold.split(self._train_x, self._train_y)): # 訓練データを抽出する tx = self._train_x.iloc[train_index] ty = self._train_y.iloc[train_index] # 検証データを抽出する vx = self._train_x.iloc[test_index] vy = self._train_y.iloc[test_index] # モデルがDNNの場合はデータを正規化する if type(self._model) is ModelDnn: # Max-Minスケール化 scaler, tx, vx = util.max_min_scale(tx, vx) # 学習を行う self._model.train(tx, ty, vx, vy) # 予測を行う pred_y = self._model.predict(vx) # 評価結果を出力する run_fold_name = '{0:s}_fold_{1:02d}'.format(self._run_name, i) print('#################################') print(' {0:s}'.format(run_fold_name)) print('#################################') if type(self._model) is ModelDnn: # モデルがDNNの場合はOne-Hotラベル表現用の正解率を表示する vy_onehot = keras.utils.to_categorical( vy, num_classes=self._label_num) util.print_accuracy_one_hot(vy_onehot, pred_y, self._class_names) else: util.print_accuracy(vy, pred_y, self._class_names)