机器学习--数据判断依据 精确度、召回率、调和平均值F1值

精准度(precision)

precision = 正确预测的个数(TP) / 被预测正确的个数(TP+FP)

召回率(recall)

recall = 正确预测的个数(TP)/ 预测个数(FN)

调和平均值 F1-Socre

f1 = 2*精准度 * 召回率 /(精度 * 召回率)

以二分类问题为例

真实\预测01
0预测negative正确(TN)预测positive错误(FP)
1预测positive错误(FN)预测positive正确(TP)

precision = TP/(TP+FP)
recall = TP/(TP+FN)
求f1_score

from sklearn.metrics import f1_score
f1_score(y_test,y_predict)
# y_test 测试集
# y_predict 预测结果

代码实现上述定义

import numpy as np
from sklearn import datasets

digits = datasets.load_digits()
X = digits['data']
y = digits['target'].copy()

# 手动让digists数据9的数据偏斜
y[digits['target']==9]=1
y[digits['target']!=9]=0

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=1)
log_reg = LogisticRegression()
log_reg.fit(X_train,y_train)
log_reg.score(X_test,y_test)
y_log_predict = log_reg.predict(X_test)

# 预测negative正确
def TN(y_true,y_predict):
    return np.sum((y_true==0)&(y_predict==0))
tn = TN(y_test,y_log_predict) # tn = 399

# 预测positive错误
def FP(y_true,y_predict):
    return np.sum((y_true==0)&(y_predict==1))
fp = FP(y_test,y_log_predict) # fp = 3

# 预测negative错误
def FN(y_true,y_predict):
    return np.sum((y_true==1)&(y_predict==0))
fn = FN(y_test,y_log_predict) # fn = 7

# 预测positive正确
def TP(y_true,y_predict):
    return np.sum((y_true==1)&(y_predict==1))
tp = TP(y_test,y_log_predict) # tp = 41
构造混淆矩阵
def confusion_matrix(y_true,y_predict):
    return np.array([
        [TN(y_true,y_predict),FP(y_true,y_predict)],
        [FN(y_true,y_predict),TP(y_true,y_predict)]
    ])
confusion_matrix(y_test,y_log_predict)
"""
output :
array([[399,   3],
       [  7,  41]])
"""
精准率
def precision_score(y_true,y_predict):
    tp = TP(y_true,y_predict)
    fp = FP(y_true,y_predict)
    try:
        return tp/(tp+fp)
    except:
        return 0.0
precision_score(y_test,y_log_predict)
"""
output : 0.9318181818181818
"""
召回率
def recall_score(y_true,y_predict):
    tp = TP(y_true,y_predict)
    fn = FN(y_true,y_predict)
    try:
        return tp/(tp+fn)
    except:
        return 0.0
recall_score(y_test,y_log_predict)
"""
output : 0.8541666666666666
"""

以上为拆分理解 在sklearn中都可以直接求得

# 混淆矩阵
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test,y_log_predict)
"""
output:array([[399,   3],
       [  7,  41]], dtype=int64)
"""
# 精准率
from sklearn.metrics import precision_score
precision_score(y_test,y_log_predict)
"""
output: 0.9318181818181818
"""
# z召回率
from sklearn.metrics import recall_score
recall_score(y_test,y_log_predict)
"""
output: 0.8541666666666666
"""
# classification_report
from sklearn.metrics import classification_report
print(classification_report(y_test,y_log_predict))
"""
output:              precision    recall  f1-score   support

          			0       0.98      0.99      0.99       402
          			1       0.93      0.85      0.89        48

avg / total       			0.98      0.98      0.98       450
"""
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
机器学习领域,评估模型的性能是非常重要的,而精确度召回率F1是常用的评价指标之一。在Python中,可以使用sklearn库来计算这些指标。 首先,定义一些概念: - TP(True Positive):实际为正例,模型预测为正例的样本数 - FP(False Positive):实际为负例,模型预测为正例的样本数 - FN(False Negative):实际为正例,模型预测为负例的样本数 - TN(True Negative):实际为负例,模型预测为负例的样本数 1. 精确度(Precision):指模型预测为正例的样本中,实际为正例的比例。 $Precision = \frac{TP}{TP+FP}$ 2. 召回率(Recall):指实际为正例的样本中,模型预测为正例的比例。 $Recall = \frac{TP}{TP+FN}$ 3. F1精确度召回率的综合评价指标,是它们的调和平均数。 $F1 = 2 \times \frac{Precision \times Recall}{Precision + Recall}$ 在sklearn库中,可以使用以下代码计算精确度召回率F1: ``` python from sklearn.metrics import precision_score, recall_score, f1_score # y_true是真实的标签,y_pred是模型预测的标签 precision = precision_score(y_true, y_pred) recall = recall_score(y_true, y_pred) f1 = f1_score(y_true, y_pred) ``` 其中,`y_true`和`y_pred`都是一维数组,分别表示真实的标签和模型预测的标签。需要注意的是,这里的`y_true`和`y_pred`应该是相同长度的。 除了这些指标,sklearn库还提供了`classification_report`函数,可以输出更详细的分类报告,包括精确度召回率F1、支持样本数等信息。用法如下: ``` python from sklearn.metrics import classification_report # y_true是真实的标签,y_pred是模型预测的标签 report = classification_report(y_true, y_pred) print(report) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值