sklearn评价指标——回归模型评估及分类模型评估使用的库、ROC曲线理解

1、线性回归评价指标

#MSE均方误差
from sklearn.metrics import mean_squared_error
#MAEX
from sklearn.metrics import mean_absolute_error
#R^2决定系数
from sklearn.metrics import r2_score

2、分类指标概念:关心少量样本的那个类别(一般设置为正例,值为1)

2.1、混淆矩阵

  • 真正例:True Positive
  • 假正例:False Positive
  • 真负例:True Negitive
  • 假负例:False Negitive

在这里插入图片描述
confusion_matrix(y_true, y_pred, labels=None, sample_weight=None):通过计算混淆矩阵来评估分类的准确性 返回混淆矩阵

from sklearn.metrics import confusion_matrix

计算鸢尾花逻辑回归预测的结果

import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size'] = 15

iris=load_iris()
X,y=iris.data,iris.target
X=X[y!=0,2:]
y=y[y!=0]
y[y==1]=0
y[y==2]=1
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=2)
lr=LogisticRegression()
lr.fit(X_train,y_train)
y_hat=lr.predict(X_test)

计算混淆矩阵结果

s=confusion_matrix(y_true=y_test,y_pred=y_hat)
print(s)

结果

[[14  2]
 [ 2  7]]

2.2、正确率:样本不均衡有局限

accuracy
在这里插入图片描述
样本不均衡时有局限性:都判断为数量多的那一类,结果正确率也很高

2.3、精准率:预测为真正例在预测为正例的占比,看预测准不准

precision
在这里插入图片描述
判断的结果为正例中,有多少是真正例
缺点:预测的结果只有1例正例,并且是正确的,精准率为100%。实际有很多预测错误的负例,即真实的正例
场景:预测股票会涨,真实涨了10次,只预测到2次会涨,预测这两次都对了,那么就是我想要的精准度高,此时召回率不重要

2.4、召回率:预测为真正例在所有真实正例的占比

recall
在这里插入图片描述
真实的正例中,预测正确的正例有多少。
缺陷:都预测为正例,那么会覆盖真实的正例,召回率为100%

场景:抓坏人,坏人为正例,好人为负例。要的结果是宁可抓错不能放过。
思路:真实的类别中要判断的对的越多越好,即判断对的在真实类别的占比越多越好,召回率高
精准率不关注,即使预测错了他其实是个好人也没事
在这里插入图片描述

2.5、调和平均值F1:综合精准率和召回率

在这里插入图片描述

3、分类指标代码※

  1. 方法1,使用各自函数
from sklearn.metrics import accuracy_score   #正确率
from sklearn.metrics import precision_score    #精准率
from sklearn.metrics import recall_score      #召回率
from sklearn.metrics import f1_score         #调和平均值F1

#默认1类别为正例,可通过pos_label参数指定
print('正确率',accuracy_score(y_test,y_hat))
print('精准率',precision_score(y_test,y_hat))
print('召回率',recall_score(y_test,y_hat))
print('调和平均值F1',f1_score(y_test,y_hat))

结果

正确率 0.84
精准率 0.7777777777777778
召回率 0.7777777777777778
调和平均值F1 0.7777777777777778

另外,也可以调用逻辑回归模型对象的score方法,获取正确率
score方法与f1_score方法参数不同

print('逻辑回归调用score方法计算正确率',lr.score(X_test,y_test))

结果

逻辑回归调用score方法计算正确率 0.84
  1. 方法2:使用classification_report函数
from sklearn.metrics import classification_report
print(classification_report(y_true=y_test,y_pred=y_hat))

结果

       precision    recall  f1-score   support

          0       0.88      0.88      0.88        16
          1       0.78      0.78      0.78         9

avg / total       0.84      0.84      0.84        25

