1.模型评估和选择
1.1 损失函数
**对数似然损失(log-likehood loss):**也称逻辑斯谛回归似然损失(logistic loss),或交叉熵损失(cross-entropy)。最小化对数似然损失等价于最大化分类器准确度,因此常用于logistic regression和神经网络。
对数似然损失函数公式(二分类问题简化):
L
(
Y
,
P
(
Y
∣
X
)
)
=
−
1
N
∑
i
=
1
N
[
y
i
l
o
g
(
p
i
)
+
(
1
−
y
i
)
l
o
g
∗
(
1
−
p
i
)
]
L(Y,P(Y|X)) = - \frac {1}{N} \sum_{i=1}^N[ y_ilog(p_i)+(1-y_i)log*(1-p_i) ]
L(Y,P(Y∣X))=−N1i=1∑N[yilog(pi)+(1−yi)log∗(1−pi)]
y
i
y_i
yi为真实类别,
p
i
p_i
pi为预测为1的概率,
y
i
y_i
yi取值为0时对数损失为
y
i
l
o
g
(
p
i
)
y_ilog(p_i)
yilog(pi),
y
i
y_i
yi取值为1时对数损失为
(
1
−
y
i
)
l
o
g
∗
(
1
−
p
i
)
(1-y_i)log*(1-p_i)
(1−yi)log∗(1−pi)。模型的对数损失为所有样本对数损失的平均值,对于完美的分类器,对数损失为0,所有正例概率预测为1,所有负例概率预测为0。
logloss计算: 假如有100万个,其中10万个为阳性,那么总体上阳性样本的概率可近似认为是0.1。通常来说,测试集的分布是非常接近于训练集的,那么测试集中大概有10%的样本为阳性。如果预测测试集中每个样本为1的概率都为0.1,那么logloss会是多少。-[90log(0.1)+10log(0.9)]/100 = 2.08;最差的情况是乱猜,样本正好是一半阳性一半阴性,此时logloss是-[90log(0.5)+10log(0.5)]/100 = -log(0.5)= 0.693。
logloss函数对误差大的结果惩罚很大,如果正样本的概率预测值是0.001,那logloss非常大:
1.2 偏差、方差和模型泛化能力
模型泛化能力 = 方差+偏差+噪声
偏差:度量模型的期望预测与真实值的偏离程度
方差:数据发生扰动时,模型预测结果的变化程度
噪声:问题本身学习的难度,模型泛化的下界
学习算法刚训练时,训练不足欠拟合,此时偏差较大;当训练程度加深之后,训练数据的扰动也被算法学习到了,此时算法过拟合,方差过大,训练数据轻微扰动都会使得学习模型发生显著变化,因此我们得出结论:模型欠拟合时偏差过大,模型过拟合时方差过大。
![在这里插入图片描述](https://img-blog.csdnimg.cn/939a08f99e024de9b499df32c96586f7.png
x:测试样本集;D:训练数据集;yD:测试数据集x的标记
y:测试数据集x的真实标记;f:由训练集D学习到的模型
f(x,D):模型f对x的预测输出;f(x):模型f对x预测输出的均值,即期望预测输出
推导过程:第一项是方差,第二项是偏差,第三项是噪声
1.3 模型评估方法
1.3.1 K折交叉验证
最终返回的是k次测试结果的均值
1.3.2 模型性能度量
准确率(查准率): 预测为正样本中真正例占比
T
P
T
P
+
F
P
\frac {TP}{TP+FP}
TP+FPTP
召回率(查全率): 实际为正样本中真正例占比 =
T
P
T
P
+
F
N
\frac {TP}{TP+FN}
TP+FNTP
F1-Socre:
1
F
1
=
1
2
∗
(
1
P
+
1
R
)
\frac {1}{F1} = \frac {1}{2} * (\frac {1}{P}+ \frac {1}{R})
F11=21∗(P1+R1)
ROC曲线: 横轴假正例率FPR,纵轴真正例率TPR(即召回率)
F
P
R
=
F
P
N
=
F
P
F
P
+
T
N
;
T
P
R
=
T
P
P
=
T
P
T
P
+
F
N
FPR = \frac {FP}{N}= \frac {FP}{FP+TN} ;TPR = \frac {TP}{P}= \frac {TP}{TP+FN}
FPR=NFP=FP+TNFP;TPR=PTP=TP+FNTP
当一个样本被分类器判为正例,若其本身是正例,则TPR增加;若其本身是负例,则FPR增加,因此ROC曲线可以看作是随着阈值的不断移动,所有样本中正例与负例之间的“对抗”。曲线越靠近左上角,意味着越多的正例优先于负例,模型的整体表现也就越好。
**P-R曲线:**横轴召回率,纵轴准确率,只关心正例。当负例增加10倍,PR曲线会有明显改变(右边两张图),召回率不变(TP不受影响),准确率大幅下降,因为FP变多。
ROC曲线 VS PR曲线:
- ROC曲线由于兼顾正例与负例,所以适用于评估分类器的整体性能,相比而言PR曲线完全聚焦于正例
- 如果有多份数据且存在不同的类别分布,比如信用卡欺诈问题中每个月正例和负例的比例可能都不相同,这时候如果只想单纯地比较分类器的性能且剔除类别分布改变的影响,则ROC曲线比较适合
- 类别不平衡问题中,ROC曲线通常会给出一个乐观的效果估计,所以大部分时候还是PR曲线更好。当负例N的数量远超正例P时,FP的大幅增长只能换来FPR的微小改变。结果是虽然大量负例被错判成正例,在ROC曲线上却无法直观地看出来。假设一个数据集有正例20,负例10000,开始时有20个负例被错判,FPR=0.002,接着又有20个负例错判, FPR=0.004 ,在ROC曲线上这个变化是很细微的。而与此同时Precision则从原来的0.5下降到了0.33。
1.4 生成模型与判别模型
生成模型: 学习联合概率分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y),然后求出条件概率分布
P
(
Y
|
X
)
P(Y|X)
P(Y|X),如朴素贝叶斯,隐马尔可夫模型
判别模型: 直接学习条件概率分布
P
(
Y
|
X
)
P(Y|X)
P(Y|X),学习收敛速度更快,且直接预测,学习准确率更高。但当存在隐变量时,不能用判别模型。