《机器学习》 AUC性能测试、回归树、随机森林

news2024/11/12 11:19:28

目录

一、AUC性能测试

1、什么是AUC

2、什么是AUC-ROC曲线

1)TPR、FPR

• TPR:真实值为1,预测值为1的概率

• FPR:真实值为0,预测值为1的概率

2)如何绘制图示曲线

3、最理想的AUC-ROC曲线图

4、案例实现

运行结果展示:

二、回归树

1、什么是回归树

2、特点

3、案例

1)计算最优切分点

2)计算损失值

• 以切分点为1.5计算损失值

• 以其余点为切分点分别计算损失值:

3)二维数据的决策树划分

4、库、参数解析

        1.criterion

        2.splitter

        3.max_depth

        4. min_samples_split 

        5. min_samples_leaf 

        6. max_leaf_nodes

        7、一些方法:

5、代码实现


一、AUC性能测试

1、什么是AUC

        AUC(Area Under Curve)是一种常用的性能指标,用于评估分类模型的性能。在机器学习中,AUC通常是用来评估二分类模型(如逻辑回归、支持向量机等)的预测质量。

        在机器学习中,性能测量是一项基本任务,因此,当涉及到分类问题时,问哦们可以依靠AUC-ROC曲线,当我们需要检查可视化多类分类问题的性能时,我们使用AUC(曲线下的面积)ROC(接收接收器工作特性)曲线,他是检查任何分类模型性能的最重要评估指标之一。

2、什么是AUC-ROC曲线

        ROC曲线是一个将真阳性率(True Positive Rate,TPR)(也称为灵敏度)对假阳性率(False Positive Rate,FPR)(也称为1-特异度)进行绘制的曲线真阳性率是指在正样本中被正确预测为正样本的比例,假阳性率是指在负样本中被错误预测为正样本的比例

        AUC代表了ROC曲线下的面积,其取值范围在[0,1]之间。AUC越大,代表模型性能越好。当AUC等于1时,表示模型完美预测正负样本,而当AUC等于0.5时,代表模型的预测能力与随机猜测无异。

AUC-ROC曲线图如下所示(AUC是曲线所围面积,ROC为这个曲线):

1)TPR、FPR

        如上图可知AUC-ROC曲线的横纵坐标对应的值为FPR和TPR,那么这两个值是什么呢,看下图:

• TPR:真实值为1,预测值为1的概率

相当于如下混淆矩阵对应召回率:

• FPR:真实值为0,预测值为1的概率

相当于如下概率,即真实值为0,预测错了的概率

2)如何绘制图示曲线

        有了上述 tpr 和 fpr 的计算方法,我们就可以找到对应的点,那么如果去更改这个模型的阈值,是不是又会有一新的 tpr 和 fpr 值,所以这个曲线就是通过tpr、fpr以及阈值去共同构建的。

3、最理想的AUC-ROC曲线图

        如下图所示,即不管 fpr真实值为0,预测错了的概率为多少,tpr 真实值为1,预测对了的概率全是1,此时AUC对应的面积为1

4、案例实现

        同样是上节课所说的电信客户流失那份数据,对上节课代码进行优化后的状态

import pandas as pd

datas = pd.read_excel("电信客户流失数据.xlsx")  # 导入数据

data = datas.iloc[:,:-1]   # 取出特征数据以及标签数据
target = datas.iloc[:,-1]

# 数据切分测试集训练集
from sklearn.model_selection import train_test_split
data_train,data_test,target_train,target_test = train_test_split(data,target,test_size=0.2,random_state=42)

# 定义决策树
from sklearn import tree
# 建立决策树模型,并对其进行训练
dtr = tree.DecisionTreeClassifier(criterion='gini' , max_depth=8 , random_state=42) # 设置计算方式为gini系数计算,最大层数为8层,随机种子设置为42
dtr.fit(data_train,target_train)  # 对训练集数据进行训练
# 预测数据
train_predicted = dtr.predict(data_train)

# 对测试集 打印分类报告
from sklearn import metrics
print(metrics.classification_report(target_train,train_predicted))
# 对原始数据测试,并打印报告
predict = dtr.predict(data)
print(metrics.classification_report(target, predict))
# 对随机切分的数据打印报告
predict1 = dtr.predict(data_test)
print(metrics.classification_report(target_test,predict1))

# AUC值计算
y_pred_proba = dtr.predict_proba(data_test)  # 打印各类别概率
a = y_pred_proba[:,1]  # 取出类别为1的一列

auc_result = metrics.roc_auc_score(target_test,a)  # 输入参数测试集标签、测试集概率,计算AUC值


