今天给大家分享在机器学习中最广泛使用的十大评估指标。评估指标是用于衡量机器学习模型的性能,帮助我们判断模型在解决特定任务上的效果。
不同的评估指标适用于不同类型的任务(分类、回归),选择合适的指标能够有效反映模型的优劣。
回归指标
1.MSE
MSE(均方误差) 是最常用的回归评估指标,它衡量了模型预测值与实际值之间的平方差的平均值。
计算公式为:
优缺点:
- 优点:对大误差有更大的惩罚,适合对误差敏感的场景。
- 缺点:对离群值非常敏感,可能导致模型对极端值过度拟合。
2.RMSE
均方根误差 (RMSE) 是 MSE 的平方根。它将误差量级与原始数据保持一致,便于解释。RMSE 越小,模型的预测性能越好。
计算公式为:
其中 是实际值, 是预测值。RMSE 的单位与原数据相同,因此容易理解。
3.R 平方
值表示模型解释数据方差的比例,范围是 0 到 1,越接近 1 表示模型对数据的拟合程度越好。
计算公式为:
其中 是实际值的平均值。
4.调整后的 R 平方
调整后的 值考虑了模型中使用的特征数,能够更好地评估复杂模型的表现。
它通过对特征数量进行惩罚,避免过拟合。
计算公式为:
其中 n 是样本数量,k 是特征数。
调整后的 会随着无意义变量的增加而下降。
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
X = np.random.rand(100, 1)
y = 3 * X.squeeze() + np.random.randn(100) * 0.5
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# 计算 MSE
mse = mean_squared_error(y_test, y_pred)
print(f"MSE: {mse}")
# 计算 RMSE
rmse = np.sqrt(mse)
print(f"RMSE: {rmse}")
# 计算 R² 值
r2 = r2_score(y_test, y_pred)
print(f"R²: {r2}")
# 计算调整后的 R² 值
n = len(y_test)
p = X_test.shape[1]
adjusted_r2 = 1 - (1 - r2) * (n - 1) / (n - p - 1)
print(f"Adjusted R²: {adjusted_r2}")
分类指标
1.混淆矩阵
混淆矩阵是用于分类问题的指标,展示了模型分类结果的详细情况。
它通常以 2x2 矩阵形式表示,包含以下部分:
- TP (True Positives),正类被正确预测为正类的数量。
- TN (True Negatives),负类被正确预测为负类的数量。
- FP (False Positives),负类被错误预测为正类的数量(误报)。
- FN (False Negatives),正类被错误预测为负类的数量(漏报)。
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
iris = datasets.load_iris()
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target,
random_state = 1)
clf = LogisticRegression(solver = 'liblinear')
# fit the training data
clf.fit(x_train, y_train)
# Do prediction on training data
y_train_pred = clf.predict(x_train)
# Do prediction on testing data
y_test_pred = clf.predict(x_test)
# find the confusion matrix for train data
confusion_matrix(y_train, y_train_pred)
# find the confusion matrix for test data
confusion_matrix(y_test, y_test_pred)
# get the full classification report for training data
print(classification_report(y_train, y_train_pred))
# get the full classification report for testing data
print(classification_report(y_test, y_test_pred))
2.准确性
准确性衡量模型预测正确的样本占总样本的比例。
适用于样本均衡的分类问题。
计算公式为:
然而,在数据不平衡时,准确性可能不是一个好的评估指标。
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
print("Score :", accuracy_score(y_true, y_pred))
3.精确度
精确度也称为查准率,用于衡量模型预测的正类中有多少是真正的正类。
计算公式为:
精确度在我们关心误报(false positive)时尤为重要。
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
from sklearn.metrics import precision_score
precision_score(y_true, y_pred)
4.召回率
召回率也称为查全率或灵敏度,用于衡量实际正类中有多少被正确预测为正类。
计算公式为:
召回率在关心漏报(false negative)时非常重要。
5.F1 分数
F1 分数是精确度和召回率的调和平均数,综合考虑了模型的查准率和查全率。
计算公式为:
F1 分数适合处理不平衡数据集的分类任务。
6.ROC 曲线和 AUC
ROC 曲线是一种常用于评估分类模型性能的图形工具,特别适合不平衡数据集。
它展示了不同阈值下分类模型的性能表现。
ROC 曲线的两个关键要素是:
- 真正率 (True Positive Rate, TPR)
在所有正类样本中,被模型正确分类为正类的比例。
计算公式为:
其中 TP 是真正例数,FN 是假负例数。
- 假正率 (False Positive Rate, FPR)
在所有负类样本中,被模型错误分类为正类的比例。
计算公式为:
其中 FP 是假正例数,TN 是真负例数。
ROC 曲线的横轴是假正率 (FPR),纵轴是真正率 (TPR)。随着分类阈值的调整,FPR 和 TPR 都会变化。通过绘制不同阈值下的 FPR 和 TPR 的点,并将这些点连成曲线,就得到了 ROC 曲线。
AUC 是 ROC 曲线下的面积,取值范围在 0 到 1 之间。它用一个数值量化了模型的整体表现。
AUC 表示了模型在不同阈值下的平均性能,是模型区分正负样本能力的衡量指标。
AUC 值解释
- AUC = 1,模型完美地分类了所有正负样本,表现极佳。
- AUC = 0.5,模型的分类能力与随机猜测相当,没有预测能力。
- AUC < 0.5,模型的表现比随机猜测还要差,意味着模型可能将类别完全反向分类。