模型评估方式

文章目录

  • 一、有监督-分类模型
    • 1、混淆矩阵
    • 2、分类模型的精度和召回率
    • 3、ROC曲线与AUC
  • 二、有监督-回归模型
  • 三、无监督模型
    • 1、kmeans求解最优k值的方法:轮廓系数、肘部法
    • 2、GMM的最优组件个数:AIC 和 BIC

一、有监督-分类模型

以威斯康星州乳腺癌数据集为例子


import pandas as pd
df = pd.read_csv('https://archive.ics.uci.edu/ml/'
                 'machine-learning-databases'
                 '/breast-cancer-wisconsin/wdbc.data', header=None)
df.head()

在这里插入图片描述

## 将数据分成标签与特征,同时对标签编码,M=1,B=0
from sklearn.preprocessing import LabelEncoder
X = df.loc[:, 2:].values
y = df.loc[:, 1].values
le = LabelEncoder()
y = le.fit_transform(y)

## 将数据拆分成训练集与测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = \
    train_test_split(X, y, 
                     test_size=0.20,
                     stratify=y,
                     random_state=1)

用scikit-learn的pipeline类,可以拟合任意多个转换步骤的模型,并将模型用于对新数据进行预测。
make_pipeline函数可以包括任意多个scikit-learn转换器,接着是实现fit及predict的scikit-learn估计器
注意,尽管流水线的中间步骤没有数量限制,但是流水线的最后一个元素必须是估计器

# 通过构建流水线简化流程
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline

pipe_svc = make_pipeline(StandardScaler(),
                         SVC(random_state=1))

1、混淆矩阵

预测分类结果与实际分类结果的叉乘方阵,真正(TP)、真负(TN)、假正(FP)、假负(FP)。sklearn里提供了confusion_matrix库来快捷的计算出混淆矩阵。
在这里插入图片描述

from sklearn.metrics import confusion_matrix

pipe_svc.fit(X_train, y_train)
y_pred = pipe_svc.predict(X_test)
confmat = confusion_matrix(y_true=y_test, y_pred=y_pred)
print(confmat)

在这里插入图片描述

2、分类模型的精度和召回率

  • 误差(error,ERR):
    E R R = F P + F N F P + T P + F N + T N ERR = \frac{FP+FN}{FP+TP+FN+TN} ERR=FP+TP+FN+TNFP+FN

  • 准确率(accuracy,ACC):
    A C C = T P + T N F P + T P + F N + T N = 1 − E R R ACC = \frac{TP+TN}{FP+TP+FN+TN} = 1-ERR ACC=FP+TP+FN+TNTP+TN=1ERR

  • 真正率(TPR)和假正率(FPR),对非平衡分类问题特别有效的性能指标
    F P R = F P N = F P F P + T N FPR = \frac{FP}{N} = \frac{FP}{FP+TN} FPR=NFP=FP+TNFP
    T P R = T P P = T P F N + T P TPR = \frac{TP}{P} = \frac{TP}{FN+TP} TPR=PTP=FN+TPTP

  • 精度(PRE)和召回率(REC)
    P R E = T P F P + T P PRE = \frac{TP}{FP+TP} PRE=FP+TPTP
    R E C = T P R = T P F N + T P REC = TPR = \frac{TP}{FN+TP} REC=TPR=FN+TPTP

  • 对类别不均衡数据,常见的处理方式

    • 对少数类的错误预测给予更大的惩罚
    • 对少数类上采样
    • 对多数类下采样
    • 生成合成训练样本
from sklearn.metrics import precision_score, recall_score, f1_score

print('Precision: %.3f' % precision_score(y_true=y_test, y_pred=y_pred))
print('Recall: %.3f' % recall_score(y_true=y_test, y_pred=y_pred))
print('F1: %.3f' % f1_score(y_true=y_test, y_pred=y_pred))

在这里插入图片描述

3、ROC曲线与AUC

*ROC曲线(Receiver Operating Characteristic,受试者工作特征)是选择分类模型的有用工具,以FPR和TPR的性能比较结果为依据,通过移动分类器的阈值完成计算,可以计算ROC曲线下面积(AUC, Area Under the Curve)来描述分类模型的性能。如果分类器性能在对角线以下,说明性能比随机猜测还要差。tpr为1,fpr为0的完美分类器落在曲线的左上角。

from sklearn.metrics import roc_curve, auc
from distutils.version import LooseVersion as Version
from scipy import __version__ as scipy_version
import numpy as np
from sklearn.model_selection import StratifiedKFold
import matplotlib.pyplot as plt

