使用 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