예제 #1
0
    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)
예제 #2
0
    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)
예제 #4
0
    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)