SVM不平衡数据分类知识点

class_weight和sample_weight

1、在SVC中对于不平衡数据可以调节svcl类中的参数class_weight和fit接口中的参数sample_weight
如果只设置class_weight,那么参数C变为:class_weight[i]*C 。
如果同时调节class_weight和sample_weight,那么参数C变为:class_weight[i] * sample_weight[i] * C。
2、准确率失去作用的原因:
从准确率的角度来说,不做样本平衡时的准确率反而更高,做了样本平衡的准确率反而下降了,这是因为做了样本平衡后,为了要更多的捕捉出少数类,模型误伤了许多多数类样本,而多数类样本被分错的样本数量大于少数类被分类正确的样本数量,使得模型整体的精确性下降。
3、如果要追求整体的accuracy,那么不要设置class_weight和sample_weight。
如果要追求的是捕捉少数类(因为少数类被判错的代价是巨大的),那么就要使用class_weight和sample_weight。

混淆矩阵

1、在混淆矩阵中,我们将少数类认为正例,多数类人为是反例。
SVM不平衡数据分类知识点_第1张图片
1、准确率:acc = (a+d) / (a+b+c+d)
2、精确度:preision = a / (a+c)
预测的少数类中有多少是被分类正确。
3、敏感度:recall= a / (a+b)
实际的少数类有多少被预测出来了
recall越高,预测出的少数类越多。
4、特异度:specificity = d /(c+d)
实际的多数类中,有多少被预测正确了。
5、假正率:FPR = c / (c+d)
将多数类判断错误的的能力。样本平衡后,FPR会下降,因为有多数类被分类错误了。

ROC曲线和AUC面积

在我们追求较高的recall时,precision会下降,也就是说随着少数类被捕捉出来,会有更多的多数类被判断错误。但随着recall的逐渐增加,模型将多数类判断错误能力是怎样变化的呢?就是希望理解每判断正确一个少数类,就有多少个多数类会被判断错误,假正率FPR可以帮助我们理解。
  我们使用recall与FPR之间的平衡来替代recall与precision之间的平衡,让我们衡量,模型在尽量捕捉少数类的同时,误伤多数类的情况是如何 变化 ——> ROC曲线。
1、ROC曲线是一条以不同阈值下的FPR为横坐标,不同阈值下的的recall为纵坐标的曲线,
2、评估ROC曲线:使用曲线下的面积——>AUC面积。

求去ROC上的最佳阈值

如果使用decision_faction来画ROC曲线,那么选择出来的最佳阈值就是最佳距离,如果使用概率,那么最佳阈值会是一个概率。
只要我们让这个距离或概率以上的点,都为正类,以下的点为反例。模型就是最好的。既能捕捉出少数类,又能尽量不误伤多数类,整体的精确性和对少数类的捕捉都能得到保证。而这个阈值就是roc曲线上的转折点。

你可能感兴趣的:(笔记)