模型评估与可视化

端到端机器学习

Joshua Stapleton

Machine Learning Engineer

准确率

  • 正确的准确率指标对稳健评估至关重要
  • 结果易被误解或掩盖

标准准确率:

  • 标准准确率 = 正确数 / 总数
  • 在不平衡数据上常不够用

示例:

# 对 99 阳性、1 阴性的失衡数据可达 ~99% 准确率
for patient_datapoint in heart_disease_dataset:
    model.prediction(patient_datapoint) = 'positive'
端到端机器学习

混淆矩阵

真正例(TP)

  • 预测 = 实际 = 阳性
  • 模型预测有心脏病,患者确有心脏病

假正例(FP)

  • 预测 = 阳性,实际 = 阴性
  • 模型预测有心脏病,患者无心脏病

假负例(FN)

  • 预测 = 阴性,实际 = 阳性
  • 模型预测无心脏病,患者有心脏病

真负例(TN)

  • 预测 = 实际 = 阴性
  • 模型预测无心脏病,患者无心脏病
端到端机器学习

平衡准确率

  • 对多数二分类优于普通准确率
  • 按两类加权求平均
  • 平衡准确率 = (TP + TN) / 2
from sklearn.metrics import balanced_accuracy_score

# y_test 为真实标签,y_pred 为预测标签
y_pred = model.predict(X_test)
bal_accuracy = balanced_accuracy_score(y_test, y_pred)
print(f"Balanced Accuracy: {bal_accuracy:.2f}")
Balanced Accuracy: 0.85
端到端机器学习

混淆矩阵的用法

混淆矩阵

端到端机器学习

交叉验证

交叉验证

  • 一种重采样流程
  • 提高结果稳健性

 

k 折交叉验证

  • 参数 k = 数据集拆分数
  • 每次建模重采样新的训练/测试集

交叉验证示意图

端到端机器学习

交叉验证用法

  • 使用 sklearn 简洁实现 k 折交叉验证
  • 与模型无关的评分

用法:

from sklearn.model_selection import cross_val_score, KFold

# 将数据分成 5 份
kfold = KFold(n_splits=5, shuffle=True, random_state=42)

# 获取给定模型的交叉验证准确率 cv_results = cross_val_score(model, heart_disease_X, heart_disease_y, cv=kfold, scoring='balanced_accuracy')
端到端机器学习

超参数调优

超参数:

  • 全局模型参数(训练中不更新)
  • 通过调节提升模型表现
# 要测试的超参数
C_values = [0.001, 0.01, 0.1, 1, 10, 100, 1000]

# 手动遍历超参数
for C in C_values:
    model = LogisticRegression(max_iter=200, C=C)
    model.fit(X_train, y_train)
    accuracy = cross_val_score(model, X, y, cv=kfold, scoring='balanced_accuracy')
    print(f"C = {C}: Bal Acc: {accuracy.mean():.4f} (+/- {accuracy.std():.4f})")
端到端机器学习

超参数调优示例

超参数调优示例输出:

 

C = 0.001: Bal Acc: 0.6200 (+/- 0.0215)
C = 0.01: Bal Acc: 0.7325 (+/- 0.0234)
C = 0.1: Bal Acc: 0.7923 (+/- 0.0202)
C = 1: Bal Acc: 0.8050 (+/- 0.0191)
C = 10: Bal Acc: 0.8034 (+/- 0.0185)
C = 100: Bal Acc: 0.8021 (+/- 0.0187)
C = 1000: Bal Acc: 0.8017 (+/- 0.0188)
端到端机器学习

¡Vamos a practicar!

端到端机器学习

Preparing Video For Download...