2024-11-13 学习人工智能的Day26 sklearn(2)

特征选择

VarianceThreshold(低方差过滤特征选择):

类似于之前openCV中的threshold函数,只是此在创建实例工具时在参数中设置用于筛选的阈值。因为目前来说基本所有的工具的操作方式大致相同,都是引用后进行调用。

emm,根据AI的回答:在使用fit后,方法本身并不返回固定值,只是更新模型的属性,而在此方法中,这些属性包括了特征方差等信息。

我不理解的点:因为我在创建实例对象时就已经设定了阈值参数,然后在我fit后我留下应该是需要的特征,而当我使用transform时,应该是直接根据我fit获取需要特征直接提取这些特征。

我的理解有误,fit方法并不返回任何值,它只计算训练数据集中每个特征的方差并记录,还确定了那些特征的方差高于阈值,这些信息被储存在variances_属性中,它还储存了一个实际使用的阈值,当用户没有指定时,这个值由fit来计算,最后储存在threshold _属性中,注意是fit事实上并不会修改任何值

fit更新后,transform使用更新后的方差和阈值进行特征过滤,而tranform则是实际执行特征选择的地方

from sklearn.feature_selection import VarianceThreshold
import pandas as pd
data=pd.DataFrame([[10,1],[11,3],[11,1],[11,5],[11,9],[11,3],[11,2],[11,6]])
transfer = VarianceThreshold(threshold=1.5)# 设置阈值方差
res = transfer.fit_transform(data)
print(res)

根据相关系数的特征选择

这里的系数就是使用皮尔逊系数来进行判断了。从scipy.stats中引入pearsonr方法,此方法返回的是两个值,一个statistic,此数的范围为[-1,1],其值越接近两边的1相关性越强,而另一个职为pvalue这个值只做了解,它是数值越小越相关。

主成分分析(PCA)

没有办法很清楚的解释,大致的解释只能是:PCA的核心目标是从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴上的投影能够最大程度地保留数据的方差,同时减少数据的维度。

然后就只能介绍一下PCA的用法,

from sklearn.decomposition import PCA
# 然后是方法的调用
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]
transfer = PCA(n_components=2)
# 注意的是PCA的实例创建时的参数,n_components,当它为大于一的整数时,表示减少至多少特征
# 当它为小于1大于0的小数时,表示保留多少比例的信息
res = transfer.fit_transform(data)
print(res)

KNN算法

K-近邻算法,根据K个邻居样本的类别来判断当前样本的类别;

如果一个样本在特征空间中的k个最相似(最邻近)样本中的大多数属于某个类别,则该类本也属于这个类别

比如: 有10000个样本,选出7个到样本A的距离最近的,然后这7个样本中假设:类别1有2个,类别2有3个,类别3有2个.那么就认为A样本属于类别2,因为它的7个邻居中 类别2最多(近朱者赤近墨者黑)

from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
iris = load_iris()
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=22)
standard = StandardScaler()
x_train = standard.fit_transform(x_train)
x_test = standard.transform(x_test)transfer = KNeighborsClassifier(n_neighbors=7)
transfer.fit(x_train,y_train)
y_predict = transfer.predict(x_test)
score = transfer.score(x_test,y_test)
score

交叉验证

1 .保留交叉验证

在这种交叉验证技术中,整个数据集被随机地划分为训练集和验证集。根据经验法则,整个数据集的近70%被用作训练集,其余30%被用作验证集。也就是我们最常使用的,直接划分数据集的方法。

优点:很简单很容易执行

缺点:不适合不平衡的数据集,一大块数据被剥夺了训练模型的机会

2.k-折交叉验证

K-Fold交叉验证技术中,整个数据集被划分为K个大小相同的部分。每个分区被称为 一个”Fold”。所以我们有K个部分,我们称之为K-Fold。一个Fold被用作验证集,其余的K-1个Fold被用作训练集。

3.分层k-折交叉验证Stratified k-fold

K-折交叉验证的变种, 分层的意思是说在每一折中都保持着原始数据中各个类别的比例关系,比如说:原始数据有3类,比例为1:2:1,采用3折分层交叉验证,那么划分的3折中,每一折中的数据类别保持着1:2:1的比例,这样的验证结果更加可信。

例子的话是关于k-折交叉验证的