if scipy_version >= Version('1.4.1'):
    from numpy import interp
else:
    from scipy import interp


pipe_lr = make_pipeline(StandardScaler(),
                        PCA(n_components=2),
                        LogisticRegression(penalty='l2', 
                                           random_state=1,
                                           solver='lbfgs',
                                           C=100.0))

X_train2 = X_train[:, [4, 14]]
    

cv = list(StratifiedKFold(n_splits=3).split(X_train, y_train))

fig = plt.figure(figsize=(7, 5))

mean_tpr = 0.0
mean_fpr = np.linspace(0, 1, 100)
all_tpr = []

for i, (train, test) in enumerate(cv):
    probas = pipe_lr.fit(X_train2[train],
                         y_train[train]).predict_proba(X_train2[test])

    fpr, tpr, thresholds = roc_curve(y_train[test],
                                     probas[:, 1],
                                     pos_label=1)
    mean_tpr += interp(mean_fpr, fpr, tpr)
    mean_tpr[0] = 0.0
    roc_auc = auc(fpr, tpr)
    plt.plot(fpr,
             tpr,
             label='ROC fold %d (area = %0.2f)'
                   % (i+1, roc_auc))

plt.plot([0, 1],
         [0, 1],
         linestyle='--',
         color=(0.6, 0.6, 0.6),
         label='Random guessing')

mean_tpr /= len(cv)
mean_tpr[-1] = 1.0
mean_auc = auc(mean_fpr, mean_tpr)
plt.plot(mean_fpr, mean_tpr, 'k--',
         label='Mean ROC (area = %0.2f)' % mean_auc, lw=2)
plt.plot([0, 0, 1],
         [0, 1, 1],
         linestyle=':',
         color='black',
         label='Perfect performance')

plt.xlim([-0.05, 1.05])
plt.ylim([-0.05, 1.05])
plt.xlabel('False positive rate')
plt.ylabel('True positive rate')
plt.legend(loc="lower right")

plt.tight_layout()
# plt.savefig('images/06_10.png', dpi=300)
plt.show()

在这里插入图片描述

二、有监督-回归模型

1、均方误差MSE

一个有用的模型性能度量是 均方误差(MSE)它仅仅是为了拟合线性回归模型二将SSE代价平均值最小化的结果。
M S E = 1 n ∑ i = 1 n ( y ( i ) − y ^ ( i ) ) 2 MSE = \frac{1}{n}\sum_{i=1}^{n}(y^{(i)} - \hat y^{(i)})^2 MSE=n1i=1n(y(i)y^(i))2

SSE(error sum of squares)为残差平方和,即拟合数据和原始数据对应点的误差的平方和 S S E = ∑ i = 1 n ( y ( i ) − y ^ ( i ) ) 2 SSE = \sum_{i=1}^{n}(y^{(i)} - \hat y^{(i)})^2 SSE=i=1n(y(i)y^(i))2
残差:线性回归可以理解为通过采样点找到最佳拟合直线,如图所示,这条最佳拟合线也被称为回归线,从回归线到样本点的垂直线就是所谓的偏移(offset)或残差(residual)——预测的误差。在这里插入图片描述

2、 R 2 R^2 R2决定系数

MSE的大小取决于特征缩放,比如,如果房价用K为单位做了缩放,得出的MSE与未做缩放的原值相比更低。比如 ( 10 k − 15 k ) 2 < ( 10000 − 15000 ) 2 (10k-15k)^2<(10000-15000)^2 10k15k)2<(1000015000)2。这点与分类模型的准确率等指标不同。
R 2 R^2 R2可以理解为修正版的MSE,对于训练集, R 2 R^2 R2的取值在0-1之间,但它也可能是负值。

R 2 R^2 R2的定义如下:
R 2 = 1 − S S E S S T R^2 = 1-\frac{SSE}{SST} R2=1SSTSSE
SST是观测到的真实值真实值的均值之间的差的平方和。 μ y μ_y μy是真实值的均值
S S T = ∑ i = 1 n ( y ( i ) − μ y ) 2 SST = \sum_{i=1}^{n}(y^{(i)} - μ_y)^2 SST=i=1n(y(i)μy)2

3、回归模型代码示例

以波士顿住房数据集为例子
前置数据导入工作

import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/rasbt/'
                 'python-machine-learning-book-3rd-edition/'
                 'master/ch10/housing.data.txt',
                 header=None,
                 sep='\s+')

