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

人工智能 机器学习
评估指标是用来衡量机器学习模型性能的量化标准,它们帮助我们理解模型在特定任务中的表现。

今天给大家分享机器学习中常用的评估指标。

评估指标是用来衡量机器学习模型性能的量化标准,它们帮助我们理解模型在特定任务中的表现。

不同的机器学习任务(如分类、回归)需要不同的评估指标。通过这些指标,我们可以判断模型的优劣,优化模型的性能,并在不同模型之间进行比较。

分类任务中的评估指标

1.混淆矩阵

混淆矩阵(Confusion Matrix)是用于评估分类模型性能的工具,特别是在二分类和多分类任务中广泛使用。

它能够显示模型的分类结果与实际情况的详细对比,帮助我们更清晰地理解模型的错误类型和分类的准确性。

混淆矩阵是一个 n×n 的矩阵,n 是类别的数量。对于二分类问题,混淆矩阵是一个  的矩阵,表示模型在不同分类结果上的表现。

  • 真阳类(True Positive, TP):模型正确预测为正类的数量。
  • 真阴类(True Negative, TN):模型正确预测为负类的数量。
  • 假阳性 (False Positive, FP):模型错误预测为正类的负类样本数量(也称为Type I错误)。
  • 假阴性(False Negative, FN):模型错误预测为负类的正类样本数量(也称为Type II错误)。
from sklearn.datasets import fetch_openml
from sklearn.model_selection import cross_val_predict
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import confusion_matrix

mnist = fetch_openml('mnist_784', as_frame=False, parser = "auto")
X, y = mnist.data, mnist.target
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]
y_train_5 = (y_train == '5') # True for 5s, False for all other digits
y_test_5 = (y_test == '5')

sgd_clf = SGDClassifier(random_state=42, verbose=True)
y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)

cm = confusion_matrix(y_train_5, y_train_pred)
print(cm)
#[[53892   687]
# [ 1891  3530]]

2.准确率(Accuracy)

准确率是正确分类的样本数占总样本数的比例。

其公式为

适用场景:适用于类别分布平衡的情况。但对于类别不平衡的问题,准确率可能不够准确。

3.精确率(Precision)

精确率表示模型预测为正例的样本中,实际为正例的比例。

其公式为:

适用场景:当关注假正例(FP)影响时,精确率是一个重要的评估指标,如在垃圾邮件过滤中。

from sklearn.metrics import precision_score, recall_score
precision_score(y_train_5, y_train_pred)

4.召回率(Recall)

召回率表示所有实际为正例的样本中,模型正确识别出来的比例。

其公式为

适用场景:当需要尽可能找到所有的正例时(如疾病检测),召回率是关键指标。

recall_score(y_train_5, y_train_pred)

5.F1 值(F1-Score)

F1 值是精确率和召回率的调和平均数,用于权衡精确率和召回率之间的关系。

其公式为:

适用场景:当精确率和召回率同等重要时,F1 值是很好的评估标准。

from sklearn.metrics import f1_score
f1_score(y_train_5, y_train_pred)

6.ROC 曲线和 AUC 值

ROC 曲线展示了分类器的假阳性率(FPR)与真阳性率(TPR)之间的关系。

AUC 值表示 ROC 曲线下面积,AUC 值越大,模型性能越好。AUC 值在0.5到1之间,接近1表示模型性能优异。

适用场景:适用于类别不平衡的分类任务。

from sklearn.metrics import roc_auc_score
roc_auc_score(y_train_5, y_scores)

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, roc_auc_score

# 生成样本数据
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
model = LogisticRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
y_prob = model.predict_proba(X_test)[:, 1]

# 计算评估指标
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
roc_auc = roc_auc_score(y_test, y_prob)
conf_matrix = confusion_matrix(y_test, y_pred)

print(f"Accuracy: {accuracy}")
print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1 Score: {f1}")
print(f"ROC AUC Score: {roc_auc}")
print(f"Confusion Matrix:\n{conf_matrix}")

回归问题中的评估指标

1.均方误差(MSE)

MSE 是模型预测值与真实值差的平方的平均值。它强调大的误差。

公式:

适用场景:适用于回归任务中,尤其是对大的预测误差更加敏感的场景。

2.均方根误差(RMSE)

RMSE 是 MSE 的平方根,用于将误差带回与原始目标变量相同的量纲。

公式:

适用场景:与 MSE 类似,但 RMSE 更直观,误差与目标变量的尺度一致。

3.平均绝对误差(MAE)

MAE 是预测值与真实值的绝对差的平均值,较少受大误差的影响。

公式:

适用场景:当对所有误差的权重一致,且不希望夸大大误差影响时,MAE 是较好的指标。

4.R 方值(R²)

R² 衡量模型解释了多少比例的目标变量方差,其值介于0到1之间。

公式:

其中, 是目标变量的平均值。

适用场景:用于评估回归模型的解释能力。

5.调整 R 方值(Adjusted R²)

在考虑特征数量时,调整后的 R² 对多特征模型的评价更加准确。

公式:

其中, 是模型中的特征数量。

适用场景:在特征数较多时,调整 R² 比普通 R² 更合理。

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

# 生成样本数据
X, y = make_regression(n_samples=1000, n_features=20, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

# 计算评估指标
mse = mean_squared_error(y_test, y_pred)
rmse = mean_squared_error(y_test, y_pred, squared=False)  # RMSE is the square root of MSE
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"MSE: {mse}")
print(f"RMSE: {rmse}")
print(f"MAE: {mae}")
print(f"R²: {r2}")


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

2024-10-14 14:02:17

机器学习评估指标人工智能

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-08-01 08:41:08

2024-10-16 07:58:48

2024-07-17 09:32:19

2024-09-23 09:12:20

2024-10-31 10:00:39

注意力机制核心组件

2024-09-12 08:28:32

2024-10-17 13:05:35

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

2024-11-07 08:26:31

神经网络激活函数信号

2024-07-24 08:04:24

神经网络激活函数

2024-10-05 23:00:35

2024-11-14 00:16:46

Seq2Seq算法RNN

2024-09-26 07:39:46

点赞
收藏

51CTO技术栈公众号