# 绘制AUC-ROC曲线
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve

# 计算不同预阈值情况下的fpr tpr thresholds为阈值
fpr,tpr,thresholds = roc_curve(target_test,a)  # 输入参数测试集标签和概率,计算fpr、tpr、阈值


plt.figure()  # 创建一个画布
plt.plot(fpr,tpr,color='darkorange',lw=2,label=f'ROC curve{auc_result:0.2f}')  # x轴为fpr,y轴为tpr,图像颜色为深橘色,线宽度为2,提示标签为后面对应的字符串
plt.plot([0,1],[0,1])  # x轴y轴范围
plt.xlim([0.0,1.0])  # 刻度
plt.ylim([0.0,1.05])
plt.xlabel("False Positive Rate")   # 提示信息
plt.ylabel('True Positive Rate')
plt.title("Receiver Operating Characteristic")   # 标题信息
plt.legend()   
plt.show()
运行结果展示:

        此时预测的结果正确率为0.7,比上节课的高,但是还不够,还需要对其进行优化,看接下来的讲解。

二、回归树

1、什么是回归树

        用于解决回归问题的决策树模型。它是一种基于树结构的非参数模型,能够将输入特征空间划分为多个不同的区域,并为每个区域分配一个对应的输出值。

        回归树的建模过程从根节点开始,选择一个最佳的特征和切分点,将数据划分为两个子集。然后,递归地对每个子集进行相同的划分操作,直到达到预设的停止条件。在每个叶节点上,使用该节点中的数据样本的平均值作为预测值。

2、特点

  1. 非参数性:回归树是一种非参数模型,它不对数据的分布做出特定的假设。这使得回归树能够更灵活地适应不同类型的数据。

  2. 可解释性:回归树生成的模型易于理解和解释。通过观察树的结构和叶节点的取值,可以直观地理解模型在不同特征值上的划分和预测。

  3. 鲁棒性:回归树对异常值和缺失值具有较好的鲁棒性。由于回归树是基于样本的平均值进行预测,个别异常值对模型的影响较小。

  4. 非线性建模能力:回归树可以自适应地捕捉数据中的复杂非线性关系。通过多层划分,回归树可以对特征空间进行细致的划分,从而较好地拟合非线性模式。

  5. 高效性:在预测阶段,回归树的计算成本相对较低。它只需要根据输入特征的取值进行简单的比较操作,即可得到预测结果。

  6. 必须是二叉树

3、案例

有如下数据:

1)计算最优切分点
        因为只有一个变量,所以切分变量必然是x,可以考虑如下9个切分点:
        [1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5],如下图所示

2)计算损失值

公式:

        有了上述切分点,此时变要对其计算损失值,这里的c为平均值,c1为计算前一部分平均值,c2为计算后一部分损失值,y为标签的值

• 以切分点为1.5计算损失值

        当s=1.5时,将数据分为两个部分:

        第一部分:(1,5.56)

        第二部分:(2,5.7)、(3,5.91)、(4,6.4)…(10,9.05)

        所以可以得出切分点为 1.5 损失值 Loss

        C1=5.56

        C2=1/9(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)=7.5

        Loss = (5.56-5.56)^2 + (5.7-7.5)^2+(5.91-7.5)^2+…+(9.05-7.5)^2 =0+15.72 =15.72

• 以其余点为切分点分别计算损失值:

        可以得到如下数据:

可以看出,s=6.5 时,loss的值最小,所以第一个划分点 s = 6.5,画出如下结果:

由此依次对另外部分数据单独再继续求损失值,可得到如下结果,然后在对比求得下面的划分点,

此时可得到:
        <1>当s=3.5时,loss=0.2771最小,所以第一个划分点s=3.5。
        <2>当s=8.5时,loss=0.021最小,所以第二个划分点s=8.5。

因为输的深度限制为2层,(根节点不算第一层)所以得到以下图形:

最后一层叶子节点的值为每一部分的平均值

3)二维数据的决策树划分

例如有如下数据:

        可以发现此时1.2最小,所以取 x1=1 为第一个切分点,和上述一致,小于1为一个分支,大于1为一个分支,此时得到下列图形,然后再对各项再重复上述步骤即可得到下一层数据

4、库、参数解析

