モデル評価および最適化の理解

Objective

After completing this lesson, you will be able to r二乗メトリクスを使用して、線形回帰モデルのパフォーマンスを評価します。

モデル評価

線形回帰モデルの評価に使用されるモデルパフォーマンスメトリックは、決定係数です。通称「R二乗」で、「R2」[ 1, 2 ] と表記される。

R2は基本的に、独立変数から予測可能な応答変数の変化の割合です。つまり、R2 の値が大きいほど、モデルによって説明されます。

通常、R2 は 0 から 1 まで異なりますが、負の値を取得できる場合もあります。詳細については、[1] を参照してください。

この場合、R2 スコア '0.75' が達成されます。

Python
123456
#Computes the R2 score R2=hgr.score( test_hdf, key='ID', features=['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'], label='Target') R2

出力:

0.7535287346593224

参照

①決定係数

②決定係数(R二乗)

最適なパラメータ検索による HGBT モデルの改善

HGBT モデルを改善するために、線形回帰オブジェクトの最適パラメータ値の検索が開始されます。ParamSearchCV では、クロスオーバーチェック (CV) を使用した指定されたパラメータ値の完全検索またはランダム検索が実行されます [1]

参照

[1] SAP アルゴリズム hana_ml.algorithms.pal パッケージ: ParamSearchCV

Python
123456789101112131415161718
from hana_ml.algorithms.pal.model_selection import ParamSearchCV hgbr=HybridGradientBoostingRegressor(n_estimators=50, subsample = 0.8, col_subsample_tree=0.7) ps_hgr3=ParamSearchCV(estimator=hgbr, search_strategy='grid', param_grid={ 'learning_rate': [0.05, 0.1, 0.025, 0.04, 0.01], 'max_depth': [4, 5, 6, 7, 8, 10], 'split_threshold': [0.1, 0.4, 0.7, 1], 'min_samples_leaf': [2,3,4,5,6], 'col_subsample_split': [0.2,0.4,0.6, 0.8] }, train_control={"fold_num": 10, "evaluation_metric": 'rmse'}, scoring='mae' ) ps_hgr3.set_scoring_metric('mae') ps_hgr3.set_resampling_method('cv') ps_hgr3.fit(data=train_hdf, features=['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'], label='Target', key='ID')

最適化されたパラメータの検査

最適化されたパラメータ名 (左側に表示) と HybridGradientBoostingRegressor パラメータ名 (右側に表示) 間のマッピングを以下に示します。

  • MAX_DEPTH = max_depth
  • ETA = learning_rate
  • COL_SAMPLE_RATE_BYSPLIT = col_subsample_split
  • NODE_SIZE = min_samples_leaf
  • GAMMA = split_threshold
Python
1
ps_hgr3.estimator.selected_param_.collect()
 PARAM_NAMEINT_VALUEDOUBLE_VALUESTRING_VALUE
0MAX_DEPTH10.0NaNなし
1ETANaN0.1なし
2COL_SAMPLE_RATE_BYSPLITNaN0.6なし
3NODE_SIZE6.0NaNなし
4ガンマNaN0.1なし
Python
12
# Optimal parameter values selected hgbt_params = dict(n_estimators = 50, subsample = 0.8, col_subsample_tree=0.7, split_method = 'exact', fold_num=10, resampling_method = 'cv', evaluation_metric = 'rmse', ref_metric=['mae'], max_depth=10, learning_rate=0.1, col_subsample_split=0.6, min_samples_leaf=6, split_threshold=0.1)

モデル再トレーニング

モデルのパフォーマンスを最大化するために、新たに最適化されたアルゴリズムのパラメータを組み込むには、モデルの再トレーニングが必要です。これらのパラメータは、前のセクションで取得しました。

Python
12345
%%time #retrain model with optimal parameters hgr_optimized = HybridGradientBoostingRegressor( **hgbt_params ) hgr_optimized.fit(train_hdf, features=['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'], label='Target')

CPU 時間: ユーザ 4.18 ms、sys: 2.36 ms、合計: 6.55 ms

ウォール時間: 2.19 秒

出力:

<hana_ml.algorithms.pal.trees.HybridGradientBoostingRegressor (0x7fe333c01e10)>

モデルの再トレーニング: 機能の重要性

機能重要度では、応答または従属変数 [1] の予測時の貢献度に基づいて、入力機能にスコアが割り当てられます。

機能のスコアが高いほど、ターゲット変数を予測するモデルへの影響が大きくなります。重要度スコアは [0, 1] の範囲内です。

モデル再トレーニング済: 機能重要度評価

初期の "トレーニング済モデル" と比較すると、最も影響力のある機能が 'MedInc' のままであり、重要度が '0.34' (以前の値は '0.51') に減少していることがわかります。この機能は、ブロックグループ内の収入の中央値を表します。 [2].

興味深いことに、'Latitude' と 'Longitude' は、それぞれ 3 番目と 5 番目 (初期の "モデルトレーニング") から、2 番目と 3 番目に影響力のある機能になります。実のところ、「0.10」値を越える影響力はおよそ2倍になった。

拡張モデルでは、地理的な場所が以前考えていたよりもターゲット変数に強い影響を与えていることがより正確に強調される場合があります。'target' 変数は、カリフォルニアの地区 [2] の '中央値 (Median House Value)' です。

Python
1
hgr_optimized.feature_importances_.sort('IMPORTANCE', desc='TRUE').collect()
 VARIABLE_NAMEIMPORTANCE
0MedInc0.340796
1経度0.216604
2緯度0.153428
3AveOccup0.116022
4AveRooms0.097980
5世帯年齢0.036293
6人口0.019592
7AveBedrms0.019286

参照

[1] SAP アルゴリズム hana_ml.pal パッケージ: HybridGradientBoostingRegressor

[2] カリフォルニア住宅データセットの説明

モデル再トレーニング済: モデル評価

線形回帰モデルのパフォーマンスを評価するには、"モデル評価" セクションで説明されているように、決定係数 (通常は R 二乗で R2 と表記) が使用されます [1, 2]。

R2 は、独立変数によって説明される応答変数の変化の割合を測定します。R2 値が大きいほど、変動の比率が高いことをモデルが説明していることを示します。

通常、R2 の値は 0 から 1 の範囲ですが、場合によっては、負の値が発生する可能性があります。詳細については、[1] を参照してください。

この場合、強化されたモデルは、0.079の増加を表す初期スコア0.75からの改善点である0.829のR2スコアを達成する。

Python
123456
#Computes the R2 score R2=hgr_optimized.score( test_hdf, key='ID', features=['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'], label='Target') R2

出力:

0.7535287346593224

参照

①決定係数

②決定係数(R二乗)