了解模型评估和优化
学习目标
使用 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 |
参考
模型已重新训练:模型评估
要评估线性回归模型的性能,如"模型评估"部分所述,使用的确定系数(通常称为 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 平方)