在机器学习中,可以通过修改模型中的“class_weight”参数,从而调节不均衡样本的惩罚权重。
代码:
lr_l2 = LogisticRegression(penalty="l1", #正则化,防止过拟合,包括l1和l2
C=0.5, #正则化强度,C值越大,惩罚越重,正则化的效力越强
solver="liblinear", #优化算法选择参数
multi_class="auto", #分类个数
class_weight='balanced' #类权重参数,控制类的惩罚权重
)
提升了一点,在测试集上的改进会更加显著。
代码:
svc2 = SVC(C=0.1, #边界点的惩罚系数,值越大,预测精度越高,但越容易过拟合
kernel='rbf', #核函数类型
class_weight='balanced', #类权重参数
random_state=2)
精度同样有所提高,但是容易过拟合,只能调低参数C。
focal loss由何凯明提出,用于解决数据不平衡对深度学习模型造成的模型性能问题
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)的基础上增加了类别的不同权重以及困难(高损失)样本的权重。
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的分布也会发生倾斜,多数类样本就会在损失函数占据主导地位。由于损失函数的倾斜,模型训练过程中会倾向于样本多的类别,造成模型对少样本类别的性能较差。
从样本分布角度对损失函数添加权重因子。
原理:基于样本非平衡造成的损失函数倾斜,一个直观的做法就是在损失函数中添加权重因子,提高少数类别在损失函数中的权重,平衡损失函数的分布。
在二分类下, 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 ,即权重的大小根据正负样本的分布进行设置。
从样本分类难易程度解决问题
原理:从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)γ
目标检测领域中所提出的算法,用来对困难负样本进行挖掘,基准算法是Fast R-cnn。
基本原理与focal loss相似,都是针对难分的样本。
选择一些hard examples(多样性和高损失的样本)作为训练的样本,针对性地改善模型学习效果。
![[Pasted image 20230308201450.png]]
第一块ROI层会得到所有ROI的loss,根据hard ROI sampler结构根据损失排序选出hard example,并将这些hard example作为第二块ROI层的输入。
树模型要比逻辑回归模型要在不平衡数据集上表现更优秀
原理:采用集成学习机制来处理随机欠采样的信息丢失问题
基于无监督的方式进行欠采样。
为了克服随机欠采样方法导致的信息缺失问题,又要保证算法表现出较好的不均衡数据分类性能。基于均衡样本集的Adaboost分类器的集成算法,就是对多数类样本进行n次欠采样,得到n个模型。
基于有监督结合boosting的方式。
基于Adaboost,将Adaboost作为基分类器,其核心思路是在每一轮训练时都使用多数类与少数类数量上相等的训练集,然后使用该分类器对全体多数类进行预测,通过控制分类阈值(即概率超过多少判定为少数类)来控制FP(False Positive)率,将所有判断正确的类(数量为负样本总数×(1-FP))删除,然后进入下一轮迭代继续降低多数类数量。
将分类问题转化为异常检测问题,通过数据挖掘方法发现与数据集分布不一致的异常数据。
网址:
https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=2247552622&idx=5&sn=8911513d9c1a1306da590bfd659b70f8&chksm=ebb736badcc0bfac43536a905ef999f29e5c618bb3bc41395a57b13b4306f8315055ccd08dc1&scene=27
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)
ROC曲线下面积就是AUC
ROC曲线的横轴是TPR(recall),纵轴是FPR
R-P曲线的横轴是Recall,纵轴是Precision
正样本个数严重小于负样本个数,收据严重倾斜时,P-R曲线相比较于ROC曲线更加适合。