文章目录
- 分类模型的评价指标
- 1. Recall@k
- 公式
- 举例
- 代码
- 2. Precision@k
- 公式
- 举例
- 代码
- 3. F1@k
- 公式
- 代码
- 4.[其它常见的分类模型评价指标](https://blog.csdn.net/LiuRuiaby35646/article/details/136711918)
- 回归模型的评价指标
- 1.均方误差(Mean Square Error)
- 公式
- 代码
- 2.均方根误差(Root Mean Square Error)
- 公式
- 代码
- 3.平均绝对误差(Mean Absolute Error)
- 公式
- 代码
- 4.决定系数:R2(R-Square)
- 公式
- 代码
- 为什么有时候R2会出现负数
- 5. 校正决定系数(Adjusted R-Square)
- 代码
- 为什么有了R2,还要引进校正决定系数
- 6. 皮尔逊相关系数(Pearson Correlation Coefficient)
- 代码
- 局限性
- 7.斯皮尔曼秩相关系数(Spearman's Rank Correlation Coefficient)
- 代码
- 局限性
- 总结
分类模型的评价指标
1. Recall@k
Recall@k 是信息检索和推荐系统中常用的评价指标,用于评估系统在前 k 个返回结果中检索到相关项的能力。具体来说,Recall@k 衡量的是在返回的前 k 个结果中有多少是相关的。
公式
Recall@k = (在前 k 个结果中相关项的数量) / (总相关项的数量)
举例
真实情况:
疾病A的治疗药物是:药物1,药物2,药物3,药物4.
疾病B的治疗药物是:药物5,药物6,药物7
模型预测情况:
疾病A的治疗药物是:药物2,药物5,药物1,药物6,药物3,药物7(按照推荐的可能性排序)
疾病 B的治疗药物是:药物7,药物8,药物5,药物6(按照推荐的可能性排序)
若K=3
,则选取模型推测结果的前三个,即:
疾病A:药物2,药物5,药物1
疾病B:药物7,药物8,药物5
所以:
对于疾病A:药物2,药物1是相关项
对于疾病B:药物7,药物5是相关项
recall@k = (2/4 + 2/3) /2 = 0.583
代码
def calculate_recall_at_k(predicted_associations, k):
recall_scores = []
for disease in true_associations:
true_set = set(true_associations[disease])
predicted_list = predicted_associations[disease][:k]
predicted_set = set(predicted_list)
recall = len(true_set & predicted_set) / len(true_set)
recall_scores.append(recall)
return sum(recall_scores) / len(recall_scores)
# Example data
true_associations = {
'DiseaseA': ['Drug1', 'Drug2', 'Drug3', 'Drug4'],
'DiseaseB': ['Drug5', 'Drug6', 'Drug7']
}
predicted_associations = {
'DiseaseA': ['Drug2', 'Drug5', 'Drug1', 'Drug6', 'Drug3', 'Drug7'],
'DiseaseB': ['Drug7', 'Drug8', 'Drug5', 'Drug6']
}
average_recall_at_k = calculate_recall_at_k(true_associations, predicted_associations, 3)
print(f'Average Recall@{3}: {average_recall_at_k}')
Average Recall@3: 0.5833333333333333
2. Precision@k
Precision@k 是另一个常用的评价指标,用于评估推荐系统或信息检索系统在前 k 个返回结果中相关项的比例。具体来说,Precision@k 衡量的是在前 k 个返回结果中,相关项占的比例。
公式
Precision@k = (在前 k 个结果中相关项的数量) / k
举例
真实情况:
疾病A的治疗药物是:药物1,药物2,药物3,药物4.
疾病B的治疗药物是:药物5,药物6,药物7
模型预测情况:
疾病A的治疗药物是:药物2,药物5,药物1,药物6,药物3,药物7(按照推荐的可能性排序)
疾病 B的治疗药物是:药物7,药物8,药物5,药物6(按照推荐的可能性排序)
若K=3
,则选取模型推测结果的前三个,即:
疾病A:药物2,药物5,药物1
疾病B:药物7,药物8,药物5
所以:
对于疾病A:药物2,药物1是相关项
对于疾病B:药物7,药物5是相关项
precision@k = (2/3+ 2/3)/2 = 0.667
代码
def precision_at_k(true_associations, predicted_associations, k):
precision_scores = []
for disease, true_drugs in true_associations.items():
if disease in predicted_associations:
predicted_drugs = predicted_associations[disease][:k]
true_positives = set(predicted_drugs) & set(true_drugs)
precision = len(true_positives) / k
precision_scores.append(precision)
return sum(precision_scores) / len(precision_scores)
# 示例数据
true_associations = {
'DiseaseA': ['Drug1', 'Drug2', 'Drug3', 'Drug4'],
'DiseaseB': ['Drug5', 'Drug6', 'Drug7']
}
predicted_associations = {
'DiseaseA': ['Drug2', 'Drug5', 'Drug1', 'Drug6', 'Drug3', 'Drug7'],
'DiseaseB': ['Drug7', 'Drug8', 'Drug5', 'Drug6']
}
# 计算 Precision@k
average_precision_at_k = precision_at_k(true_associations, predicted_associations, 3)
print(f'Average Precision@{3}: {average_precision_at_k}')
输出:0.6667
3. F1@k
F1@k 是信息检索和推荐系统中常用的综合评价指标,它结合了 Precision@k 和 Recall@k,以提供对模型性能的更全面的评估。F1@k 的定义是 Precision@k 和 Recall@k 的调和平均数。F1@k 的取值范围在 0 到 1 之间,值越大表示模型的性能越好。
公式
代码
def f1_at_k(true_associations, predicted_associations, k):
precision = precision_at_k(true_associations, predicted_associations, k)
recall = recall_at_k(true_associations, predicted_associations, k)
if precision + recall == 0:
return 0.0
return 2 * (precision * recall) / (precision + recall)
average_f1_at_k = f1_at_k(true_associations, predicted_associations, 3)
4.其它常见的分类模型评价指标
回归模型的评价指标
1.均方误差(Mean Square Error)
均方误差(Mean Squared Error,MSE)是统计学和机器学习中常用的损失函数和评价指标,用于评估预测值与真实值之间的差异。它计算的是预测值与真实值之间的平方差的平均值。MSE 越小,表示预测值与真实值之间的差异越小,模型的预测效果越好。
公式
代码
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
mse = mean_squared_error(y_true, y_pred)
2.均方根误差(Root Mean Square Error)
均方根误差(Root Mean Squared Error,RMSE)是评估预测模型性能的一种常用指标,尤其在回归分析中。它是均方误差(MSE)的平方根,衡量预测值与实际值之间的差异。RMSE 保留了 MSE 的优点,并使得误差的度量单位与原始数据相同,这有助于直观理解误差的大小。
公式
代码
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
rmse = np.sqrt(mse)
3.平均绝对误差(Mean Absolute Error)
平均绝对误差(Mean Absolute Error,MAE)是评估回归模型预测性能的常用指标之一。它衡量的是预测值与实际值之间的平均绝对差异,即预测值与实际值之间误差的绝对值的平均值。MAE 直观且易于理解,因为它的单位与原始数据相同,并且不会像均方误差(MSE)那样放大异常值的影响。
公式
代码
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
mae = mean_absolute_error(y_true, y_pred)
4.决定系数:R2(R-Square)
决定系数(Coefficient of Determination),通常用R2表示,是统计学中用于评估回归模型拟合优度的重要指标。它衡量的是模型解释因变量变异的比例,即模型的解释力。决定系数的取值范围在 0 到 1 之间,值越接近 1,表示模型对数据的拟合程度越高。
公式
代码
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
r2 = r2_score(y_true, y_pred)
为什么有时候R2会出现负数
负的 R2表示模型比均值模型表现更差,是模型不合适、过度拟合、数据异常或预测值不当的信号。在这种情况下,需要重新评估模型选择、数据预处理或特征工程,以提高模型的拟合效果和泛化能力。
5. 校正决定系数(Adjusted R-Square)
调整后的 R2(Adjusted R-squared) 是对传统 R2决定系数的一种修正,它考虑了模型中自变量的数量,旨在提供一个更加准确的模型拟合优度评估。调整后的R2 特别适用于多元回归模型,在比较不同的回归模型时,调整后的R2可以避免因增加变量而导致的R2人为增大现象。
代码
Adjusted_R2::1-((1-r2_score(y_test,y_predict))*(n-1))/(n-p-1)
为什么有了R2,还要引进校正决定系数
不断添加变量,使模型变得复杂,R²会变大(模型的拟合优度提升,而这种提升是虚假的),而R2*则不一定变大,因为其随意添加变量不一定能让模型拟合度上升。
6. 皮尔逊相关系数(Pearson Correlation Coefficient)
皮尔逊相关系数(Pearson Correlation Coefficient)是一种统计量,用于衡量两个变量之间线性关系的强度和方向。其取值范围从 -1 到 1。
1 表示两个变量之间存在完全正线性关系。
-1 表示两个变量之间存在完全负线性关系。
0 表示两个变量之间没有线性关系。
代码
from scipy.stats import spearmanr, pearsonr
pearson_corr, _ = pearsonr(y_pred, y_true)
局限性
1.仅衡量线性关系:皮尔逊相关系数只适用于线性关系,无法捕捉非线性关系。如果数据之间存在非线性关系,皮尔逊相关系数可能会低,即使回归模型可能很好地拟合了数据。
2.对异常值敏感:皮尔逊相关系数对异常值非常敏感。异常值可能会显著影响相关系数的值,从而给出误导性的评估。
3.不考虑模型的偏差和方差:皮尔逊相关系数无法衡量模型的偏差(bias)和方差(variance),这对于全面评估模型性能非常重要。
7.斯皮尔曼秩相关系数(Spearman’s Rank Correlation Coefficient)
斯皮尔曼相关系数,是一种非参数统计度量,用于评估两个变量的单调关系的强度和方向。与皮尔逊相关系数不同,斯皮尔曼相关系数不要求数据满足线性关系和正态分布条件,因此更适合处理非线性和非正态的数据。
代码
from scipy.stats import spearmanr, pearsonr
spearman_corr, _ = spearmanr(y_pred, y_true)
局限性
线性回归模型:对于线性回归模型,皮尔逊相关系数或决定系数(R2)更适合,因为它们直接衡量线性关系的强度。
误差度量:斯皮尔曼秩相关系数无法直接反映预测值与实际值之间的误差大小。均方误差(MSE)、均方根误差(RMSE)和平均绝对误差(MAE)等指标更适合用于度量预测误差。
总结
相比较于均方误差,均方根误差,平均绝对误差,决定系数,校正决定系数来说,皮尔逊相关系数和斯皮尔曼秩相关系数并没有那么适合用于回归模型的评估。