# 分层k-折交叉验证
from sklearn.datasets import load_iris
from sklearn.model_selection import StratifiedKFold
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier#  加载数据
iris = load_iris()
x = iris.data
y = iris.target# 初始化分层k-折交叉验证器
strat_k_fold = StratifiedKFold(n_splits=5,shuffle=True,random_state=42)# 创建一个k近邻分类器实例
knn = KNeighborsClassifier(n_neighbors=7)# # 进行交叉认证
accuracies = []
for train_index ,test_index in strat_k_fold.split(x,y):x_train,x_test = x[train_index],x[test_index]y_train,y_test = y[train_index],y[test_index]# 数据预处理(标准化)scaler = StandardScaler()x_train_scaler = scaler.fit_transform(x_train)x_test_scaler = scaler.transform(x_test)# 使用k近邻分类器进行训练knn.fit(x_train_scaler,y_train)# # 输出每次折叠的准确得分score = knn.score(x_test,y_test)# print(score)accuracies.append(score)
print(sum(accuracies)/len(accuracies)) # 平均得分

超参数搜索

今天老师讲的最后的一个问题

超参数搜索也叫网格搜索(Grid Search)

比如在KNN算法中,k是一个可以人为设置的参数,所以就是一个超参数。网格搜索能自动的帮助我们找到最好的超参数值。

from sklearn.model_selection import GridSearchCV
此API同时进行交叉验证和网格搜索,而GridSearchCV实际也是一个估计器,它有以下几个重要的参数:best_params_  最佳参数best_score_ 在训练集中的准确率best_estimator_ 最佳估计器cv_results_ 交叉验证过程描述best_index_最佳k在列表中的下标

依旧是鸢尾花的分类示例

#%%
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_splitiris = load_iris()x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=22)standard = StandardScaler()
x_train = standard.fit_transform(x_train)
x_test = standard.transform(x_test)knn = KNeighborsClassifier()
estimator = GridSearchCV(estimator=knn,param_grid={"n_neighbors":[1,3,5,7,9,11]},cv=5)estimator.fit(x_train,y_train)# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("在测试集中的准确率为:\n", score)  #0.9736842105263158# 最佳参数:best_params_
print("最佳参数:\n", estimator.best_params_) #{'n_neighbors': 3}, 说明k=3时最好
# 最佳结果:best_score_
print("在训练集中的准确率:\n", estimator.best_score_)  #0.9553030303030303
# 最佳估计器:best_estimator_
print("最佳估计器:\n", estimator.best_estimator_) # KNeighborsClassifier(n_neighbors=3)
# 交叉验证结果:cv_results_
print("交叉验证过程描述:\n", estimator.cv_results_)
#最佳参数组合的索引:最佳k在列表中的下标
print("最佳参数组合的索引:\n",estimator.best_index_)

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

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

相关文章

OpenGL ES 共享上下文实现多线程渲染

OpenGL ES 共享上下文时,可以共享哪些资源? 共享上下文实现多线程渲染 EGL 概念回顾 EGL 是 OpenGL ES 和本地窗口系统(Native Window System)之间的通信接口,它的主要作用: 与设备的原生窗口系统通信; 查询绘图表面的可用类型和配置; 创建绘图表面; 在OpenGL ES 和…

应用于新能源汽车NCV4275CDT50RKG车规级LDO线性电压调节器芯片

关于车规级芯片(Automotive Grade Chip),车规级芯片是专门用于汽车行业的芯片,具有高可靠性、高稳定性和低功耗等特点,以满足汽车电子系统的严格要求。这些芯片通常用于车载电子控制单元(ECU)和…

MQTT协议解析 : 物联网领域的最佳选择

1. MQTT协议概述 1.1 MQTT协议是什么 MQTT : Message Queuing Telemetry Transport 模式 : 发布 / 订阅主题优点 : 代码量小、低带宽、实时可靠应用 : 物联网、小型设备、移动应用MQTT 常用端口 : 1883 MQTT是一个网络协议,和HTTP类似,因为轻量简单&…

【OH】openHarmony开发环境搭建(基于windows子系统WSL)

前言 本文主要介绍基于windows子系统WSL搭建openHarmony开发环境。 WSL与Vmware虚拟机的区别,可以查看WSL与虚拟机的区别 更详细的安装配置过程可参考微软官网: ​安装 WSL 前提 以下基于windows 111专业版进行配置,windows 10应该也是可以…

豆瓣均分9:不容错过的9本大模型入门宝藏书籍,非常详细收藏我这一篇就够了