df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 
              'NOX', 'RM', 'AGE', 'DIS', 'RAD', 
              'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
df.head()

在这里插入图片描述

from sklearn.model_selection import train_test_split

X = df.iloc[:, :-1].values
y = df['MEDV'].values

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0)

slr = LinearRegression()

slr.fit(X_train, y_train)
y_train_pred = slr.predict(X_train)
y_test_pred = slr.predict(X_test)

from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error

print('MSE train: %.3f, test: %.3f' % (
        mean_squared_error(y_train, y_train_pred),
        mean_squared_error(y_test, y_test_pred)))

MSE train: 19.958, test: 27.196

说明:训练数据的MSE为19.96,测试数据的MSE为27.20,测试数据的MSE比较大,这是模型过拟合训练数据的标志。

print('R^2 train: %.3f, test: %.3f' % (
        r2_score(y_train, y_train_pred),
        r2_score(y_test, y_test_pred)))

R^2 train: 0.765, test: 0.673

三、无监督模型

无监督模型其实已经写在了我之前的一篇文章中,反作弊中的无监督算法2_聚类的4种方式及典型算法,为了方便,我粘贴过来

1、kmeans求解最优k值的方法:轮廓系数、肘部法

参考文章:https://www.jianshu.com/p/335b376174d4
1)轮廓系数
计算集群内聚度,即样本与同一集群内所有其他点之间的平均距离
计算集群分离度,样本与最近集群内所有样本之间的平均距离
轮廓系数,计算集群内聚度 与集群分离度之差,除以两者中较大那一个。

2)肘部法:
随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。
当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数

2、GMM的最优组件个数:AIC 和 BIC

https://zhuanlan.zhihu.com/p/81255623
为了确定最优组件的个数,需要使用一些分析标准来调整模型可能性。模型中封装了Akaike information criterion (AIC) 或 Bayesian information criterion (BIC)两种评价方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/407904.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Vue3】‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

问题 今天拿到别人项目的时候&#xff0c;我平时比较习惯用pnpm&#xff0c;我就使用pnpm i先下载依赖包&#xff0c;下载完成后&#xff0c;启动项目&#xff0c;就开始报以下错误&#xff01; 但是当我执行pnpm i的时候&#xff0c;vite不应该就已经被我下载下来了吗 研究了…

线程共享和非共享的资源及线程优缺点

注意&#xff1a;共享的内存地址空间中不包括栈&#xff1b;共享文件描述符表&#xff0c;表示&#xff0c;同一进程中线程可以操作同一文件。

【机器学习】特征工程之特征选择

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

【ubuntu】永久修改主机名

文章目录 1. 问题描述2. 解决方案 1. 问题描述 主机名过长&#xff08;后面的部分&#xff09; 2. 解决方案 查看主机名详情 hostnamectl修改指定主机名 hostnamectl set-hostname ubuntu2204 --static登出重进即可

基于java+springboot+vue实现的美食信息推荐系统(文末源码+Lw)23-170

1 摘 要 使用旧方法对美食信息推荐系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在美食信息推荐系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发…

虚拟机安装Docker装载Mysql

目录 1.安装docker 2. docker中安装mysql 1.选择mysql镜像 2.查看镜像 3.启动mysql 4.修改配置 5.进入容器查看配置&#xff1a; 6.设置启动docker时&#xff0c;即运行mysql 1.安装docker SSH 登录到虚拟机: 使用MobaXterm或其他SSH客户端连接到虚拟机&#xff1a; ss…

前后端延迟怎么解决

当今互联网应用的发展越来越迅猛&#xff0c;用户对于网站或应用的性能要求也越来越高。其中一个重要方面就是前后端延迟的解决&#xff0c;也就是减少前端与后端之间的通信时间延迟&#xff0c;提高用户体验。本文将详细介绍如何解决前后端延迟的问题。 网络延迟 数据在网络…

JavaSec 基础之 XXE