4、ROC曲线

  1. 概念:ROC(Receiver Operating Characteristic——受试者工作特征曲线),使用图形来描述二分类模型的性能表现。
  • TPR:True Positive Rate真正例率,模型预测为真的正例在真实正例的占比=召回率
  • FPR:False Positive Rate假正例率,模型预测为假的正例在真实负例的占比
    纵轴为TPR,横轴为假正例率
    在这里插入图片描述
  1. 特征:
  • 通过调整判断分类的阈值(逻辑回归默认阈值0.5),TPR和FPR随之改变,进而在ROC曲线坐标上形成多个点,反应模型分类效果
  • TPR增长越快,曲线越凸,模型的分类性能越好,即预测为正确的正例越多
  • ROC曲线比过(0,0)(1,1)这两个点。原因:逻辑回归模型默认阈值为0.5,sigmoid()结果即类别概率p默认≥0.5时,模型预测为类别1(正例)。那么修改阈值为0时,p≥0模型预测为类别1(正例),说明该模型该阈值下会将所有数据均预测为类别1(无论对错),此时FN=TN=0个,TPR=FPR=1
  • 修改阈值为1时,p≥1模型预测为类别1(正例),p是不可能大于100%的,说明该模型该阈值下会将所有数据均预测为类别0(无论对错),此时FP=TP=0个,TPR=FPR=0

5、AUC:ROC曲线的面积

AUC(Area Under the Curve):ROC曲线下面积,使用AUC值作为评价标准是因为有时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而AUC作为数值可以直观的评价分类器的好坏,值越大越好。

6、ROC及AUC代码实现

6.1、代码实现

  • 准备数据及模型预测结果
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#from sklearn.linear_model import LinearRegression
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

plt.rcParams['font.family']= 'simHei'  #用来设置字体,正常显示正文
plt.rcParams['axes.unicode_minus'] = False #用来显示负号
plt.rcParams['font.size'] = 16 #设置字体的大小

iris=load_iris()

X,y=iris.data,iris.target
#暂时使用2个花瓣特征和2个类别进行计算
X=X[y != 0 , 2: ]
y=y[y != 0]
y[y==1]=0
y[y==2]=1
#拆分数据集
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=2)
lr=LogisticRegression()
#训练模型
lr.fit(X_train,y_train)
#通过模型预测结果
y_hat=lr.predict(X_test)
probability=lr.predict_proba(X_test)
  • ROC曲线
    roc_curve函数的阈值是返回值,根据提供的模型预测正例概率反推出来的
    roc_curve返回三个值,分别是fpr、tpr和阈值;常用三个参数,真实的类别、模型预测为类别1的概率、pos_label=1设置类别1为正例
#ROC曲线
from sklearn.metrics import roc_curve
#AUC:auc和roc_auc_score都可以得出结果,所需参数不同
from sklearn.metrics import auc,roc_auc_score
#roc_curve返回三个值,分别是fpr、tpr和阈值;常用三个参数,真实的类别、模型预测为类别1的概率、pos_label=1设置类别1为正例
fpr,tpr,thresholds = roc_curve(y_test,probability[:,1],pos_label=1)
print('fpr值:',fpr)
print('tpr值:',tpr)
print('thresholds值:',thresholds)
#auc函数参数为fpr、tpr
print('AUC面积值:',auc(fpr,tpr))
#roc_auc_score函数参数为真实类别、模型预测为类别1的概率
print('AUC面积得分:',roc_auc_score(y_true=y_test,y_score=probability[:,1]))

结果

fpr值: [0.     0.     0.     0.0625 0.0625 0.125  0.125  0.25   0.3125 0.4375  0.6875 0.8125 1.    ]
tpr值: [0.         0.11111111 0.55555556 0.55555556 0.88888889 0.88888889
 1.         1.         1.         1.         1.         1.
 1.        ]
thresholds值: [1.89281389 0.89281389 0.68321182 0.57414373 0.50124062 0.40461479
 0.27410305 0.24775845 0.23340897 0.19711588 0.06923229 0.04279423
 0.00652175]
AUC面积值: 0.9652777777777778
AUC面积得分: 0.9652777777777778

6.2、绘图ROC曲线

plt.plot(fpr,tpr,marker='o',label='ROC曲线')
plt.plot([0,0,1],[0,1,1],ls='--',label='完美预测')
plt.legend()
plt.show()

在这里插入图片描述

汇总指标:
https://www.cnblogs.com/mdevelopment/p/9456486.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值