模型评估方式

文章目录

  • 一、有监督-分类模型
    • 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_pipelinepipe_svc = make_pipeline(StandardScaler(),SVC(random_state=1))

1、混淆矩阵

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

from sklearn.metrics import confusion_matrixpipe_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_scoreprint('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 pltif scipy_version >= Version('1.4.1'):from numpy import interp
else:from scipy import interppipe_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.0roc_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 pddf = 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_splitX = df.iloc[:, :-1].values
y = df['MEDV'].valuesX_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_errorprint('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)两种评价方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue+SpringBoot打造快递管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快递区域模块2.4 快递货架模块2.5 快递档案模块 三、界面展示3.1 登录注册3.2 快递类型3.3 快递区域3.4 快递货架3.5 快递档案3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 …

vue3中ref创建变量取值时自动补充 .value 插件 volar

插件 TypeScript Vue Plugin (Volar) 设置中配置

进阶了解C++(2)——复杂的继承及其底层原理

在上篇文章中&#xff0c;给出了关于继承这部分的相关知识&#xff0c;例如继承的定义&#xff0c;继承与默认成员函数等。本文将针对复杂的继承方式&#xff0c; 1. 复杂的继承方式&#xff1a; 1.1 单继承&#xff1a; class Professor { public:int _age;string _name; }…

Windows安装HBuilderX

下载 HBuilderX下载地址: 下载地址 解压安装包 HBuilderX&#xff0c;Windows为zip包&#xff0c;解压后才能使用。 首先&#xff0c;选中下载的zip包&#xff0c;点击右键菜单&#xff0c;点击解压到当前文件夹进入解压后的文件夹&#xff0c;找到HBuilderX.exe&#xff0…

计算机组成原理(13)-----硬件多线程

目录 1.细粒度多线程 2.粗粒度多线程 3.同时多线程&#xff08;SMT&#xff09; 在不支持硬件多线程的处理器中&#xff0c;若要进行线程的切换&#xff0c;就需要保存和恢复线程的运行环境&#xff08;否则会出现数据覆盖引起的错误&#xff09;。 但在支持硬件多线程的处…

Android java中包的使用

一.包的使用 为了更好的实现项目中类的管理&#xff0c;提供包的概念。 package语句作为Java源文件的第一条语句&#xff0c;指明该文件中定义的类所在的包。(若缺省该语句&#xff0c;则指定为无名包)。 它的格式为&#xff1a;package 顶层包名.子包名 ; 二.java中主要的包…

算法分析-面试1-字符串

文章目录 前言一、分类&#xff1a;看看就行了二、字符串API&#xff1a;创建和初始化&#xff1a;查询操作&#xff1a;比较操作&#xff1a;修改操作&#xff1a;截取操作&#xff1a;分割操作&#xff1a;格式化操作&#xff1a;连接操作&#xff08;Java 8 及以后&#xff…

Delphi 11 安卓的蓝牙权限申请

上一篇博客里面的代码&#xff0c;演示如何申请安卓的权限。 如何申请安卓的蓝牙权限&#xff1f; 本博客之前有一篇文章写过。 现在 Google 要求 Android API Level 必须是 33。对于 BLE 的权限申请&#xff0c;有了一些新的要求。 以下描述&#xff0c;基于 Delphi 11。 …

vue页面基本增删改查

练手项目vue页面 新手前端轻喷&#xff1a; 效果如下 1、2两个部分组成&#xff1a; 对应代码中 element-ui中的 el-form 和 el-table 照着抄呗&#xff0c;硬着头皮来&#xff01; 建议&#xff1a;认真读一遍你用的组件 那上边简单得列表举例&#xff1a; 建议大家手敲一个…

Unity与Android交互通信系列(5)

在前述文章中&#xff0c;已经使用了AndroidJavaProxy代理接口&#xff0c;本节我们将详细的介绍AndroidJavaProxy代理的用法。正如其名&#xff0c;AndroidJavaProxy是一个代理&#xff0c;它在Android端代码与Unity端代码交互中起一个桥接作用。其一般用法为在Java代码中定义…

【深度学习】主要提出者【Hinton】中国大会最新演讲【通往智能的两种道路】

「但我已经老了&#xff0c;我所希望的是像你们这样的年轻有为的研究人员&#xff0c;去想出我们如何能够拥有这些超级智能&#xff0c;使我们的生活变得更好&#xff0c;而不是被它们控制。」 6 月 10 日&#xff0c;在 2023 北京智源大会的闭幕式演讲中&#xff0c;在谈到如…

一键生成PDF即刻呈现:轻松创建无忧体验

在信息爆炸的时代&#xff0c;我们每天都在与各种文件、资料打交道。无论是工作中的报告、合同&#xff0c;还是学习中的笔记、论文&#xff0c;如何高效、安全地管理这些珍贵的资料&#xff0c;成为了我们迫切的需求。幸运的是&#xff0c;随着科技的发展&#xff0c;我们不再…

SpringBoot Admin 详解

SpringBoot Admin 详解 一、Actuator 详解1.Actuator原生端点1.1 监控检查端点&#xff1a;health1.2 应用信息端点&#xff1a;info1.3 http调用记录端点&#xff1a;httptrace1.4 堆栈信息端点&#xff1a;heapdump1.5 线程信息端点&#xff1a;threaddump1.6 获取全量Bean的…

【Python笔记-设计模式】享元模式

一、说明 享元模式是一种结构型设计模式&#xff0c;它摒弃了在每个对象中保存所有数据的方式&#xff0c;通过共享多个对象所共有的相同状态&#xff0c;让你能在有限的内存容量中载入更多对象。 (一) 解决问题 旨在减少大量相似对象创建时的内存开销 (二) 使用场景 大量…

AI:136-基于深度学习的图像生成与风格迁移

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

微服务三十五关

1.微服务有什么好处&#xff1f; 微服务优点很多&#xff0c;但是我们通常说一个东西好肯定会跟另一个东西比较&#xff0c; 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处&#xff1a; 首先&#xff0c;让我们讨论单体项目的一些主要缺点&a…

在线程调用的函数中使用pthread_exit同样会将线程退出

如上图所示&#xff0c;在func()函数中调用pthread_exit&#xff0c;同样可以退出当前线程&#xff1b; 类似的&#xff0c;如果func&#xff08;&#xff09;函数中调用exit&#xff0c;可以直接退出整个进程。 return 是返回到函数调用处&#xff1b; pthread_exit是退出…

KTV点歌系统vue+springboot音乐歌曲播放器系统

目前现有的KTV点歌系统对于用户而言其在线点歌流程仍然过于繁琐&#xff0c;对于歌曲而言其系统安全性并不能保障。同时整套系统所使用的技术相对较为落后&#xff0c;界面不能动态化展示。相比较于其它同类型网站而言不能体现技术先进性。 1.2 项目目标 KTV点歌系统的后台开发…

wpf 3d 后台加载模型和调整参数

下载了一个代码&#xff0c;加载obj模型&#xff1b;它的参数在xaml里&#xff0c;模型加载出来刚好&#xff1b; 然后加载另一个obj模型&#xff1b;加载出来之后大&#xff0c;偏到很高和左的位置&#xff1b; 它之前的摄像机位置&#xff0c; Position"9.94759830064…

Apache celeborn 安装及使用教程

1.下载安装包 https://celeborn.apache.org/download/ 测0.4.0时出现https://github.com/apache/incubator-celeborn/issues/835 2.解压 tar -xzvf apache-celeborn-0.3.2-incubating-bin.tgz 3.修改配置文件 cp celeborn-env.sh.template celeborn-env.shcp log4j2.xml.…