公式: M A E = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ MAE=\frac{1}{n}\sum_{i = 1}^{n}\vert y_i-\hat{y}_i\vert MAE=n1∑i=1n∣yi−y^i∣,其中 y i y_i yi是真实值, y ^ i \hat{y}_i y^i是预测值, n n n是样本数量。
公式: R 2 = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2 = 1-\frac{\sum_{i = 1}^{n}(y_i-\hat{y}_i)^2}{\sum_{i = 1}^{n}(y_i-\bar{y})^2} R2=1−∑i=1n(yi−yˉ)2∑i=1n(yi−y^i)2,其中 y ˉ \bar{y} yˉ是真实值的平均值。
特点: R 2 R^2 R2可以直观地反映模型的优劣,并且考虑了数据的整体变化情况,但当模型中增加无关特征时, R 2 R^2 R2可能会虚高。
代码示例:
from sklearn.metrics import r2_score
import numpy as npy_true = np.array([3,-0.5,2,7])
y_pred = np.array([2.5,0.0,2,8])
r2 = r2_score(y_true, y_pred)print(f"决定系数: {r2}")
回归任务评估指标对比
graph TD
A[真实值] --> B[预测值]
B --> C{误差计算}
C --> D[MAE: 绝对误差平均]
C --> E[MSE: 平方误差平均]
E --> F[RMSE: 平方根]
C --> G[R²: 方差解释比例]
指标
公式
特点
异常值敏感度
MAE
1 n ∑ ∣ y i − y ^ i ∣ \frac{1}{n}\sum \vert y_i-\hat{y}_i\vert n1∑∣yi−y^i∣
直观易解释,单位一致
低
RMSE
1 n ∑ ( y i − y ^ i ) 2 \sqrt{\frac{1}{n}\sum (y_i-\hat{y}_i)^2} n1∑(yi−y^i)2
放大大误差,同量纲
高
R²
1 − S S r e s S S t o t 1-\frac{SS_{res}}{SS_{tot}} 1−SStotSSres
无量纲,可跨数据集比较
中
分类任务评估指标
1. 准确率(Accuracy)
定义:分类正确的样本数占总样本数的比例。
公式: A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy=\frac{TP + TN}{TP+TN+FP+FN} Accuracy=TP+TN+FP+FNTP+TN,其中 T P TP TP(真正例)是实际为正类且预测为正类的样本数, T N TN TN(真反例)是实际为反类且预测为反类的样本数, F P FP FP(假正例)是实际为反类但预测为正类的样本数, F N FN FN(假反例)是实际为正类但预测为反类的样本数。
特点:简单直观,但在类别不平衡的情况下,准确率可能不能很好地反映模型的性能。
代码示例:
from sklearn.metrics import accuracy_score
import numpy as npy_true = np.array([0,1,0,1])
y_pred = np.array([1,1,0,1])
accuracy = accuracy_score(y_true, y_pred)print(f"准确率: {accuracy}")
2. 精确率(Precision)
定义:预测为正类的样本中,实际为正类的比例。
公式: P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP + FP} Precision=TP+FPTP
特点:精确率关注的是预测为正类的样本的准确性,常用于需要严格控制误判为正类的情况。
代码示例:
from sklearn.metrics import precision_score
import numpy as npy_true = np.array([0,1,0,1])
y_pred = np.array([1,1,0,1])
precision = precision_score(y_true, y_pred)print(f"精确率: {precision}")
3. 召回率(Recall)
定义:实际为正类的样本中,被预测为正类的比例。
公式: R e c a l l = T P T P + F N Recall=\frac{TP}{TP + FN} Recall=TP+FNTP
特点:召回率关注的是模型对正类样本的识别能力,常用于需要尽可能找出所有正类样本的情况。
代码示例:
from sklearn.metrics import recall_score
import numpy as npy_true = np.array([0,1,0,1])
y_pred = np.array([1,1,0,1])
recall = recall_score(y_true, y_pred)print(f"召回率: {recall}")
4. F1值(F1 - Score)
定义:精确率和召回率的调和平均数,用于综合衡量模型的性能。
公式: F 1 = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l F1 = 2\times\frac{Precision\times Recall}{Precision + Recall} F1=2×Precision+RecallPrecision×Recall
特点:F1 值在精确率和召回率之间取得了平衡,当两者都较高时,F1 值也会较高。
代码示例:
from sklearn.metrics import f1_score
import numpy as npy_true = np.array([0,1,0,1])
y_pred = np.array([1,1,0,1])
f1 = f1_score(y_true, y_pred)print(f"F1值: {f1}")
分类指标对比表
指标
公式
关注重点
适用场景
准确率
( T P + T N ) / T o t a l (TP+TN)/Total (TP+TN)/Total
公式: s ( i ) = b ( i ) − a ( i ) max { a ( i ) , b ( i ) } s(i)=\frac{b(i)-a(i)}{\max\{a(i),b(i)\}} s(i)=max{a(i),b(i)}b(i)−a(i),其中 a ( i ) a(i) a(i)是样本 i i i到同一簇内其他样本的平均距离, b ( i ) b(i) b(i)是样本 i i i到其他最近簇中所有样本的平均距离。
特点:可以在不知道真实标签的情况下评估聚类效果,但计算复杂度较高。
代码示例:
from sklearn.metrics import silhouette_score
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeansX, _ = make_blobs(n_samples=500, centers=4, random_state=42)
kmeans = KMeans(n_clusters=4, random_state=42).fit(X)
labels = kmeans.labels_
silhouette_avg = silhouette_score(X, labels)print(f"轮廓系数: {silhouette_avg}")
公式: R I = T P + T N T P + T N + F P + F N RI=\frac{TP + TN}{TP+TN+FP+FN} RI=TP+TN+FP+FNTP+TN(这里的 T P TP TP、 T N TN TN、 F P FP FP、 F N FN FN是基于聚类结果和真实标签的组合情况计算得到的)
特点:考虑了所有样本对的分类情况,能够全面地评估聚类结果的准确性。
代码示例:
from sklearn.metrics import rand_score
import numpy as nplabels_true = np.array([0,0,1,1])
labels_pred = np.array([0,0,1,1])
ri = rand_score(labels_true, labels_pred)print(f"兰德指数: {ri}")
聚类指标对比表
指标
公式
是否需要标签
取值范围
特点
轮廓系数
b ( i ) − a ( i ) max ( a ( i ) , b ( i ) ) \frac{b(i)-a(i)}{\max(a(i),b(i))} max(a(i),b(i))b(i)−a(i)
否
[-1, 1]
评估簇内紧密度与簇间分离度
兰德指数
T P + T N T P + T N + F P + F N \frac{TP+TN}{TP+TN+FP+FN} TP+TN+FP+FNTP+TN