class sklearn.tree.DecisionTreeRegressor(criterion=’mse’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort=False)[source]
        1.criterion

                节点分裂依据。默认:mse,可选择·mae(平均绝对误差)->使用绝对值

        2.splitter

                默认best表示以最优的方式切分节点

        3.max_depth

                树的最大深度。过深的树可能导致过拟合,通过交叉验证来进行选择

        4. min_samples_split 

                默认值是2. 分裂一个内部节点需要的最小样本数,含义与分类相同

        5. min_samples_leaf 

                默认值是1,叶子节点最少样本数,含义与分类相同

        6. max_leaf_nodes

              设置最多的叶子节点个数,达到要求就停止分裂,控制过拟合,设置此参数之后max_depth失效

        7、一些方法:
  1. apply : 返回预测每个样本的叶子的索引
  2. decision_path: 返回树中的决策路径
  3. get_depth: 获取树的深度
  4. get_n_leaves: 获取树的叶子节点数
  5. get_params: 获取此估计器的参数,即前面配置的全部参数信息
  6. score: 得到决策树的评判标准R2

5、代码实现

多元线性回归文件内容如下:

import pandas as pd
from sklearn import tree
# 使用pandas导入csv文件
data = pd.read_csv("多元线性回归.csv",encoding='gbk')

x = data.iloc[:,:-1]  # 选择特征数据集和标签集
y = data.iloc[:,-1]

# 导入模型并对其进行训练
reg = tree.DecisionTreeRegressor()
reg = reg.fit(x,y)
# 对原始数据进行预测
y_pr = reg.predict(x)
print(y_pr)

# 这里的score求的是R方的值,二维的用R方,多元的用调整R方 ,求概率 ,回归是线性的,分类是离散的
score = reg.score(x,y)
print(score)

输出结果为:

由于数据量特别少,所以测试出来百分之99的概率被四舍五入成了100%

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

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

相关文章

C语言占领游戏

目录 开头程序程序的流程图程序的效果结尾 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <Windows.h> void pri…

C语言 自定义类型-结构体 #结构体类型的声明 #结构体的自引用 #结构体内存对齐 #结构体位段的实现

文章目录 前言 一、结构体类型的声明 1、结构体的基础知识 2、结构体的声明 3、特殊声明 二、结构体的自引用 三、结构体变量的定义和初始化 1、结构体的定义分为两类 2、结构体的初始化 四、结构体内存对齐 1、结构体在内存中是怎样存放的呢&#xff1f; 2、结构体的对齐规则&…

数字卫星:「超实时仿真」实现处理器性能5倍提升

01.数字孪生in卫星 卫星及其附属系统在航天领域具有十分重要的意义。近年来&#xff0c;卫星产业发展迅猛&#xff0c;数字化、网络化、智能化、服务化转型升级需求日益增长。为进一步完善星务软件验证工作、获取在轨卫星模拟数据&#xff0c;“数字卫星”成为当下主流趋势。 …

考研数学快9月了才开始强化,《660》《880》哪本优先?

快9月了&#xff0c;如果你刚开始强化&#xff0c;那要抓点紧了&#xff01; 很多使用660880这两本习题册的同学提问&#xff1a;《660》《880》哪本优先&#xff1f; 其实&#xff0c;不管先做那本&#xff0c;都一样&#xff0c;做题的目的是为了查缺补漏&#xff0c;而不是…

一起学Java(5)-[起步篇]教你掌握本协作项目中的Gralde相关配置文件(下)

接上篇《一起学Java(4)-java-all-in-one协作项目相关文件研究&#xff08;Gradle篇-上&#xff09;》&#xff0c;本文继续研究项目中Gradle相关文件。 全文详见个人独立博客&#xff1a;https://www.coderli.com/java-go-5-project-config-files-intro-gradle-two/ 一起学Ja…

ACCESS 手工注入实战 凡诺靶场

简介 Access数据库注入攻击是一种常见的网络安全&#xff0c;通过注入SQL代码来获取未授权的数据访问权限。这种攻击利用了应用程序与数据库之间的交互漏洞&#xff0c;攻击者通过输入特定的SQL代码片段来操纵数据库查询&#xff0c;从而绕过应用程序的安全机制&#xff0c;获取…

R 语言学习教程,从入门到精通,R 绘图饼图(22)

1、R 绘图 饼图 R 语言提供来大量的库来实现绘图功能。 饼图&#xff0c;或称饼状图&#xff0c;是一个划分为几个扇形的圆形统计图表&#xff0c;用于描述量、频率或百分比之间的相对关系。 R 语言使用 pie() 函数来实现饼图&#xff0c;语法格式如下&#xff1a; pie(x, la…

软件测试——IDEA2023配置assert断言

IDEA2023配置assert断言 vm options输入框 输入以下内容 -ea -Dfile.encodingUTF-8 点击APPLY OK

js 手写图片懒加载插件

