如何使用Python获取Vertex AI已训练模型的特征重要性及评估指标数值
Vertex AI AutoML 模型评估指标与特征重要性提取方法
1 提取评估指标键值对
你当前获取的model_evaluations返回的是Protobuf格式的结构化数据,通过Protobuf转字典的方法即可直接读取所有键值对,在你原有代码的基础上追加以下逻辑:
from google.protobuf.json_format import MessageToDict # 遍历模型评估记录(AutoML训练的模型默认仅包含1条评估记录) for eval_item in list_eval.model_evaluations: # 将Protobuf格式的metrics转换为Python原生字典 metrics_dict = MessageToDict(eval_item.metrics) # 输出所有指标键值对 for metric_key, metric_value in metrics_dict.items(): print(f"指标名:{metric_key},数值:{metric_value}") # 单独读取指定指标示例 mae = metrics_dict["meanAbsoluteError"] print(f"单独提取的平均绝对误差为:{mae}")
如果使用Vertex AI高层SDK可以省去格式转换步骤,代码更简洁:
from google.cloud import aiplatform # 初始化SDK aiplatform.init(project=project_id, location=location) # 加载已训练的模型 model = aiplatform.Model(model_id) # 直接获取评估指标字典 eval_metrics = model.get_model_evaluation().metrics print(eval_metrics["meanAbsoluteError"])
2 提取特征重要性文本数据
特征重要性存储在模型评估结果的解释字段中,同样可以通过两种方式提取:
基于你当前使用的aiplatform_v1底层SDK
在遍历评估记录的逻辑中追加以下代码:
for eval_item in list_eval.model_evaluations: if eval_item.explanation: # 读取所有特征的重要性得分 feature_importance_list = [] for attribution in eval_item.explanation.mean_attributions: feature_name = attribution.feature_name importance_score = attribution.attribution feature_importance_list.append({ "feature_name": feature_name, "importance_score": importance_score }) # 按重要性得分降序排序 feature_importance_list.sort(key=lambda x: x["importance_score"], reverse=True) # 输出所有特征重要性 for item in feature_importance_list: print(f"特征:{item['feature_name']},重要性得分:{item['importance_score']}")
基于高层SDK直接获取
# 承接上面高层SDK的模型加载逻辑 eval_res = model.get_model_evaluation() feature_importance = eval_res.explanation.mean_attributions # 直接转换为字典格式处理 print(feature_importance)
内容的提问来源于stack exchange,提问作者Hiroshi Ueno
相关产品推荐
相关产品推荐

