1、 拟合
介绍拟合在sklearn中四种基本评价尺度,分别为mean_squared_error、mean_absolute_error、explained_variance_score 和 r2_score。
公式中yi是第i个样本的真实值,y^i是i个样本的预测值。
1、均方差(mean-squared-error)
2、平均绝对值误差(mean_absolute_error)
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
4、中值绝对误差(Median absolute error)
适合含有离群点的数据集,不支持多输出。
5、R2 决定系数(拟合优劣,范围在[0,1],也可能为负,为0时拟合效果最差,为负时无意义)
这里
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
也叫为错误矩阵,通过它可以直观地观察到算法的效果。它的每一列是样本的预测分类,每一行是样本的真实分类(反过来也可以),它反映了分类结果的混淆程度。(直观来看,主对角线的颜色越深,模型越好)
下面准确率召回率中有表格图例。
2、准确率与召回率
准确率与召回率多用于二分类问题。准确率(Precision)指的是模型判为正的所有样本中有多少是真正的正样本;召回率(Recall)指的是所有正样本有多少被模型判为正样本,即召回率。
具体见下图:
true positive简写为TP,其余以此类推
网上的一些表不太适合理解,自己画一个:
那么,
Precision = TP/(TP+FP)
Recall = TP(TP+FN)
简单解释就是:
准确率代表你预测的结果有多少是对的,而召回率代表正例中你预测出来的正例覆盖了多少。
更直观的图:
如果需要在精确率与召回率间进行权衡,可以画出准确率-召回率曲线(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,分别与原样本按照如下的公式构建新的样本。
伪代码:
论文:https://www.jair.org/media/953/live-953-2037-jair.pdf