了解模型评估和优化

学习目标

  • 使用 R 平方度量评估线性回归模型的性能。

模型评估

用于评估线性回归模型的模型性能指标是确定系数。它被称为"R 平方",表示为"R2"[ 1, 2 ]

R2 基本上是响应变量中从独立变量可预测的变化比例。即 R2 的值越大,模型解释的可变性就越大。

通常,R2 从 0 到 1 不等;但是,可能存在可以获取负值的情况,请参阅 [1] 以获取更多详细信息。

在这种情况下,R2 分数为 '0.75'。

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

参考

[1] 确定系数

[2] 确定系数(R 平方)

通过最佳参数搜索改进 HGBT 模型

为了改进 HGBT 模型,开始搜索线性回归对象的最佳参数值。ParamSearchCV 使用交叉验证 (CV) 对指定参数值进行详尽或随机搜索 [1]

参考

[1] SAP 算法 hana_ml.algorithms.pal 包:ParamSearchCV

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

ps_hgr3.estimator.selected_param_.collect()

PARAM_NAME

INT_VALUE

DOUBLE_VALUE

STRING_VALUE

0

MAX_DEPTH

10.0

NaN

1

预计运达时间

NaN

0.1

2

COL_SAMPLE_RATE_BYSPLIT

NaN

0.6

3

NODE_SIZE

6.0

NaN

4

GAMMA

NaN

0.1

# 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)

模型重新训练

需要模型重新训练来合并新优化算法的参数,旨在最大化模型性能;这些参数是在上一节中获取的。

%%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 毫秒,系统:2.36 毫秒,总计:6.55 毫秒

墙壁时间:2.19 秒

输出:

**<hana_ml.algorithms.pal.trees.HybridGradientBoostingRegressor,网址为 0x7fe333c01e10>**

模型已重新训练:功能重要性

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

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

模型已重新训练:功能重要性评估

通过与初始"已训练模型"进行比较,您将能够观察到最有影响力的功能仍然是 'MedInc',重要性值降低 '0.34'(先前值为 '0.51')。此功能表示块组中的中等收入。[2].

有趣的是,特征"纬度"和"经度"分别成为来自位置 3 和 5(初始"已训练模型")的第二和第三个最有影响力的特征。事实上,它们越过"0.10"值就变得有影响力的约 2 倍。

增强的模型可能会更准确地强调,地理位置对目标变量的影响比之前想象的更强。"target"变量是 California 区 [2] 的"中间房数值"。

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

VARIABLE_NAME

重要性

0

MedInc

0.340796

1

经度

0.216604

2

纬度

0.153428

3

AveOccup

0.116022

4

AveRooms

0.097980

5

家庭年龄

0.036293

6

群体

0.019592

7

AveBedrms

0.019286

参考

[1] SAP 算法 hana_ml.pal 包:HybridGradientBoostingRegressor

[2] California Housing 数据集说明

模型已重新训练:模型评估

要评估线性回归模型的性能,如"模型评估"部分所述,使用的确定系数(通常称为 R 平方和表示 R2)[1, 2]。

R2 测量由独立变量解释的响应变量中的变化比例。R2 值越高表示模型解释了更大比例的可变性。

R2 的值通常介于 0 到 1 之间,但在某些情况下可能会出现负值 - 请参阅 [1] 以获取更多详细信息。

在这种情况下,增强模型的 R2 得分为 0.829,与最初得分 0.75 相差,表示提高 0.079

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

参考

[1] 确定系数

[2] 确定系数(R 平方)