模型评估、调试与优化指南
立即解锁
发布时间: 2025-09-03 01:31:34 阅读量: 5 订阅数: 5 AIGC 

# 模型评估、调试与优化指南
## 1. 误差降维分析
在数据探索里,向量和降维技术十分有用,同样它们也能让误差分析更高效。
### 1.1 利用降维技术识别误差
- **可视化误差**:最初用降维方法可视化数据时,会按类别给数据点上色来观察标签拓扑。分析模型误差时,可通过不同颜色方案识别误差。为确定误差趋势,可根据模型预测是否正确给数据点上色,这样能找出模型表现差的数据点类型。确定模型表现差的区域后,可视化其中一些数据点,这有助于生成特征,让模型更好地拟合。
- **聚类辅助分析**:还能使用聚类方法辅助分析。对数据聚类后,评估每个聚类上的模型性能,找出模型表现最差的聚类,检查这些聚类中的数据点以生成更多特征。
### 1.2 直接利用模型置信度分数
降维技术能找出有挑战性的示例,也可直接使用模型的置信度分数。
## 2. Top - k 方法
### 2.1 方法概述
找到密集误差区域有助于识别模型的失败模式。除了用降维方法,还能直接利用模型本身。通过预测概率,可找出最具挑战性或模型最不确定的数据点,即 Top - k 方法。
操作步骤如下:
1. 选择一个合适数量的示例用于可视化,记为 k。个人项目可从 10 - 15 个示例开始。
2. 针对之前找到的每个类别或聚类,可视化以下内容:
- k 个表现最好的示例
- k 个表现最差的示例
- k 个最不确定的示例
### 2.2 各类示例分析
- **k 个表现最好的示例**:展示模型正确预测且最有信心的 k 个示例。可视化时,找出特征值的共性,以确定模型成功利用的特征。之后可视化失败示例,找出模型未能捕捉的特征。
- **k 个表现最差的示例**:展示模型错误预测且最有信心的 k 个示例。先从训练数据开始,再到验证数据。可视化训练集中模型表现最差的 k 个示例,有助于识别模型失败的数据点趋势,从而找出让模型更容易处理的额外特征。例如,在 ML Editor 中,发现一些问题因无实际问题而得分低,添加统计文本中问号数量的特征后,模型能准确预测这类“非问题”问题。可视化验证数据中表现最差的示例,可识别与训练数据差异大的示例,若验证集中有太难的示例,可更新数据拆分策略。
- **k 个最不确定的示例**:可视化模型预测最不确定的 k 个示例。对于分类模型,不确定示例是指模型对每个类别输出概率接近相等的示例。训练集中的不确定示例常源于冲突标签,若训练集中有重复或相似示例但标签不同,模型会输出相等概率以最小化损失。绘制验证集中最不确定的 k 个示例,有助于发现训练数据的差距,确定训练集中应包含的数据类型。
### 2.3 Top - k 实现
以下是使用 pandas DataFrames 的简单 Top - k 实现代码:
```python
def get_top_k(df, proba_col, true_label_col, k=5, decision_threshold=0.5):
"""
For binary classification problems
Returns k most correct and incorrect example for each class
Also returns k most unsure examples
:param df: DataFrame containing predictions, and true labels
:param proba_col: column name of predicted probabilities
:param true_label_col: column name of true labels
:param k: number of examples to show for each category
:param decision_threshold: classifier decision boundary to classify as
positive
:return: correct_pos, correct_neg, incorrect_pos, incorrect_neg, unsure
"""
# Get correct and incorrect predictions
correct = df[
(df[proba_col] > decision_threshold) == df[true_label_col]
].copy()
incorrect = df[
(df[proba_col] > decision_threshold) != df[true_label_col]
].copy()
top_correct_positive = correct[correct[true_label_col]].nlargest(
k, proba_col
)
top_correct_negative = correct[~correct[true_label_col]].nsmallest(
k, proba_col
)
top_incorrect_positive = incorrect[incorrect[true_label_col]].nsm
```
0
0
复制全文
相关推荐










