本人希望从0开始,自己的Kaggle竞赛
- 12月拿到自己的第一块Kaggle奖牌
- 短期内读完Abhishek Thakur的Approaching (Almost) Any Machine Learning Problem并且发博客记录https://github.com/abhishekkrthakur/approachingalmost
- 12月至少发21篇博客
- 每天保持八小时的学习时间
Evaluation metrics
分类问题
单标签问题
TP:真阳性,预测正确
FP: 假阳性,输出:阳性| 实际:阴性
TN:真阴性,输出:阴性| 实际:阴性
FN:假阴性,输出:阴性| 实际:阳性
Accuracy:传统的准确率,Acc高的模型效果一定好。
Precision:精确率,模型越谨慎精确率越高。即模型认为正确的大概率就是正确。
Recall:召回率,模型越宽松召回率越搞。即模型将大部分正确的都召回。
F1:是P和R的调和平均值。
OCR和AUC:当我们对模型设置不同的找回阈值的时候,我们的TPR和FPR的值会不同,我们有如下曲线。
对于这条曲线,我们希望TPR(召回率)越高的情况下,FPR越小,即图像越靠近左上角。
多分类F1:每个类单独计算F1最后加在一起
def weighted_f1(y_true, y_pred):
# 种类数
num_classes = len(np.unique(y_true))
# 统计各种类样本数
class_counts = Counter(y_true)
# 初始化F1值
f1 = 0
# 遍历0~(种类数-1)
for class_ in range(num_classes):
# 若真实标签为class_为1,否则为0
temp_true = [1 if p = class_ else 0 for p in y_true]
# 若预测标签为class_为1,否则为0
temp_pred = [1 if p = class_ else 0 for p in y_pred]
# 计算精确率
p = precision(temp_true, temp_pred)
# 计算召回率
r = recall(temp_true, temp_pred)
# 若精确率+召回率不为0,则使用公式计算F1值
if p + r = 0:
temp_f1 = 2 * p * r / (p + r)
# 否则直接为0
else:
temp_f1 = 0
# 根据样本数分配权重
weighted_f1 = class_counts[class_] * temp_f1
# 加权F1值相加
f1 += weighted_f1
# 计算加权平均F1值
overall_f1 = f1 / len(y_true)
return overall_f1
多标签问题
对于多标签问题,每个结果的标签个数不确定,因此我们可以采用对于前k个标签进行准确率计算的方法。
对于单一数据评估:
k 精确率(P@k):指的是对于两个集合交集元素个数/len(pred)
k 平均精确率(AP@k):P@1 P@2 P@3 …… P@k 的平均值
对于整体数据的评估:
k 均值平均精确率(MAP@k):一整个数据集的AP@k 的平均值
本章节中,作者使用t-SEN对MNIST数据集进行可视化
回归问题:
R ⽅接近 1.0表⽰模型与数据的拟合程度相当好,⽽接近 0则表⽰模型不是那么好。当模型只是做出荒谬的预测时,R ⽅也可能是负值。