遥感&机器学习入门实战教程|Sklearn案例⑧:评估指标(metrics)全解析

很多同学问:“模型好不好,怎么量化?”
本篇系统梳理 sklearn.metrics 中常用且“够用”的多分类指标,并给出一段可直接运行的示例代码,覆盖:准确率、宏/微/加权 F1、Kappa、MCC、混淆矩阵(计数/归一化)、Top-K 准确率、ROC-AUC(OvR/OvO)、PR-AUC、对数损失、(多类)Brier 分数、以及 ROC/PR 曲线绘制。

🧭 指标速览与使用场景

  • 整体验证

    • accuracy_score(OA,总体准确率)
    • balanced_accuracy_score(类别不均衡时更合理)
  • 逐类与加权

    • precision_recall_fscore_support / classification_report
    • 平均方式:average="macro" | "micro" | "weighted"
  • 一致性/稳健性

    • cohen_kappa_score(Kappa)
    • matthews_corrcoef(MCC,抗不均衡)
  • 混淆矩阵

    • confusion_matrix(计数 & 归一化)
  • 概率质量/排序质量

    • roc_auc_score(多类:multi_class="ovr"|"ovo"average="macro"|"weighted"
    • average_precision_score(PR-AUC)
    • top_k_accuracy_score(Top-K)
    • log_loss(对数损失,校准敏感)
    • 多类 Brier(自定义:one-hot 与 predict_proba 的 MSE 均值)
  • 曲线

    • ROC 曲线(micro/macro)
    • Precision-Recall 曲线(micro)

经验:类不均衡→看 balanced_accuracy / macro-F1 / Kappa / MCC
要概率好坏→看 log_loss / ROC-AUC / PR-AUC
Top-K 检索/多候选→看 top_k_accuracy_score

💻 一键可跑代码(修改 DATA_DIR 后直接运行)

# -*- coding: utf-8 -*-
"""
Sklearn案例⑧:metrics 全解析(多分类 / 概率与曲线)
数据:KSC(将 DATA_DIR 改为你的数据路径)
"""

import os, numpy as np, scipy.io as sio, matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import (accuracy_score, balanced_accuracy_score,
    precision_recall_fscore_support, classification_report, confusion_matrix,
    cohen_kappa_score, matthews_corrcoef, top_k_accuracy_score, roc_auc_score,
    average_precision_score, log_loss)
from sklearn.preprocessing import label_binarize

# ============ 参数 ============
DATA_DIR = "your_path"     # ←← 修改为包含 KSC.mat / KSC_gt.mat 的目录
PCA_DIM, TRAIN_RATIO, SEED = 30, 0.3, 42

# ============ 1. 载入与预处理 ============
X = sio.loadmat(os.path.join(DATA_DIR, "KSC.mat"))["KSC"].astype(np.float32)  # (H,W,B)
Y = sio.loadmat(os.path.join(DATA_DIR, "KSC_gt.mat"))["KSC_gt"].astype(int)   # (H,W)
coords = np.argwhere(Y != 0)
Xpix   = X[coords[:,0], coords[:,1]]       # (N,B)
y      = Y[coords[:,0], coords[:,1]] - 1   # 0..C-1
num_classes = int(y.max
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遥感AI实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值