Python machine learning client for SAP HANA (hana-ml) では、以下にアクセスすることができます。
- Predictive Analysis Library (PAL) のすべての機能
- Python の Automated Predictive Library (APL) 関数
これらの関数は、SAP HANA DataFrame で入力データとして使用できます。
入力データセットの準備
このアルゴリズムでは、入力データセットが 3 つの分離サブセット (トレーニング、テスト、チェック) にランダムに分割されます。これらのサブセットは、機械学習ワークフローの実行に不可欠です。
これらのパーティションを作成するには、パーティショニングアルゴリズム [1] で必要なように、入力データセットに 'ID' 列が含まれている必要があります。'ID' 列が明示的に指定されていない場合、アルゴリズムでは、DataFrame の最初の列に 'ID' が含まれていると見なされます。詳細については、[1] を参照してください。
'ID' 列をデータセットに挿入する方法は次のとおりです。
1hdf_input = hdf.add_id(id_col='ID') 1hdf_input.head(5).collect()| ID | MedInc | 世帯年齢 | AveRooms | AveBedrms | 人口 | AveOccup | 緯度 | 経度 | ターゲット | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 1.24 | 52.0 | 2.92 | 0.91 | 396.0 | 4.65 | 37.80 | -122.27 | 5.00 |
| 1 | 2 | 1.16 | 52.0 | 2.43 | 0.94 | 1349.0 | 5.39 | 37.87 | -122.25 | 5.00 |
| 2 | 3 | 7.85 | 52.0 | 7.79 | 1.05 | 517.0 | 2.41 | 37.86 | -122.24 | 5.00 |
| 3 | 4 | 9.39 | 52.0 | 7.51 | 0.95 | 1366.0 | 2.75 | 37.85 | -122.24 | 5.00 |
| 4 | 5 | 7.87 | 52.0 | 8.28 | 1.04 | 947.0 | 2.62 | 37.83 | -122.23 | 5.00 |
入力データセットのパーティショニング
上記のサブセットごとに最適なパーティション率はありません。予測プロジェクトの目標を満たすパーティション率を選択する必要があります。
たとえば、一般的なパーティションの割合には以下が含まれます。
- トレーニング: 80%/テスト: 20%
- トレーニング: 70%/テスト:30%
- トレーニング:60%/テスト:40%
この特定のケースでは、モデルをトレーニングするためのデータ量を最大化し、堅牢なモデル評価のために十分なデータポイントを残す必要があります。そのため、提案されるデータ分割は以下のとおりです。
トレーニング: 70%/テスト:30%
パーティショニングアルゴリズムの入力パラメータは、以下のとおりです。
12345678# Partitioning the input data into train, test, validation sub-sets
from hana_ml.algorithms.pal.partition import train_test_val_split
regressdata_hdf=hdf_input.select('ID', 'MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude', 'Target')
train_hdf, test_hdf, val_hdf = train_test_val_split(data=regressdata_hdf, id_column='ID', random_seed=2, partition_method='random', training_percentage = 0.7, testing_percentage = 0.3, validation_percentage = 0.0)
print(regressdata_hdf.select_statement)出力:
SELECT "ID", "MedInc", "HouseAge", "AveRooms", "AveBedrms", "Population", "AveOccup", "Latitude", "Longitude", "Target" FROM (SELECT CAST(ROW_NUMBER() OVER() AS INTEGER) + 0 AS "ID", * FROM (SELECT * FROM "ML_DEMO".)california_housing")) AS "DT_269"
ハイブリッド勾配ブースティングツリー (HGBT) モデルのトレーニング
PAL ハイブリッド勾配ブースティングツリー (HGBT) アルゴリズム [1] は、混合機能タイプ (連続およびカテゴリ) を入力としてサポートする HANA 最適化勾配ブースティングツリー実装です。回帰および分類シナリオがサポートされます。
回帰のハイブリッド勾配ブースティングモデルは、以下に示すトレーニングサブセットに基づいてトレーニングされます。
123456789101112HybridGradientBoostingRegressor
%%time
hgr = HybridGradientBoostingRegressor(
n_estimators = 20, split_threshold=0.75,
split_method = 'exact', learning_rate=0.3,
max_depth=2,
resampling_method = 'cv', fold_num=5,
evaluation_metric = 'rmse', ref_metric=['mae'] )
hgr.fit(train_hdf, features=['ID', 'MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'], label='Target')CPU 時間: user 4.81 ms、sys: 408 μs、合計: 5.22 ms
ウォール時間: 633 ms
出力:
<hana_ml.algorithms.pal.trees.HybridGradientBoostingRegressor at 0x7fe3333e9510>
参照
[1] SAP アルゴリズム hana_ml.algorithms.pal パッケージ: HybridGradientBoostingRegressor
機能の重要度
機能重要度では、応答または従属変数 [1] の予測時の貢献度に基づいて、入力機能にスコアが割り当てられます。
機能のスコアが高いほど、ターゲット変数を予測するモデルへの影響が大きくなります。重要度スコアは [0, 1] の範囲内です。
モデルの機能の重要度をチェックする方法は以下のとおりです。
最も影響力のある機能は 'MedInc' であり、重要値は '0.51' であることが観測されます。この機能は、ブロックグループ内の収益の中央値を表します。"ブロックグループは、米国が属する最小の地域ブロックです。Census Bureau はサンプルデータを公開します。" [2].
さらに、3 桁目と 5 桁目には、それぞれ 'Latitude' と 'Longitude' という機能があります。それぞれの重要度の値は '0.09' および '0.05' です。
1hgr.feature_importances_.sort('IMPORTANCE', desc='TRUE').collect()| VARIABLE_NAME | IMPORTANCE | |
|---|---|---|
| 0 | MedInc | 0.513025 |
| 1 | ID | 0.230721 |
| 2 | 緯度 | 0.097631 |
| 3 | AveOccup | 0.085743 |
| 4 | 経度 | 0.057718 |
| 5 | AveRooms | 0.011069 |
| 6 | 世帯年齢 | 0.004093 |
| 7 | AveBedrms | 0.000000 |
| 8 | 人口 | 0.000000 |
参照
[1] SAP アルゴリズム hana_ml.algorithms.pal パッケージ: HybridGradientBoostingRegressor