scikit-learn -分类模型的评估(classification_report)
参数
sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)
- y_true:1 维数组,真实数据的分类标签
- y_pred:1 维数组,模型预测的分类标签
- target_names:列表,指定标签名称
- sample_weight:1 维数组,不同数据点在评估结果中所占的权重
- digits:评估报告中小数点的保留位数,如果 output_dict=True,此参数不起作用,返回的数值不作处理
- output_dict:若真,评估结果以字典形式返回
返回值:字符串或字典
- 精确度:precision,正确预测为正的,占全部预测为正的比例,TP / (TP+FP)
- 召回率:recall,正确预测为正的,占全部实际为正的比例,TP / (TP+FN)
- F1-score:精确率和召回率的调和平均数,2 * precision*recall / (precision+recall)
其他参数: - 微平均值:micro average,所有数据结果的平均值
- 宏平均值:macro average,所有标签结果的平均值
- 加权平均值:weighted average,所有标签结果的加权平均值
用法示例:
from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 2]
y_pred = [0, 0, 2, 2, 1]
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names))
输出结果:
precision recall f1-score support
class 0 0.50 1.00 0.67 1
class 1 0.00 0.00 0.00 1
class 2 1.00 0.67 0.80 3
avg / total 0.70 0.60 0.61 5
考虑现在输入分类器的样本有10个,他们属于类别A B C。
假设这10个样本的真实类标为(有序)和分类器预测的类标分别是:
真实:A A A C B C A B B C
预测:A A C B A C A C B C
precision(A) = 3(正确预测为A类的样本个数为3) / 4(预测为A类的样本数为4) = 0.75 recall(A) = 3 / 4(真实A类样本有4个) = 0.75
precision(B) = 1 / 2 = 0.5 recall(B) = 1 / 3 = 0.3333
precision( C ) = 2 / 3 = 0.6667 recall( C ) = 2 / 3 = 0.6667