拟合及分类评价指标和处理分类样本不均衡的smote算法

1、 拟合

介绍拟合在sklearn中四种基本评价尺度,分别为mean_squared_error、mean_absolute_error、explained_variance_score 和 r2_score。
公式中yi是第i个样本的真实值,y^i是i个样本的预测值。
1、均方差(mean-squared-error)

MSE

2、平均绝对值误差(mean_absolute_error)

MAE

3、可释方差得分(explained_variance_score,最好情况为1,越小越差) explained variation measures the proportion to which a mathematical model accounts for the variation (dispersion) of a given data set

variance score

4、中值绝对误差(Median absolute error)

MedAE

适合含有离群点的数据集,不支持多输出。
5、R2 决定系数(拟合优劣,范围在[0,1],也可能为负,为0时拟合效果最差,为负时无意义)

R2 score

这里


2、 分类

分类的评价指标有很多,这里列举较常用的几个。论文中一般常用 precision,recall,f1-score,嫌麻烦可以直接生成分类报告Classification report:

from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 0]
y_pred = [0, 0, 2, 1, 0]

target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names))
##结果(前面是三个主要指标,support是被分到的这个类里元素出现的个数):
             precision    recall  f1-score   support

    class 0       0.67      1.00      0.80         2
    class 1       0.00      0.00      0.00         1
    class 2       1.00      0.50      0.67         2

avg / total       0.67      0.60      0.59         5

1、混淆矩阵Confusion Matrix
也叫为错误矩阵,通过它可以直观地观察到算法的效果。它的每一列是样本的预测分类,每一行是样本的真实分类(反过来也可以),它反映了分类结果的混淆程度。(直观来看,主对角线的颜色越深,模型越好)

拟合及分类评价指标和处理分类样本不均衡的smote算法_第1张图片
混淆矩阵

下面准确率召回率中有表格图例。

2、准确率与召回率
准确率与召回率多用于二分类问题。准确率(Precision)指的是模型判为正的所有样本中有多少是真正的正样本;召回率(Recall)指的是所有正样本有多少被模型判为正样本,即召回率。
具体见下图:
true positive简写为TP,其余以此类推


拟合及分类评价指标和处理分类样本不均衡的smote算法_第2张图片
分类评价

网上的一些表不太适合理解,自己画一个:

拟合及分类评价指标和处理分类样本不均衡的smote算法_第3张图片
混淆矩阵

那么,
Precision = TP/(TP+FP)
Recall = TP(TP+FN)
简单解释就是:
准确率代表你预测的结果有多少是对的,而召回率代表正例中你预测出来的正例覆盖了多少。

更直观的图:

拟合及分类评价指标和处理分类样本不均衡的smote算法_第4张图片
图片来自知乎

如果需要在精确率与召回率间进行权衡,可以画出准确率-召回率曲线(Precision-Recall Curve),曲线下的面积(AUC)被称为AP分数(Average precision score);AP分数可以理解为分类器的平均准确率,是一种适合比较不同分类器性能的方法。

3、ROC
ROC曲线适用于二分类问题,ROC曲线的每一个点表示一个阈值,分类器给每个样本一个得分,得分大于阈值的我们认为是正样本,小于阈值的认为是负样本。那么纵坐标是正样本的召回率,横坐标是(1-负样本的召回率)。

4、ROC-AUC(Area under Curve)
Roc曲线下的面积,介于0.1和1之间。AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面。Auc作为数值可以直观的评价分类器的好坏,值越大越好,随机情况大概是0.5,所以一般不错的分类器AUC至少要大于0.5。

选择ROC和ROC下曲线面积是因为分类问题经常会碰到正负样本不均衡的问题,此时准确率和召回率不能有效评价分类器的性能,而ROC曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。

5、F1 score
也被称作F-score 或 F-measure,是准确率和召回率的调和平均数(加权平均),一般来说准确率和召回率是很难兼顾的,很可能一个高,另一个就低,理想情况是希望准确率和召回率都高,F1就是一个两者的综合评价。
F1=2* Precision * Recall/(Precision + Recall)

6、精度accuracy
正确率是我们最常见的评价指标,accuracy =(TP+TN)/(P+N),就是被分对的样本数除以所有的样本数。样本均衡时这个指标相对客观,正确率越高,分类器越好。

7、对数损失Log loss
也叫逻辑回归损失(Logistic regression loss)或交叉熵损失(Cross-entropy loss)。

sklearn

##均方差
from sklearn.metrics import mean_absolute_error
##平均绝对误差
from sklearn.metrics import mean_squared_error
##可释方差得分
from sklearn.metrics import explained_variance_score
##R2 决定系数
from sklearn.metrics import r2_score
##中值绝对误差
from sklearn.metrics import median_absolute_error
##混淆矩阵
from sklearn.metrics import confusion_matrix
##准确率
from sklearn.metrics import precision_score
##召回率
from sklearn.metrics import recall_score
#同时计算上面两个
from sklearn.metrics import precision_recall_curve
##AP分(准确率-召回率-AUC)
from sklearn.metrics import average_precision_score
##ROC
from sklearn import metrics##然后调用方法metrics.roc_curve()
##ROC-AUC
from sklearn.metrics import roc_auc_score
##f1
from sklearn.metrics import f1_score
##精度
from sklearn.metrics import accuracy_score

3.smote算法,处理分类训练样本不均衡问题:

分类时,经常会碰到到样本不均衡的问题,例如正样本多于负样本几倍。由于分类模型需要准确率和召回率同时高才算好(f1高或者曲线下面积大),那么正负样本数量接近的时候最适合训练,可是如果把多余的样本去掉模型又丢失了很多信息。
那么有几种常用方法缓解样本不均衡的影响:
1.对数据进行采样(over-sampling上采样和under-sampling下采样)
2.训练时调整类别惩罚权重
3.生成样本,smote算法就是常用的生成样本算法。可以对样本少的类别生成样本直到样本数量均衡。
生成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。

算法流程如下。
(1)对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。
(2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为xn。
(3)对于每一个随机选出的近邻xn,分别与原样本按照如下的公式构建新的样本。



伪代码:

拟合及分类评价指标和处理分类样本不均衡的smote算法_第5张图片
伪代码

论文:https://www.jair.org/media/953/live-953-2037-jair.pdf

你可能感兴趣的:(拟合及分类评价指标和处理分类样本不均衡的smote算法)