模型评估-混淆矩阵(内含期末考试题)

模型评估-混淆矩阵

山川壮丽,我心豪迈,乘风破浪,向着梦想追随。

目录

模型评估-混淆矩阵

1.混淆矩阵

2.ROC(Receiver Operating Characteristic)曲线

3.实例 (期末试题)

1)代码展示

2)运行效果


1.混淆矩阵

混淆矩阵是在分类问题中评估模型性能的一种重要工具。它以矩阵的形式展示了模型在测试集上的预测结果与真实标签之间的对应关系。

假设我们有一个二分类问题,比如判断肿瘤是良性(B)还是恶性(M)。混淆矩阵如下所示:

                                                     Predicted 

       Actual                   预测为良性(B)    预测为恶性(M)

真实为良性(B)      True Negative (TN)      False Positive (FP)

真实为恶性(M)      False Negative (FN)     True Positive (TP)

其中,混淆矩阵的每一个单元格表示了模型对样本的预测结果,以及样本的真实标签。具体解释如下:

 True Positive (TP):模型将正类样本正确地预测为正类。

 True Negative (TN):模型将负类样本正确地预测为负类。

 False Positive (FP):模型将负类样本错误地预测为正类(也称为 Type I 错误)。

 False Negative (FN):模型将正类样本错误地预测为负类(也称为 Type II 错误)。

通过混淆矩阵,我们可以计算出一系列评估指标,比如准确率、召回率、精确率等,从而更全面地评估模型的性能。

2.ROC曲线

ROC(Receiver Operating Characteristic)曲线是评估二分类模型性能的常用工具之一,它可以帮助我们理解模型在不同阈值下的预测效果。

ROC曲线以假正例率(False Positive Rate,FPR)为横坐标,真正例率(True Positive Rate,TPR)为纵坐标绘制。在二分类问题中,通常将正例定义为目标类别,负例定义为非目标类别。以下是ROC曲线的一些特点:

横坐标 FPR(False Positive Rate):指的是被错误地预测为正例的负例样本占所有负例样本的比例,即 FPR = FP / (FP + TN)。

纵坐标 TPR(True Positive Rate):指的是被正确地预测为正例的正例样本占所有正例样本的比例,即 TPR = TP / (TP + FN),也称为召回率或灵敏度。

曲线下面积 AUC(Area Under the Curve):ROC曲线下方的面积,用于衡量模型预测的准确性和稳定性。AUC的取值范围在0到1之间,越接近1表示模型性能越好,0.5表示模型性能等同于随机猜测。

当ROC曲线越接近左上角(0, 1)点时,模型性能越好,因为此时TPR较高,而FPR较低,意味着模型在保持高召回率的同时,尽可能地减少了误报率。

通过比较不同模型的ROC曲线及其下的AUC值,我们可以选择最优模型,以便在不同阈值下实现更好的分类性能。

3.实例 (期末试题)

1)代码展示
#coding=UTF-8
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegressionCV
from sklearn import metrics
from sklearn.preprocessing import label_binarize
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
import matplotlib as mpl
import  matplotlib.pyplot as plt
defaultencoding = 'utf-8'
mpl.rcParams['font.sans-serif']=[u'simHei']
mpl.rcParams['axes.unicode_minus']=False
#加载数据
datas=pd.read_csv("data/iris.data",header=None)#加载iris.data数据
#数据处理
datas=datas.replace("?",np.NaN)#把?号用NaN替换
datas=datas.dropna(how="any",axis=1)#删除NaN行
#提取X和Y
X=datas.iloc[:,0:-1]#取0到最后一列前一列
#对种类英文编码
Y=pd.Categorical(datas[4]).codes#对最后一列做编码
print(Y)
#对数据进行拆分
#逻辑回归是用来判断 y属于哪一个种类 1 0
train_x,test_x,train_y,test_y=train_test_split(X,Y,test_size=0.2,random_state=1)
#创建模型和训练模型
ss=StandardScaler()
train_x=ss.fit_transform(train_x)#把trainx数据标准化
test_x=ss.transform(test_x)#把testx数据标准化

logistic=LogisticRegressionCV(random_state=2,multi_class="ovr")
logistic.fit(train_x,train_y) #能够识别三种花模型 求theta
#评估
proba=logistic.predict_proba(test_x)#每条记录每个种类的概率 30 3

ymy=label_binarize(test_y,classes=(0,1,2))#转换成哑编码 30 3

fpr,tpr,threshold=metrics.roc_curve(ymy.ravel(),proba.ravel())#ravel拉平,变成一维
auc=metrics.auc(fpr,tpr)#根据fpr tpr计算面积
print("auc",auc)
# knn=KNeighborsClassifier(n_neighbors=5,algorithm="kd_tree")
# knn.fit(train_x,train_y)
# test_y_hat=knn.predict(test_x)
# proba_knn=knn.predict_proba(test_x)
# fpr1,tpr1,threshold1=metrics.roc_curve(ymy.ravel(),proba_knn.ravel())
# auc1=metrics.auc(fpr1,tpr1)
# print(auc1)
plt.figure()
#画逻辑回归算法ROC曲线
plt.plot(fpr,tpr,color='red',label='回归ROC auc:'+str(auc))
# plt.plot(fpr1,tpr1,color='green',label='knnROC auc:'+str(auc1))
plt.legend()
plt.show()

2)运行效果

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值