F1 值是检验二分类模型特性的一种指标值

lxf2023-05-05 00:46:43

F1 值

F1 值是检验二分类模型特性的一种指标值,这是精确率和均方误差的调和平均数,能够充分考虑实体模型准确性和均方误差,针对不平衡数据集的二分类每日任务比准确度更为适宜。

F1 值计算公式如下所示:

F1=2PrecisionRecallPrecision RecallF1 = \frac{2*Precision*Recall}{Precision Recall}

在其中,Precision 为精确率,Recall 为均方误差。精确率表明预测分析大于零例的样本中,真真正正大于零例的占比;均方误差表明真真正正大于零例的样本中,被准确预测分析大于零例的占比。

下列是一个实例编码,展现怎么计算二分类模型在验证集里的 F1 值:

import numpy as np
from sklearn.metrics import f1_score
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 载入数据信息
data = np.loadtxt('data.csv', delimiter=',')
X = data[:, :-1]  # 特征矩阵
y = data[:, -1]   # 标识

# 将数据分为测试集和验证集,比例是8:2
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 训练算法
model = LogisticRegression()
model.fit(X_train, y_train)

# 应用验证集评价模型特性
y_pred = model.predict(X_test)
f1 = f1_score(y_test, y_pred)

print('实体模型在验证集里的F1数值:', f1)

所述编码中,使用 f1_score 函数计算实体模型在验证集里的 F1 值。该函数公式必须传到验证集真正标识 y_test 和模型预测标识 y_pred 2个主要参数。f1_score 函数控制方式如下所示:

def f1_score(y_true, y_pred):
    precision = precision_score(y_true, y_pred)
    recall = recall_score(y_true, y_pred)
    return 2 * (precision * recall) / (precision   recall)

在这个控制方式中,我们首先算出精确率和均方误差,随后依据上述公式换算 F1 值。

F1 系数的取值是 0 到 1 中间,趋近于 1 表明模型特性就越好,趋近于 0 表明模型特性越不好。当精确率和均方误差与此同时非常高时,F1 值也会比较高,因而,F1 值大单用精确率或均方误差更全面和客观性。

需注意,F1 值针对数据类型遍布不均衡的情形下,很有可能也会失去一定准确性。在特殊情况下,例如正例仅有很少的状况,实体模型自始至终预测分析小于零例时,精确率和均方误差均为 0,因而 F1 值又为 0,此刻 F1 值就不再是一个靠谱指标。这时,必须尝试使用别的指标值来评价模型性能,例如试验者工作特征曲线图(ROC 曲线图)和 AUC(曲线下面积)。

总而言之,F1 值是检验二分类模型特性的一种常见指标值,它充分考虑了精确率和均方误差,针对不平衡数据集的二分类每日任务比准确度更为适宜。实际应用中,应该根据实际情况选择适合自己的指标值来评价模型性能。

ROC 曲线图(Receiver Operating Characteristic curve)

ROC 曲线图(Receiver Operating Characteristic curve)主要是用于评定二分类模型特性的一种实用工具。ROC 曲线图是一条二维曲线图,以真真正正例率(True Positive Rate,TPR)为纵轴,以假正例率(False Positive Rate,FPR)为横坐标轴,叙述了实体模型在各个阀值中的主要表现。

从总体上,TPR 指的是在全部具体大于零例的样本中,被实体模型恰当预测分析大于零例的占比;而 FPR 指的是在全部具体小于零例的样本中,被实体模型错误预测大于零例的占比。ROC 曲线图是 TPR-FPR 平面内的线条,曲线图越接近左上方,表明模型特性就越好。

以下属于一个简单的实例编码,展现如何绘制 ROC 曲线图与运算 AUC 值:

import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt

# 形成二分类数据
X, y = make_classification(n_samples=1000, n_classes=2, random_state=0)

# 将数据分为测试集和验证集,比例是8:2
n_train = int(0.8 * X.shape[0])
X_train, y_train = X[:n_train], y[:n_train]
X_test, y_test = X[n_train:], y[n_train:]

# 练习逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 应用验证集评价模型特性
y_score = model.decision_function(X_test)
fpr, tpr, thresholds = roc_curve(y_test, y_score)

# 制作ROC曲线
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (AUC = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

所述编码中,我们先应用 make_classification 函数生成一个任意的二分类数据集。再将数据依照 8:2 的比例分成测试集和验证集,应用 LogisticRegression 类练习一个逻辑回归模型,并用 decision_function 方式进行计算验证集样品的预测分析成绩。下面应用 roc_curve 函数计算实体模型在各个阀值中的 TPR 和 FPR,最终应用 auc 函数计算 ROC 曲线图中的总面积,即 AUC 值。最终应用 matplotlib 库制作 ROC 曲线图。

需注意,测算 ROC 曲线图和 AUC 值后,需要用到实体模型在验证集里的预测分析成绩,由于实体模型在各个阀值中的主要表现不一样,因此 ROC 曲线图彰显了实体模型在各个阀值中的主要表现,是评价模型特性的一种常见办法。假如模型 ROC 曲线图在左上方,表明实体模型具有非常好的特性;假如 ROC 曲线图与对角重叠,则表明模型特性相当于任意猜想。

实际应用中,可以根据 ROC 曲线形状 AUC 值来挑选最合理的实体模型。假如我们有好几个二分类模型供选择,我们可以用交叉验证等方式进行计算每一个模型 ROC 曲线图和 AUC 值,然后点击 AUC 值较大模型。

除开二分类问题,ROC 曲线图还可以用于多分类问题。在这样的情况下,我们可以用 One-vs-Rest 或 One-vs-One 等方式将多分类问题转化为好几个二分类问题,随后测算每一个二分类问题的 ROC 曲线图和 AUC 值。

总而言之,ROC 曲线图是评定二分类模型特性的一种重要专用工具,能帮助我们挑选最合理的实体模型。与此同时,它也是一个非常直观地专用工具,因为他彰显了实体模型在各个阀值中的主要表现。

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!