预测雷暴旋转的基础机器学习:分类 - 评估
本文翻译自 AMS 机器学习 Python 教程,并有部分修改。
Lagerquist, R., and D.J. Gagne II, 2019: “Basic machine learning for predicting thunderstorm rotation: Python tutorial”. https://github.com/djgagne/ams-ml-python-course/blob/master/module_2/ML_Short_Course_Module_2_Basic.ipynb.
本文接上一篇文章。
本文在前面三篇介绍评估图形的文章基础上评估示例分类问题。
评估
评估训练集
training_probabilities = plain_log_model.predict_proba(
training_predictor_table.values
)[:, 1]
training_event_frequency = np.mean(
training_target_table[BINARIZED_TARGET_NAME].values
)
eval_binary_classifn(
observed_labels=training_target_table[BINARIZED_TARGET_NAME].values,
forecast_probabilities=training_probabilities,
training_event_frequency=training_event_frequency,
dataset_name='training'
)
Training Max Peirce score (POD - POFD) = 0.639
Training AUC (area under ROC curve) = 0.897
Training Max CSI (critical success index) = 0.375
Training Brier score = 0.064
Training Brier skill score (improvement over climatology) = 0.293
评估验证集
validation_probabilities = plain_log_model.predict_proba(
validation_predictor_table.values
)[:, 1]
eval_binary_classifn(
observed_labels=validation_target_table[BINARIZED_TARGET_NAME].values,
forecast_probabilities=validation_probabilities,
training_event_frequency=training_event_frequency,
dataset_name='validation'
)
Validation Max Peirce score (POD - POFD) = 0.649
Validation AUC (area under ROC curve) = 0.902
Validation Max CSI (critical success index) = 0.383
Validation Brier score = 0.063
Validation Brier skill score (improvement over climatology) = 0.307
列联表
大多数用于二元分类的评估方法都是基于列联表 (contingency table)(或混淆矩阵 (confusion matrix)),如下所示。
- a = 真正例的数目 (forecast = label = “yes”)
- b = 假正例的数目 (forecast = “yes” but label = “no”)
- c = 假反例的数目 (forecast = “no” but label = “yes”)
- d = 真反例的数目 (forecast = label = “no”)
问题:大多数分类模型(包括逻辑回归)都输出概率,而不是 yes 和 no。
解决方法:确定(determinize)概率
“确定”只是说“将概率变成是和不是”的一种奇特的方式。
可以通过以下等式完成,其中 p = 概率;p* = 阈值;\hat{y} 是得到的确定性预测。
最佳的阈值通常不是 0.5
记住 p* 是一个超参数,所以应该使用验证集优化。
下面的评分可以由列联表计算得到:
ROC 曲线
ROC Curve
ROC 曲线绘制了随阈值 p* 变化的 POD(probability of detection)与 POFD(probability of false detection)的关系图。
曲线上的每个点代表一个 p* 值。
- 对于 p* = 0,POD = POFD = 1
- 对于 p* = 1,POD = POFD = 0
可以使用两个数字来总结 ROC 曲线的优度:
- 所有阈值的最大 Peirce 评分 (Peirce score, POD - POFD)
- 曲线下面积 (Area under the curve, AUC)
通常 AUC >= 0.9 被认为是“优秀” (excellent)
AUC = 0.5 (灰色虚线)表示随机模型
性能图
Performance Diagram
性能图绘制了 POD (probability of detection) 与 success ratio (1 - FAR) 的关系图。
同样,每个点代表一个 p* 值
- 对于 p* = 0,POD = 1 并且 success ratio 最小
- 对于 p* - 1,POD = 0 并且 success ratio 最大
CSI (critical success index) 和 frequency bias 在背景中绘制轮廓。 它们可以在 POD–success-ratio 空间中表示如下。
\begin{equation*} \textrm{bias} = \frac{\textrm{POD}}{\textrm{SR}} \end{equation*}
\begin{equation*} \textrm{CSI}^{-1} = \textrm{POD}^{-1} + \textrm{SR}^{-1} - 1 \end{equation*}
可以使用一些指标来总结性能图的优度:
- 最大 CSI
- 最大 CSI 的 frequency bias (应该接近 1.0)
- AUC
但是,与 ROC 曲线不同,这些指标对类别分布非常敏感。 因此,“好”和“坏”的阈值取决于类别分布。 对于某些罕见事件,最大 CSI 为 0.10 可能非常好;对于常见事件,最大 CSI 为 0.8 可能很差。
属性图
Attributes diagram
属性图是用于二进制分类的可靠性曲线,在背景中还有一些参考线。
绘制预测概率 (forecast probability) 与条件平均频率 (conditional mean frequency) 的关系图。
这回答了一个问题:“给定预测概率 p,事件发生的可能性有多大?”
对于完美的可靠性,条件事件频率始终等于预测概率。
这由对角灰线 (x=y) 表示,称为“完美可靠性线 (perfect-reliability line)”。
垂直的灰色线是“气候线 (climatology line)”,代表训练数据中的事件频率,简称为“气候 (climatology)”。 在我们的案例中,气候值为 10%。 如果该模型始终预测气候值,则可靠性曲线将崩溃到该线上的单个点。
水平的灰线是“no-resolution line”,也是基于训练集的气候值。 如果模型是完全随机的,则可靠性曲线将大致沿着这条线。
蓝色阴影是“positive-skill area”,其中 Brier 技能得分 > 0
Brier技能分数 (BSS) 是相对于气候值的 Brier 分数 (BS)。
\begin{equation*} \textrm{BS} = \frac{1}{N} \sum\limits_{i = 1}^{N} (p_i - y_i)^2 \end{equation*}
\begin{equation*} \textrm{BSS} = \frac{\textrm{BS}{\textrm{climo}} - \textrm{BS}}{\textrm{BS}{\textrm{climo}}} \end{equation*}
参考
https://github.com/djgagne/ams-ml-python-course
AMS 机器学习课程
数据预处理:
实际数据处理:
《AMS机器学习课程:预测雷暴旋转的基础机器学习 - 数据》
线性回归:
《AMS机器学习课程:预测雷暴旋转的基础机器学习 - 线性回归》
《AMS机器学习课程:预测雷暴旋转的基础机器学习 - 正则化》
《AMS机器学习课程:预测雷暴旋转的基础机器学习 - 超参数试验》
逻辑回归: