终于把机器学习中的评估指标搞懂了

人工智能 机器学习
今天给大家分享在机器学习中最广泛使用的十大评估指标。评估指标是用于衡量机器学习模型的性能,帮助我们判断模型在解决特定任务上的效果。

今天给大家分享在机器学习中最广泛使用的十大评估指标。评估指标是用于衡量机器学习模型的性能,帮助我们判断模型在解决特定任务上的效果。

不同的评估指标适用于不同类型的任务(分类、回归),选择合适的指标能够有效反映模型的优劣。

回归指标

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,模型的表现比随机猜测还要差,意味着模型可能将类别完全反向分类。


责任编辑:华轩 来源: 程序员学长
相关推荐

2024-09-18 16:42:58

机器学习评估指标模型

2024-08-23 09:06:35

机器学习混淆矩阵预测

2024-11-05 12:56:06

机器学习函数MSE

2024-10-08 10:16:22

2024-10-08 15:09:17

2024-10-28 00:00:10

机器学习模型程度

2024-10-30 08:23:07

2024-10-28 15:52:38

机器学习特征工程数据集

2024-11-25 08:20:35

2024-08-01 08:41:08

2024-10-16 07:58:48

2024-12-03 08:16:57

2024-09-23 09:12:20

2024-07-17 09:32:19

2024-11-21 10:07:40

2024-10-31 10:00:39

注意力机制核心组件

2024-12-02 01:10:04

神经网络自然语言DNN

2024-12-02 13:28:44

2024-10-17 13:05:35

神经网络算法机器学习深度学习

2024-09-12 08:28:32

点赞
收藏

51CTO技术栈公众号