1.准确率(accuracy)
from sklearn.metrics import accuracy_score
acc = accuracy_score(train_y,pred_y,normalize=True)
normalize=True 返回准确率,False则返回分类正确的个数
准确率的局限性:
1.类别不平衡时。
2.仅关注某一类,然而该类占比极小。
2.精度/查准率(precision)
简单的说,就是预测成x的类别中,真正是x的概率。
sklearn官网
使用时请查看官网,这里不写详细了,因为写详细了到用的时候也需要查官网。
from sklearn.metrics import precision_score
pre = precision_score(train_y,pred_y,average = None)
average: None :各个类别的精度列表
macro:各个类别的精度平均值(注意类别不平衡)
weight:各个类别加权
micro:多标签问题中,大类被忽略
购物推荐中比较重要
3.召回率(recall)
召回率的应用角度与精度相反,召回率的概念是类别x中共有n个样本,有多少个样本被分类到x类中去了。
from sklearn.metrics import recall_score
pre = recall_score(train_y,pred_y,average = None)
average: None :各个类别的精度列表
macro:各个类别的精度平均值(注意类别不平衡)
weight:各个类别加权(权重 = 类别中的样本数量)
micro:多标签问题中,大类被忽略
犯罪检索,疾病监测中比较重要
4.F1值
F1 = 2 * P * R/(P+R)
控制单变量时,F1值是单调递增的。
from sklearn.metrics import f1_score
f1_score(train_y, y_pred, pos_label = 1, average = None)
pos_label指正例的类别。
或者使用下面的方法,一次性输出P,R and f1.
import warnings
warnings.filterwarnings("ignore")
train_y = [1,0,1,0,1,0,1,0,1,1]
y_pred = [0,0,0,0,0,0,0,0,0,0]
from sklearn.metrics import classification_report
target_names=['a','b']
print(classification_report(train_y, y_pred, target_names = target_names))
5.ROC曲线
在面对类别不平衡是,ROC曲线作为评价标准很有用。
ROC纵轴的含义是所有的1类中,被识别对的概率。
ROC横轴的含义是所有的0类中,被识别错的概率。
所以在ROC中越接近左上角越nice。
PS:其实横轴若改成:ROC横轴的含义是所有的0类中,被识别对的概率。那么就变成了越接近右上角越nice。
from sklearn.metrics import roc_curve
roc_curve(train_y,y_pred_prob,pos_label = 1)
pos_label指正例的类别。
AUC
若分类器可以输出样本属于1类的概率,那么可以给概率一个阈值,大于阈值则分类呈1,小于阈值则分类成0。阈值变化,则就会绘制多个ROC,连接成ROC曲线,ROC的面积就是AUC,AUC越大,分类器越nice。
PR曲线与ROC的区别
当测试集的类别不平衡且类别比例发生变化时,PR曲线会发生严重的变化,但是ROC变化并不大。