完成--完成获取模型评价指标方法

This commit is contained in:
haotian 2025-02-18 10:44:34 +08:00
parent 837ccc386a
commit 13da72081c
5 changed files with 152 additions and 5 deletions

View File

@ -334,29 +334,33 @@ GET /api/metrics
Response:
{
"status": "success",
"metrics": {
"metric": {
"classification": [
{
"name": "accuracy",
"description": "准确率",
"range": [0, 1]
"range": [0, 1],
"interpretation": "值越大越好"
},
{
"name": "f1",
"description": "F1分数",
"range": [0, 1]
"range": [0, 1],
"interpretation": "值越大越好"
}
],
"regression": [
{
"name": "mse",
"description": "均方误差",
"range": [0, null]
"range": [0, null],
"interpretation": "值越小越好"
},
{
"name": "mae",
"description": "平均绝对误差",
"range": [0, null]
"range": [0, null],
"interpretation": "值越小越好"
}
]
}

View File

@ -0,0 +1,7 @@
from function.method_reader_metric import MethodReader
method_reader = MethodReader()
print(method_reader.get_metrics())

View File

@ -0,0 +1,79 @@
import yaml
from typing import Dict, List
import os
import logging
from pathlib import Path
class MethodReader:
"""方法配置读取器"""
def __init__(self):
"""初始化方法读取器"""
self.logger = logging.getLogger(__name__)
self.method_config = self._load_metrics()
def _load_metrics(self) -> Dict:
"""加载方法配置文件"""
try:
config_path = Path('model/metrics.yaml')
if not config_path.exists():
raise FileNotFoundError(f"Method config file not found at {config_path}")
with open(config_path, 'r', encoding='utf-8') as f:
config = yaml.safe_load(f)
self.logger.info("Successfully loaded method config")
return config
except Exception as e:
self.logger.error(f"Error loading method config: {str(e)}")
raise
def get_metrics(self) -> Dict:
"""获取预处理方法列表"""
try:
metrics = []
# 分类方法
classification_metrics = self.method_config.get('classification', {})
if classification_metrics:
metrics.append({
"name": "classification_metrics",
"description": "分类方法评价指标",
"metric": classification_metrics
})
# 回归方法
regression_metrics = self.method_config.get('regression', {})
if regression_metrics:
metrics.append({
"name": "regression_metrics",
"description": "回归方法评价指标",
"metric": regression_metrics
})
# 聚类方法
clustering_metrics = self.method_config.get('clustering', {})
if clustering_metrics:
metrics.append({
"name": "clustering_metrics",
"description": "聚类方法评价指标",
"metric": clustering_metrics
})
return {
"status": "success",
"metric": metrics
}
except Exception as e:
self.logger.error(f"Error getting preprocessing methods: {str(e)}")
return {
"status": "error",
"error": str(e)
}

57
model/metrics.yaml Normal file
View File

@ -0,0 +1,57 @@
classification:
- name: "accuracy"
description: "分类正确的样本占总样本数的比例。"
range: [0, 1]
interpretation: "值越大效果越好"
- name: "precision"
description: "预测为正类的样本中,真正类的比例。"
range: [0, 1]
interpretation: "值越大效果越好"
- name: "recall"
description: "真正类样本中被正确预测的比例。"
range: [0, 1]
interpretation: "值越大效果越好"
- name: "f1-score"
description: "精确率和召回率的调和平均值。"
range: [0, 1]
interpretation: "值越大效果越好"
- name: "roc_auc"
description: "ROC 曲线下的面积,衡量模型区分正负样本的能力。"
range: [0, 1]
interpretation: "值越大效果越好"
regression:
- name: "mean_absolute_error"
description: "平均绝对误差,表示预测值与真实值之差的绝对值的均值。"
range: [0, +∞]
interpretation: "值越小效果越好"
- name: "mean_squared_error"
description: "均方误差,表示预测值与真实值之差的平方的均值。"
range: [0, +∞]
interpretation: "值越小效果越好"
- name: "r2_score"
description: "决定系数表示模型解释数据方差的能力1 表示完美拟合。"
range: [-∞, 1]
interpretation: "值越大效果越好"
- name: "explained_variance_score"
description: "解释方差,衡量预测数据与真实数据的方差相似程度。"
range: [0, 1]
interpretation: "值越大效果越好"
clustering:
- name: "adjusted_rand_score"
description: "调整兰德指数,衡量聚类结果与真实标签的相似度。"
range: [-1, 1]
interpretation: "值越大效果越好"
- name: "homogeneity_score"
description: "同质性得分,衡量聚类的纯度,即每个聚类是否只包含单一类别的样本。"
range: [0, 1]
interpretation: "值越大效果越好"
- name: "completeness_score"
description: "完整性得分,衡量所有同类别样本是否被正确聚类到同一组。"
range: [0, 1]
interpretation: "值越大效果越好"
- name: "silhouette_score"
description: "轮廓系数,衡量样本在其簇内的紧密度和与其他簇的分离度。"
range: [-1, 1]
interpretation: "值越大效果越好"