データの前処理を追加する¶
irisに前処理を追加する¶
ここでは、irisに対して前処理を追加してtrain,inspectしてみます。
ちなみに、akebonoで扱うirisのデータ形式は以下のようになっています。
scikit-learn
のload_iris
からとっているのですが、説明変数のカラム名を少し変更しています。
In [1]: from akebono.dataset import get_dataset In [2]: ds = get_dataset({ ...: 'loader_config': { ...: 'name': 'iris' ...: } ...: }) In [3]: ds.value.head() Out[3]: sepal_length sepal_width petal_length petal_width target 0 5.1 3.5 1.4 0.2 0 1 4.9 3.0 1.4 0.2 0 2 4.7 3.2 1.3 0.2 0 3 4.6 3.1 1.5 0.2 0 4 5.0 3.6 1.4 0.2 0
ここでは、以下2種類の前処理にたいして、複数バリエーションを設定してtrain,inspectします
petal_length
とpetal_width
だけ使うようにする- 標準正規化をかける
config.py
は以下のようになります。
import copy train_config_template = { 'dataset_config': { 'loader_config': { 'name': 'iris', }, }, 'model_config': { 'name': 'SklearnLogisticRegression', 'evaluate_kwargs': { 'cross_val_iterator': 'KFold@sklearn.model_selection', 'cross_val_iterator_kwargs': { 'shuffle': True, 'random_state': 0, 'n_splits': 10, }, }, 'model_type': 'multiple_classifier', }, 'evaluate_enabled': True, 'fit_model_enabled': True, 'dump_result_enabled': True, } train_config_1 = copy.deepcopy(train_config_template) train_config_2 = copy.deepcopy(train_config_template) train_config_3 = copy.deepcopy(train_config_template) train_config_4 = copy.deepcopy(train_config_template) train_config_2['preprocessor_config'] = {'name': 'apply_standard_scaler'} train_config_3['preprocessor_config'] = { 'name': 'select_columns', 'kwargs': { 'columns': ['petal_length', 'petal_width'], }, } train_config_4['preprocessor_config'] = [ { 'name': 'select_columns', 'kwargs': { 'columns': ['petal_length', 'petal_width'], }, }, { 'name': 'apply_standard_scaler', }, ] train_config = [train_config_1, train_config_2, train_config_3, train_config_4]
4種類の設定は、基本は全てロジスティック回帰による分類です。 train_config_1は前処理無し、train_config_2は前処理2のみ、train_config_3は前処理1のみ、train_config_4は前処理1,2の連結です。 実行すると以下のようになります。
$ akebono train $ akebono inspect === scenario summary .. tag: default === ------------------------------------------------------------ train_id: 0 accuracy 0.94667 ------------------------------------------------------------ train_id: 1 accuracy 0.87333 ------------------------------------------------------------ train_id: 2 accuracy 0.86000 ------------------------------------------------------------ train_id: 3 accuracy 0.93333
結果的には、前処理無しが最も良くなりました。前処理1,2を組み合わせると片方だけに比べると良いようです。
ここでは、StatefulPreprocessor
であるapply_standard_scaler
を適用した場合に訓練データに依存したパラメータが保存されていることを確認しておきます。
$ ls -l _storage/default/operation_results/default | awk '{print $9}' train_result_meta_0.pkl train_result_meta_1.pkl train_result_meta_2.pkl train_result_meta_3.pkl train_result_model_0.pkl train_result_model_1.pkl train_result_model_2.pkl train_result_model_3.pkl train_result_preprocessor_ApplyStandardScaler_1_0.pkl train_result_preprocessor_ApplyStandardScaler_3_1.pkl
ストレージに保存されているファイルのうち、下2つがapply_standard_scaler
のパラメータファイルです。この内容は予測時に参照されます。