一、目标 模仿vue-lazyload插件 只需将img标签的src属性名替换为自定义属性v-lazy&#xff0c;即可实现图片懒加载功能 例如&#xff1a; 二、实现 不清楚图片懒加载原理的参考我的上一篇博客 1.封装自定义插件&#xff1a;暴露一个对象&#xff0c;包含一个install方法 …

咸鱼之王手游内购修复无bug运营版联网架设+后台

今天给大家带来一款单机游戏的架设&#xff1a;咸鱼之王手游。 另外&#xff1a;本人承接各种游戏架设&#xff08;单机联网&#xff09; 本人为了学习和研究软件内含的设计思想和原理&#xff0c;带了架设教程仅供娱乐。 教程是本人亲自搭建成功的&#xff0c;绝对是完整可…

在Ubuntu 部署 Grafana且监控MySQL数据

一、安装 打开终端按顺序执行以下命令 1.添加 Grafana 的 APT 仓库&#xff1a; sudo apt-get install -y software-properties-common sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" 2.导入Grafana GPG key&#xff1a; wge…

国产光耦合器的应用和优势浅析

光耦合器&#xff0c;也称为光隔离器&#xff0c;是电子领域的关键元件&#xff0c;为系统的不同部分提供必要的电气隔离。在国内半导体行业&#xff0c;高性能光耦合器的开发已成为一个重点关注领域&#xff0c;因为它们广泛应用于各个领域&#xff0c;包括医疗设备、汽车电子…

安泰功率放大器怎么使用

功率放大器是电子电路中的重要组件&#xff0c;用于增加输入信号的幅度&#xff0c;以便驱动各种负载。在不同的应用中&#xff0c;功率放大器有不同的使用方法和技巧。下面安泰电子将介绍功率放大器的基本使用方法&#xff0c;以及一些常见的应用示例。 1.连接电源 首先&#…

创意无限:7 个顶级广告设计软件推荐

在竞争激烈的市场中&#xff0c;一款引人注目的平面广告设计能够为设计师带来显著的业绩提升和收益。然而&#xff0c;除了设计师的专业技能&#xff0c;设计软件的选择同样对广告的最终效果有着不可忽视的影响。本文将介绍几款经过作者亲自测试并极力推荐的平面广告设计软件&a…

安装 podman 与 podman-compose

文章目录 Github官网文档Podman 简介Podman 与 Docker 区别 Podman 安装下载安装&#xff08;推荐&#xff09;brew 安装&#xff08;Mac&#xff09; Podman 虚拟机虚拟机基础rootful 模式 Podman 镜像与容器安装 podman-composedocker-compose.yml Github https://github.co…

秋招突击——8/23——知识补充——反向代理和正向代理——负载均衡算法

文章目录 引言正文正向代理反向代理负载均衡 面试题1、nginx属于七层网络结构中的哪一层&#xff1f;2、Nginx有哪些负载均衡算法3、什么是反向代理&#xff1f;什么是正向代理&#xff1f; 总结 引言 一步一步把以前忘记的计算机网络知识再捡起来&#xff0c;重新整理一遍&am…

Linux线上安装遇到的一些问题

本文目录 一、基于Linux安装php8二、Linux线上连接数据库问题三、关于线上nginx报错问题 一、基于Linux安装php8 首先登录ubuntu系统后运行命令&#xff1a;sudo apt update 更新完之后&#xff0c;安装我们需要的软件&#xff1a; sudo apt install nginx 安装 mysql。运行命…

UneMeta创始人讲述自己在Web3+IP领域创业的心路历程

昨日&#xff0c;UneMeta创始人&#xff0c;Ann_tyrion在X分享了一篇推文&#xff0c;分享了自己在探索Web3与IP产业结合过程中的心路历程&#xff0c;她并没有像很多项目方那样一味的讲述宏大的叙事&#xff0c;而是字里行间透露出对这个行业的探索和不断给自己充实信念&#…

2024最新Python+PyCharm保姆级安装教程【附激活码】

PyCharm 是由捷克的 JetBrains 公司开发的一款强大的 Python 集成开发环境&#xff08;IDE&#xff09;&#xff0c;它为 Python 开发者提供了一个全面的编程工具集&#xff0c;支持从代码编写到代码测试、调试和优化等各个环节 &#xff0c;它支持代码自动完成、代码检查、实时…

多功能秒达工具箱全开源源码,可自部署且完全开源的中文工具箱

简介&#xff1a; 多功能秒达开源工具箱源码&#xff0c;&#xff0c;可自部署且完全开源的中文工具箱&#xff0c;永远的自由软件&#xff0c;轻量级运行&#xff0c;全平台支持&#xff08;包括ARMv8&#xff09;&#xff0c;完全类似 GPT 的支持&#xff0c;与高效的 UI 高…