使用 SAP HANA PAL 训练回归模型

学习目标

  • 了解混合梯度提升树 (HGBT) 算法的回归功能。

面向 SAP HANA 的 Python 机器学习客户端 (hana-ml) 提供对以下内容的访问:

  • 预测分析库 (PAL) 的所有功能

  • Python 中的自动化预测库(APL)函数

这些函数可以与 SAP HANA 数据框架一起用作输入数据。

准备输入数据集

算法将输入数据集随机分为三个不相交的子集:训练测试和****验证。这些子集对于执行机器学习工作流至关重要。

请注意,根据分区算法 [1] 的要求,输入数据集必须包含"ID"列才能创建这些分区。如果未显式指定 'ID' 列,则算法会假定 DataFrame 的第一列包含 'ID'。有关更多详细信息,请参阅 [1]。

以下介绍如何将"ID"列插入数据集:

hdf_input = hdf.add_id(id_col='ID')
hdf_input.head(5).collect()

输出:

标识

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%

分区算法的输入参数如下所示:

# 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"**

参考

[1] SAP 算法 hana_ml.alithms.pal.partition - train_test_val_split

训练混合梯度提升树 (HGBT) 模型

PAL 混合梯度提升树 (HGBT) 算法 [1] 是一种支持混合功能类型(连续和分类)作为输入的 HANA 优化梯度提升树实施。它支持回归分类场景。

回归的混合梯度提升模型基于如下所示的训练子集进行训练:

HybridGradientBoostingRegressor

%%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 times: user 4.81 ms, sys: 408 μs, total: 5.22 ms

墙壁时间:633毫秒

输出:

**<hana_ml.algorithms.pal.trees.HybridGradientBoostingRegressor at 0x7fe3333e9510>**

参考

[1] SAP 算法 hana_ml.algorithms.pal package:HybridGradientBoostingRegressor

功能重要性

功能重要性根据输入特征在预测响应或相关变量 [1] 时的贡献为输入功能分配分数。

功能的评分越高,其对模型预测目标变量的影响就越大。重要性分数在 [0, 1] 范围内。

以下是检查模型功能重要性的方法:

观察到最有影响力的特征是 'MedInc',重要性值为 '0.51'。此功能表示块组中的中等收入。"块组是美国的最小地理单元。人口普查局公布样本数据"[2].

此外,在位置 3 和位置 5,我们分别找到"纬度"和"经度"功能。其相应的重要性值为 '0.09' 和 '0.05'。

hgr.feature_importances_.sort('IMPORTANCE', desc='TRUE').collect()

VARIABLE_NAME

重要性

0

MedInc

0.513025

1

标识

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

[2] California Housing 数据集说明