面向 SAP HANA 的 Python 机器学习客户端 (hana-ml) 提供对以下内容的访问:
- 预测分析库 (PAL) 的所有功能
- Python 中的自动化预测库(APL)函数
这些函数可以与 SAP HANA 数据框架一起用作输入数据。
准备输入数据集
算法将输入数据集随机分为三个不相交的子集:训练、测试和验证。这些子集对于执行机器学习工作流至关重要。
请注意,根据分区算法 [1] 的要求,输入数据集必须包含"ID"列才能创建这些分区。如果未显式指定 'ID' 列,则算法会假定 DataFrame 的第一列包含 'ID'。有关更多详细信息,请参阅 [1]。
以下介绍如何将"ID"列插入数据集:
1hdf_input = hdf.add_id(id_col='ID') 1hdf_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%
分区算法的输入参数如下所示:
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 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'。
1hgr.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