在这个大模型风起云涌的时代,技术的边界被不断拓宽,AI的力量正以前所未有的方式重塑我们的世界。如果你渴望站在技术的浪尖,深入了解增强现实(AR)、机器学习(ML)与强化学习(RL&#…

OCR识别铁路电子客票

随着中国铁路客运领域进入全面数字化时代,国家税务总局、财政部和国铁集团于2024年10月18日联合发布公告,自2024年11月1日起,推广使用“电子发票(铁路电子客票)”。这一举措不仅为旅客出行提供了极大的便利&#xff0c…

【学习】Fine-tuning知识汇总

Fine-tuning 微调(Fine-tuning)是一种迁移学习的方法,用于在一个预训练模型的基础上,通过在特定任务的数据上进行有监督训练,来适应该任务的要求并提高模型性能。微调利用了预训练模型在大规模通用数据上学习到的语言…

qt QKeySequence详解

1、概述 QKeySequence 是 Qt 框架中的一个类,用于表示和处理键盘快捷键序列。它提供了一种方便的方式来解析、存储和比较键盘快捷键,这些快捷键通常用于触发应用程序中的特定操作或命令。QKeySequence 支持多种格式的快捷键表示,包括单个按键…

【MySQL】约束

4. 约束 4.1 概述 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确、有效性和完整性。 注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。 4.2 约束…

css:盒子模型

目录 盒子模型 边框(border) 内边距(padding) 外边距(margin) 盒子模型,浮动,定位 把一只大象塞进冰箱里需要三步:打开冰箱门,把大象塞进去,…

【最新版】Stable Diffusion4.9(AI绘画)下载及安装教程(附软件安装包)!

NO.1 软件下载 软件名称:Stable Diffusion4.9(SD)软件语言:中文软件大小:9.6G系统要求:Windows10或更高,64位操作系统 NO.2 软件介绍 Stable Diffusion Stable Diffusion是一款前沿AI绘画工…

微服务(二)

目录 1.网关路由 1.1.认识网关 1.2.快速入门 1.2.1.引入依赖 1.2.2.启动类 1.2.3.配置路由 1.3.路由过滤 2.网关登录校验 2.1.鉴权思路分析 2.2.网关过滤器 2.3.自定义过滤器 2.3.1.自定义GatewayFilter 2.3.2.自定义GlobalFilter 2.4.登录校验 2.4.1.JWT工具 …

uniCloud云对象调用第三方接口,根据IP获取用户归属地的免费API接口,亲测可用

需求 在2022年5月初,网络上各大平台上,都开始展示用户IP属地,在某音、某手等小视频平台以及各主流网站应用中,都展示IP归属地,如下图所示: 解决办法 收费文档的肯定有很多,基本你百度搜“归…

基于标签相关性的多标签学习

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

C++中的栈(Stack)和堆(Heap)

在C中,堆(heap)和栈(stack)是两种用于存储数据的内存区域。理解它们的原理和区别,对于优化代码性能和确保代码的安全性至关重要。以下是对C中堆栈的详细解析,包括它们的分配方式、优缺点、应用场…

搭建Python2和Python3虚拟环境

搭建Python3虚拟环境 1. 更新pip2. 搭建Python3虚拟环境第一步:安装python虚拟化工具第二步: 创建虚拟环境 3. 搭建Python2虚拟环境第一步:安装虚拟环境模块第二步:创建虚拟环境 4. workon命令管理虚拟机第一步:安装扩…

文件夹被占用了无法删除怎么办?强制粉碎文件夹你可以这样操作

在日常使用电脑的过程中,我们可能会遇到一些难以删除的文件夹,这不仅影响了我们的工作效率,还可能隐藏着潜在的安全风险。本文简鹿办公将向您介绍为什么某些文件夹无法直接删除,以及如何利用360安全卫士极速版等工具彻底粉碎这些顽…

Python 随笔

转移字符 \a 用于触发系统蜂鸣器(要在shell上才行) print里面用 括起来的内容位置是 """ """括起来啥样,输出啥样 任何值都可以当作i条件: 是直接把两…

某app最新版 vmp算法分析一

本系列预计3篇 某app使用了一种X开头的HTTP 签名。该应用程序对服务器的请求在其标头中有6个x签名。该应用程序通常使用此签名来确保数据的安全性和完整性。代号花露水. 6个x签名都来自古希腊神话中的某个神. 分别是蛇发女妖(G),柯罗诺斯(K,时间之神),拉顿(L),阿尔戈斯(A),赫…

AI制作ppt

1,kimi: 实际上也是AiPPT.cn这个网站(但是有实际次数限制) 2,其余专业AI ppt生成网站: (1)gamma:https://gamma.app/ 大概能制作7~10页左右 free的ppt,其余要…