1、拟合、预测、估算器、管道与模型评估

news/2024/11/17 23:58:37/文章来源:https://www.cnblogs.com/holly8/p/18375018

一、拟合和预测:估算器基础

1.1 资源导入、样本定义和训练

from sklearn.ensemble import RandomForestClassifier  #随机森林分类器
"""
random_state=0
将使用固定的随机数种子(在这个例子中是0)来初始化随机数生成器。
这样,无论你的代码运行多少次,只要数据集和其他参数保持不变,模型的训练过程和结果都将是相同的。
"""
clf = RandomForestClassifier(random_state=0)  
X = [[ 1,  2,  3],  #2个样本,3个特征[11, 12, 13]
]
y = [0, 1]  #每一个样本的类别
clf.fit(X, y) #训练

【输出】:

RandomForestClassifier
RandomForestClassifier(random_state=0)

 

1.2 预测

clf.predict(X)  # 预测训练数据的标签

【输出2】:

array([0, 1])

1.3 新数据预测

clf.predict([[4, 5, 6], [14, 15, 16]])  # 预测新数据的标签

【输出3】:

array([0, 1])

 

【结论】:估算器拟合后,可用于预测新数据的目标值。你无需重新训练估算器

 

二、转换器和预处理器

#StandardScaler主要作用是将数据的均值调整为0,同时将数据的标准差调整为1
from sklearn.preprocessing import StandardScalerX = [[0, 15],[1, -10]]StandardScaler().fit(X).transform(X)
【输出】
array([[-1., 1.],[ 1., -1.]])


【结论】:转换对象没有预测方法,但是需要有一个输出新转换的样本矩阵X的转换方法:

 

三、管道:连接预处理器和估算器

3.1 资源导入、创建管道、数据拆分及训练

#案例:我们加载Iris数据集,将其分为训练集和测试集,然后根据测试数据计算管道的准确性得分:#对数据进行标准化处理标准化是将特征缩放到给定的范围(通常是均值为0,标准差为1)的过程
from sklearn.preprocessing import StandardScaler  # 逻辑回归
from sklearn.linear_model import LogisticRegression  """
make_pipeline 函数可以将多个转换器和估计器(比如 StandardScaler、PCA、LogisticRegression 等)
按照顺序连接起来,形成一个机器学习管道,
make_pipeline 函数自动为每个步骤分配名称(比如第一个步骤会被命名为 standardscaler,第二个步骤会被命名为 pca),
并将它们按照顺序连接起来
"""
from sklearn.pipeline import make_pipeline# 鸢尾花数据集
from sklearn.datasets import load_iris"""
train_test_split函数接收多个参数,其中最重要的参数是原始数据集X和目标变量y,
以及测试集的大小test_size(通常为0.2或0.3)
。函数会根据test_size的比例自动将原始数据集划分为训练集和测试集,
划分是随机进行的,保证了训练集和测试集的样本分布与原始数据集相似。
"""
from sklearn.model_selection import train_test_split#用于计算分类模型的准确率
# 它可以用来计算分类模型在测试集上的准确度,即分类正确的样本数占总样本数的比例
from sklearn.metrics import accuracy_score# 创建一个pipeline对象
pipe = make_pipeline(StandardScaler(),LogisticRegression(random_state=0)
)# 加载鸢尾花数据集并将其切分成训练集和测试集
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)#训练整个pipeline
pipe.fit(X_train, y_train)

【输出】:

 

3.2 计算模型预测准确率

# 我们现在可以像使用其他任何估算器一样使用它,计算模型在测试数据集上的预测准确率。
accuracy_score(pipe.predict(X_test), y_test)

【输出】:

0.9736842105263158


【结论】:管道还可以防止数据泄漏,即在训练数据中泄露一些测试数据。


四、模型评估,即交叉验证

# 创建合成的回归数据集
from sklearn.datasets import make_regression#线性回归用于描述一个连续型因变量和一系列自变量之间的关系
from sklearn.linear_model import LinearRegression"""
(交叉验证)是一种用于评估模型性能的技术
交叉验证通过将数据集分割成多个小部分,然后多次对模型进行训练和验证的过程,
来评估模型的泛化能力和性能。这种方法主要用于防止模型过于复杂而引起的过拟合,
并通过多次进行这个过程来评估模型的泛化性能和稳定性。交叉验证不仅可以帮助评估统计分析、
机器学习算法对独立于训练数据的数据集的泛化能力,还能确保训练集和测试集的比例适当,以满足模型的评估需求。
"""
from sklearn.model_selection import cross_validateX, y = make_regression(n_samples=1000, random_state=0)
lr = LinearRegression()    
result = cross_validate(lr, X, y)  # 默认为5折交叉验证
result['test_score']  # 此处R2得分很高的原因为数据集很简单

【输出】:

array([1., 1., 1., 1., 1.])

【结论】:用一些数据来训练模型并不意味着在一些未知的数据上也能预测得很好,因此需要对模型进行评估

五、自动参数搜索

5.1资源导入,创建随机搜索对象,及完成训练

"""
加利福尼亚的房价数据,房价作为目标变量(target)
这个数据集包含了20640个样本,每个样本有8个属性表示(所有属性值均为数字),
"""
from sklearn.datasets import fetch_california_housing#随机森林回归
from sklearn.ensemble import RandomForestRegressor#随机化搜索,即超参数优化方法
from sklearn.model_selection import RandomizedSearchCV"""
train_test_split函数接收多个参数,其中最重要的参数是原始数据集X和目标变量y,
以及测试集的大小test_size(通常为0.2或0.3)
。函数会根据test_size的比例自动将原始数据集划分为训练集和测试集,
划分是随机进行的,保证了训练集和测试集的样本分布与原始数据集相似。
"""
from sklearn.model_selection import train_test_split#用于生成一个指定范围内的随机整数
from scipy.stats import randintX, y = fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)# 定义要搜索的参数空间
param_distributions = {'n_estimators': randint(1, 5), 'max_depth': randint(5, 10)}# 现在创建一个searchCV 对象然后用数据训练它
search = RandomizedSearchCV(estimator=RandomForestRegressor(random_state=0),n_iter=5,param_distributions=param_distributions,random_state=0)search.fit(X_train, y_train)

