5 损失函数
在机器学习中,可以通过修改模型中的“class_weight”参数,从而调节不均衡样本的惩罚权重。
5.1 LogisticRegression(逻辑回归模型)
代码:
lr_l2 = LogisticRegression(penalty="l1", #正则化,防止过拟合,包括l1和l2
C=0.5, #正则化强度,C值越大,惩罚越重,正则化的效力越强
solver="liblinear", #优化算法选择参数
multi_class="auto", #分类个数
class_weight='balanced' #类权重参数,控制类的惩罚权重
)
效果:
提升了一点,在测试集上的改进会更加显著。
5.2 SVC(支持向量回归模型)
代码:
svc2 = SVC(C=0.1, #边界点的惩罚系数,值越大,预测精度越高,但越容易过拟合
kernel='rbf', #核函数类型
class_weight='balanced', #类权重参数
random_state=2)
效果:
精度同样有所提高,但是容易过拟合,只能调低参数C。
5.3 focal loss
focal loss由何凯明提出,用于解决数据不平衡对深度学习模型造成的模型性能问题
5.3.1 交叉熵函数
L
o
s
s
=
L
(
y
,
p
^
)
=
−
y
l
o
g
(
p
^
)
−
(
1
−
y
)
l
o
g
(
1
−
p
^
)
Loss=L(y,\hat{p} )=-ylog(\hat{p})-(1-y)log(1-\hat{p})
Loss=L(y,p^)=−ylog(p^)−(1−y)log(1−p^)
其中
p
^
\hat p
p^为预测概率
在二分类下,
L
L
L如下形式:
L
c
e
(
y
,
p
^
)
=
{
−
l
o
g
(
p
^
)
y
=
1
−
l
o
g
(
1
−
p
^
)
y
=
0
L_{ce}(y,\hat p)=\left\{\begin{matrix} -log(\hat p) & y=1\\ -log(1-\hat p) & y=0 \end{matrix}\right.
Lce(y,p^)={−log(p^)−log(1−p^)y=1y=0
在交叉熵损失函数(CE)的基础上增加了类别的不同权重以及困难(高损失)样本的权重。
5.3.2 样本不均衡问题
L
=
1
N
∑
N
i
=
1
l
(
y
i
,
P
^
i
)
L=\frac{1}{N}\sum_{N}^{i=1}l(y_{i},\hat P_{i})
L=N1N∑i=1l(yi,P^i)
在二分类中,L表示如下:
L
=
1
N
(
∑
y
i
=
1
m
−
l
o
g
(
p
^
)
+
∑
y
i
=
0
n
−
l
o
g
(
1
−
p
^
)
)
L=\frac{1}{N}(\sum_{y_{i}=1}^{m}-log(\hat p)+\sum_{y_{i}=0}^{n}-log(1-\hat p))
L=N1(yi=1∑m−log(p^)+yi=0∑n−log(1−p^))
当样本分布失衡时,在损失函数L的分布也会发生倾斜,多数类样本就会在损失函数占据主导地位。由于损失函数的倾斜,模型训练过程中会倾向于样本多的类别,造成模型对少样本类别的性能较差。
5.3.3 平衡交叉熵问题
从样本分布角度对损失函数添加权重因子。
原理:基于样本非平衡造成的损失函数倾斜,一个直观的做法就是在损失函数中添加权重因子,提高少数类别在损失函数中的权重,平衡损失函数的分布。
在二分类下,
L
L
L变为如下形式:
L
=
1
N
(
∑
y
i
=
1
m
−
α
l
o
g
(
p
^
)
+
∑
y
i
=
0
n
−
(
1
−
α
)
l
o
g
(
1
−
p
^
)
)
L=\frac{1}{N}(\sum_{y_{i}=1}^{m}-\alpha log(\hat p)+\sum_{y_{i}=0}^{n}-(1-\alpha )log(1-\hat p))
L=N1(yi=1∑m−αlog(p^)+yi=0∑n−(1−α)log(1−p^))
其中
α
1
−
α
=
n
m
\frac{\alpha}{1-\alpha}=\frac{n}{m}
1−αα=mn ,即权重的大小根据正负样本的分布进行设置。
5.3.4 focal loss
从样本分类难易程度解决问题
原理:从loss的另一角度的解决方法,就是针对样本难易程度进行权重的分配,对难分类的样本赋予更大的权重,对于易分类的样本赋予较小的权重。
具体形式如下:
L
f
l
=
{
−
(
1
−
p
^
)
γ
l
o
g
(
p
^
)
y
=
1
−
p
^
γ
l
o
g
(
1
−
p
^
)
y
=
0
L_{fl}=\left\{\begin{matrix} -(1-\hat p)^{\gamma}log(\hat p) & y=1\\ -\hat p^{\gamma}log(1-\hat p) & y=0 \end{matrix}\right.
Lfl={−(1−p^)γlog(p^)−p^γlog(1−p^)y=1y=0
γ
\gamma
γ的意义为可调节因子,其中
γ
\gamma
γ均大于0,定义
p
t
p_{t}
pt如下:
p
t
=
{
p
^
y
=
1
1
−
p
^
y
=
0
p_{t}=\left\{\begin{matrix} \hat p & y=1\\ 1-\hat p & y=0 \end{matrix}\right.
pt={p^1−p^y=1y=0
因此focalloos表达式变形如下:
L
f
l
=
−
(
1
−
p
t
)
γ
l
o
g
(
p
t
)
L_{fl}=-(1-p_{t})^{\gamma}log(p_{t})
Lfl=−(1−pt)γlog(pt)
交叉熵表达式变形如下:
L
c
e
=
−
l
o
g
(
p
t
)
L_{ce}=-log(p_{t})
Lce=−log(pt)
相比较两个表达式,可以发现:fl表达式比交叉熵表达式多了一个可调节因子
(
1
−
p
t
)
γ
(1-p_{t})^{\gamma}
(1−pt)γ
- 对于分类正确的样本,该因子趋于0。
- 对于分类错误的样本,该因子趋于1。
因此,fl对于分类错误的样本,损失项相较于交叉熵没有变化,而对于分类正确的样本,损失相对于交叉熵缩小了,整体而言,fl相对于交叉熵整体缩小了,增加了分类不正确样本在损失函数中的权重。
p t p_{t} pt衡量了分类的难易程度, p t p_{t} pt越大,分类置信度越高,即越容易分类。fl相当于增加了难分样本在损失函数中的权重,使得损失函数倾向于难分的样本。
但并不是难分样本永远都是难分,易分样本也可能会逐渐变成难分样本,从而导致模型收敛较慢,因此应当适当降低学习率,以防止 p t p_{t} pt的巨大改变。
代码:
5.4 OHEM
目标检测领域中所提出的算法,用来对困难负样本进行挖掘,基准算法是Fast R-cnn。
基本原理与focal loss相似,都是针对难分的样本。
选择一些hard examples(多样性和高损失的样本)作为训练的样本,针对性地改善模型学习效果。
![[Pasted image 20230308201450.png]]
第一块ROI层会得到所有ROI的loss,根据hard ROI sampler结构根据损失排序选出hard example,并将这些hard example作为第二块ROI层的输入。
6 选择合适的模型
6.1 选择对样本不平衡不敏感的模型
树模型要比逻辑回归模型要在不平衡数据集上表现更优秀
6.2 采样+集成学习
原理:采用集成学习机制来处理随机欠采样的信息丢失问题
6.2.1 EasyEnsembleClassifier算法
基于无监督的方式进行欠采样。
为了克服随机欠采样方法导致的信息缺失问题,又要保证算法表现出较好的不均衡数据分类性能。基于均衡样本集的Adaboost分类器的集成算法,就是对多数类样本进行n次欠采样,得到n个模型。
6.2.2 balance cascade算法
基于有监督结合boosting的方式。
基于Adaboost,将Adaboost作为基分类器,其核心思路是在每一轮训练时都使用多数类与少数类数量上相等的训练集,然后使用该分类器对全体多数类进行预测,通过控制分类阈值(即概率超过多少判定为少数类)来控制FP(False Positive)率,将所有判断正确的类(数量为负样本总数×(1-FP))删除,然后进入下一轮迭代继续降低多数类数量。
7 异常检测
将分类问题转化为异常检测问题,通过数据挖掘方法发现与数据集分布不一致的异常数据。
网址:
https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=2247552622&idx=5&sn=8911513d9c1a1306da590bfd659b70f8&chksm=ebb736badcc0bfac43536a905ef999f29e5c618bb3bc41395a57b13b4306f8315055ccd08dc1&scene=27
8 评价指标
8.1 Aucurracy、precision、recall、F1
A
u
c
u
r
r
a
c
y
=
T
P
+
T
N
T
P
+
F
P
+
T
N
+
F
N
Aucurracy=\frac{TP+TN}{TP+FP+TN+FN}
Aucurracy=TP+FP+TN+FNTP+TN
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
Precision=\frac{TP}{TP+FP}
Precision=TP+FPTP
R
e
c
a
l
l
=
T
P
T
P
+
F
N
Recall=\frac{TP}{TP+FN}
Recall=TP+FNTP
1
F
1
=
1
2
(
1
P
r
e
c
i
s
i
o
n
+
1
R
e
c
a
l
l
)
\frac{1}{F1}=\frac{1}{2}({\frac{1}{Precision}+\frac{1}{Recall}})
F11=21(Precision1+Recall1)
8.2 ROC曲线和AUC
ROC曲线下面积就是AUC
ROC曲线的横轴是TPR(recall),纵轴是FPR
8.3 R-P曲线与AUPRC(更优)
R-P曲线的横轴是Recall,纵轴是Precision
正样本个数严重小于负样本个数,收据严重倾斜时,P-R曲线相比较于ROC曲线更加适合。