文章目录 XMLReaderSAXReaderSAXBuilderDocumentBuilderUnmarshaller**SAXParserFactory**XMLReaderFactoryDigester总结 XMLReader public String XMLReader(RequestBody String content) {try {XMLReader xmlReader XMLReaderFactory.createXMLReader();// 修复&#xff1a…

QoS 服务质量

服务质量 QoS (Quality of Service) 服务质量可用若干基本性能指标来描述&#xff0c;包括&#xff1a;可用性、差错率、响应时间、吞吐量、分组丢失率、连接建立时间、故障检测和改正时间等。 服务提供者可向其用户保证某一种等级的服务质量。 服务性能的总效果&#xff0c;…

Servlet(2)

文章目录 更方便的部署方式安装 Smart Tomcat 插件配置 Smart Tomcat 插件 访问出错怎么办出现 404出现 405出现 500出现 "空白页面"出现 "无法访问此网站" 小结 更方便的部署方式 手动拷贝 war 包到 Tomcat 的过程比较麻烦. 我们还有更方便的办法. 此处我…

算法——排序算法

目录 1、冒泡排序 2、插入排序 3、选择排序 4、归并排序 5、快速排序 6、堆排序 7、计数排序 8、桶排序 9、基数排序 常见的排序算法包括&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;选择排序&#xff08;Se…

2023年海南房地产经纪机构备案需要具备哪些条件?

房地产业在海南占有非常重要的地位。 同样&#xff0c;海南也有很多房地产中介机构。 那么&#xff0c;2023年海南房产中介登记证如何办理呢&#xff1f; 海南房产中介注册需要什么条件&#xff1f; 办理海南房产中介机构登记需要提交哪些材料&#xff1f; ……今天博宇会计小编…

神经网络系列---归一化

文章目录 归一化批量归一化预测阶段 测试阶段γ和β&#xff08;注意&#xff09;举例 层归一化前向传播反向传播 归一化 批量归一化 &#xff08;Batch Normalization&#xff09;在训练过程中的数学公式可以概括如下&#xff1a; 给定一个小批量数据 B { x 1 , x 2 , … …

读人工不智能:计算机如何误解世界笔记02_Hello,world

1. Hello&#xff0c;world 1.1. “Hello&#xff0c;world”是布赖恩克尼汉和丹尼斯里奇于1978年出版的经典著作《C程序设计语言》中的第一个编程项目 1.2. 贝尔实验室可以说是现代计算机科学界中的智库&#xff0c;地位好比巧克力界的好时巧克力 1.3. 计算机科学界的大量创…

【大厂AI课学习笔记NO.53】2.3深度学习开发任务实例(6)数据采集

这个系列写了53期了&#xff0c;很多朋友收藏&#xff0c;看来还是觉得有用。 后续我会把相关的内容&#xff0c;再次整理&#xff0c;做成一个人工智能专辑。 今天学习到了数据采集的环节。 这里有个问题&#xff0c;数据准备包括什么&#xff0c;还记得吗&#xff1f; 数…

Linux之ACL权限chmod命令

一. chmod命令 chmod命令来自英文词组change mode的缩写&#xff0c;其功能是改变文件或目录权限的命令。默认只有文件的所有者和管理员可以设置文件权限&#xff0c;普通用户只能管理自己文件的权限属性。 设置权限时可以使用数字法&#xff0c;亦可使用字母表达式&#xff0…

2.5G/5G/10G高速率网络变压器(网络隔离变压器)产品介绍(1)

Hqst华轩盛(石门盈盛)电子导读&#xff1a;高速率/2.5G 的带POE插件&#xff08;DIP&#xff09;款千兆双口网络变压器2G54801DP特点 一 ﹑2.5G高速率网络变压器&#xff08;网络隔离变压器&#xff09;&#xff1a;2G54801DP外观与尺寸 2G54801DP这颗产品尺寸为&#xff1a;长…

Vue.js+SpringBoot开发超市商品管理系统

目录 一、摘要1.1 简介1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 超市区域模块2.3 超市货架模块2.4 商品类型模块2.5 商品档案模块 三、系统设计3.1 用例图3.2 时序图3.3 类图3.4 E-R图 四、系统实现4.1 登录4.2 注册4.3 主页4.4 超市区域管理4.5 超市货架管理4.6 商品类型…

C语言——结构体——(第21篇)

坚持就是胜利 文章目录 一、结构体类型的声明1、结构的基础知识2、结构的声明3、结构成员的类型 二、结构体变量的定义和初始化结构体中包含结构体 三、结构体成员访问问题一&#xff1a;t.name "张三"&#xff0c;对吗&#xff1f;问题二&#xff1a;set_Stu(s);应…

【深度学习目标检测】十九、基于深度学习的芒果计数分割系统-含数据集、GUI和源码(python,yolov8)

使用深度学习算法检测芒果具有显著的优势和应用价值。以下是几个主要原因&#xff1a; 特征学习的能力&#xff1a;深度学习&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;能够从大量的芒果图像中自动学习和提取特征。这些特征可能是传统方法难以手动…