【输出】:

 

5.2 保存最佳参数组合

#搜索,最佳参数组合,以便后续使用这些参数来训练模型,或者在模型调优过程中作为参考
# 搜索对象现在就像普通的随机森林估计器一样
# max_depth=9 和 n_estimators=4
search.best_params_  

【输出】:

{'max_depth': 9, 'n_estimators': 4}


5.3 模型性能评估
"""
评估模型的性能
这个函数用于计算模型在测试集上的预测准确率,
即模型对测试数据(X_test,特征数据)进行预测后,与真实标签(y_test)进行比较,
计算预测正确的比例。这种方法适用于分类问题,其中预测结果和真实标签都是类别标签。
准确率是评估分类模型性能的一个基本指标,它反映了模型对未见数据的适应能力。
然而,对于更复杂的评估需求,可能需要计算其他指标,如精确率、召回率和F1分数等,以获得更全面的性能评
"""
search.score(X_test, y_test)
【输出】:
0.735363411343253




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

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

相关文章

DDD精粹速读(一)

1 你需要知道的 - 战略设计 DDD是一种软件设计和构建方法,其重点在于独立于数据持久化等技术问题,准确表达业务规则。 不幸,DDD 对新手来说极具挑战性,部分原因是它有许多独特的概念需要学习。本文我简要介绍这些重要的思想,以便你能自信继续你的 DDD 旅程。 第一部分将侧…

消息队列作用(解耦、异步、削峰)

原文:消息队列作用(解耦、异步、削峰)图详解一、消息队列简介 简单来说,“消息队列”是在消息的传输过程中保存消息的容器。MQ 全称为 Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信。 消…

C++ 链表

1. 前言 链表:不仅存储 当前元素的数据,还存储着 元素排列顺序 2. 正题 2.1 如何存储节点? 我们可以使用 结构体 数组来存储 链表节点 struct Node {int val; // 可以是 string 或其它复杂的类型int nxt; } node[N];Tip: 下标顺序不是单链表顺序val 代表 元素本身,nxt 代表…

WPF 模拟UWP原生窗口样式——亚克力|云母材质、自定义标题栏样式、原生DWM动画 (附我封装好的类)

先看一下最终效果,左图为使用亚克力材质并添加组合颜色的效果;右图为MicaAlt材质的效果。两者都自定义了标题栏并且最大限度地保留了DWM提供的原生窗口效果(最大化最小化、关闭出现的动画、窗口阴影、拖拽布局器等)。接下来把各部分的实现一个个拆开来讲讲。 一、使用窗口材…

Redis学习(一)

1.通用命令keys * del k1 exists k1 expipe k1 ttl k12.String类型String类型的常见命令 set k1 v1 添加键值对 get k1 v1 获得键值对对应的值 mset k1 v1 k2 v2 一次性设置多个值 mget k1 k2 k3 一次性获取多个键值对的值 incr k1 让k1自增 incrby k1 2 按步长2自增 dec…

C# WebSocket Fleck 源码解读

最近在维护公司旧项目,偶然发现使用Fleck实现的WebSocket主动推送功能,(由于前端页面关闭时WebSocket Server中执行了多次OnClone事件回调并且打印了大量的关闭日志,),后来我特地看了源码,这里做一些分享 github: https://github.com/statianzo/Fleck在源码中,作者在 Sam…

SuperCLUE整理

参考信息: git:https://github.com/CLUEbenchmark/SuperCLUE 官网:https://www.cluebenchmarks.com/superclue.html 23年7月论文 :https://arxiv.org/pdf/2307.15020: 24年4月报告:https://www.cluebenchmarks.com/superclue_2404 24年7月报告:https://www.cluebenchmar…

20240819编译 链接 单片机执行的第一个语句

2024年8月中旬在宝鸡出差,在B站上学习了下。 在linux操作系统中,gdb是调试器,gcc是编译器。 Linux 操作系统 将main.elf文件加载到内存中以后,操作系统为其分配进程,然后main函数就开始执行了。输入 layout asm 则显示出来汇编代码 键入 “starti”的时候 进入到程序里面的…

回溯part02

今天继续学习了回溯:组合求和的进阶 元素可以重复使用:backtracking(candidates, target, sum, i); // 不用i+1了,表示可以重复读取当前的数 数组去重:首先数组排序,然后使用used 分割回文子串问题,抽象为组合问题,注意如何判断是否是回文子串5. 39 组合总和(元素可重复…

2.系统定时器

系统定时器SYSTEM文件夹介绍1,sys文件夹介绍sys_nvic_set_vector_table():设置中断向量表地址sys_intx_enable():开启所有中断sys_intx_disable():关闭所有中断(但是不包括fault和NMI中断)sys_wfi_set():执行: WFI指令(执行完该指令进入低功耗状态)sys_standby():进入待机…

Terraform - 初解Terraform - 安装

开发环境配置 Note:安装环境为windows系统64位笔记本电脑 1.安装适用于 Windows 的 Terraform: https://developer.hashicorp.com/terraform/install 2.下载 Terraform: https://releases.hashicorp.com/terraform/1.9.4/terraform_1.9.4_windows_amd64.zip 3.从下载中,将…