任何事情都是由量变到质变的过程,学习Python也不例外。
F1值介绍
安装toad包
toad.metrics.f1_score函数定义
toad.metrics.f1_score函数实例
1 什么是F1值
F1值又称为F1分数(F1-Score):是分类问题的一个衡量指标,它是精确率P(Precision)和召回率R(Recall)的调和平均数。
F1值=2*P*R/(P+R)
假设1代表涉赌涉诈账户,0代表非涉赌涉诈的低风险账户。
1. TP(True Positive):模型正确预测为1的数量,即真实值是1,模型预测为1的数量。 2. FN(False Negative):模型错误预测为0的数量,即真实值是1,模型预测为0的数量。 3. FP(False Positive):模型错误预测为1的数量,即真实值是0,模型预测为1的数量。
4.TN(True Negative):模型正确预测为0的数量,即真实值是0,模型预测为0的数量。
f1_score是toad库下的函数,调用需先要安装toad包。打开cmd,安装语句如下:
pip install toad
F1 分数是分类任务中常用的一个评价指标,它是精确率(Precision)和召回率(Recall)的调和平均数,用于衡量模型的性能。
其基本调用语法如下:
import toad
toad.metrics.f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
y_true:真实的标签或目标值。也是一个数组或列表,包含了每个样本的真实类别。
y_pred:预测标签的数组或列表,包含每个样本预测的类别标签。 labels(可选):一个数组或列表,指定了每个类别的标签。如果未指定,将使用y_ture中的所有唯一标签。
pos_label(可选):指定正类的标签,默认值为1。这个参数在二分类问题中特别有用,因为F1分数通常针对正类计算。 average (可选): 指定多类分类问题中 F1 分数的计算方式。可能的值包括:
'binary': 只计算正类的 F1 分数(默认值)。
'micro': 通过计算总的真正例、假正例和假负例来计算全局 F1 分数。
'macro': 为每个类别计算 F1 分数,然后取未加权的平均值。
'weighted': 为每个类别计算 F1 分数,然后按每个类别的样本数量加权平均。
'samples': 仅适用于多标签分类问题,计算每个实例的 F1 分数,然后取平均值。
sample_weight (可选): 一个数组,用于为每个样本指定权重。如果提供,F1 分数将根据这些权重计算。
zero_division (可选): 指定当遇到除以零的情况时如何处理。可能的值包括:
'warn': 发出警告(默认值)。
0: 返回 0。
1: 返回 1。
四、toad.metric.f1_score函数实例 接着来看下应用toad函数计算f1_score值,具体代码如下:
import toad
import pandas as pd
from sklearn.metrics import f1_score
score = [0.1, 0.4, 0.5,0.22, 0.35, 0.8, 0.9, 0.66, 0.75] #模型预测分数
target = [0, 0, 0, 0, 1, 1, 1, 1, 1] #真实标签
date = pd.DataFrame({'y':target, 'pred':score})
for i in [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]:
print(i)
date['pred_f'] = 0
date['pred_f'][date['pred']>i] = 1
print(toad.metrics.f1_score(date['y'], date['pred_f']) )
print('='*15)
得到结果:
0.1
0.7692307692307693
===============
0.2
0.7692307692307693
===============
0.3
0.8333333333333333
===============
0.4
0.8000000000000002
===============
0.5
0.888888888888889
===============
0.6
0.888888888888889
===============
0.7
0.7499999999999999
===============
0.8
0.33333333333333337
===============
0.9
0.0
===============
可以发现用不同的阈值切割模型预测分数,F1值会发生变化,具体可根据业务场景选择合适的阈值。
为了验证结果的正确性,由于计算的样本较少,可以手动计算,或者和sklearn中F1值计算函数做对比,代码如下:
import pandas as pd
from sklearn.metrics import f1_score
score = [0.1, 0.4, 0.5,0.22, 0.35, 0.8, 0.9, 0.66, 0.75] #模型预测分数
target = [0, 0, 0, 0, 1, 1, 1, 1, 1] #真实标签
date = pd.DataFrame({'y':target, 'pred':score})
for i in [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]:
print(i)
date['pred_f'] = 0
date['pred_f'][date['pred']>i] = 1
#根据阈值确定预测标签值
print(f1_score(date['y'], date['pred_f']))
#sklearn方法计算f1_score
print(toad.metrics.f1_score(date['y'], date['pred_f']) )
#toad方法计算f1_score
print('='*15)
得到结果:
0.1
0.7692307692307693
0.7692307692307693
===============
0.2
0.7692307692307693
0.7692307692307693
===============
0.3
0.8333333333333333
0.8333333333333333
===============
0.4
0.8000000000000002
0.8000000000000002
===============
0.5
0.888888888888889
0.888888888888889
===============
0.6
0.888888888888889
0.888888888888889
===============
0.7
0.7499999999999999
0.7499999999999999
===============
0.8
0.33333333333333337
0.33333333333333337
===============
0.9
0.0
0.0
===============
可以发现两种计算方式结果是一致的。
至此,Python中应用toad.metrics.f1_score函数已讲解完毕,如想了解更多建模内容,可以翻看公众号中“风控建模”模块相关文章。
一文囊括风控模型搭建(原理+Python实现),持续更新。。。
不同工作年限风控建模岗薪资水平如何?招聘最看重面试者什么能力?
部分群限时免费加
19967879837
添加微信号、手机号