当前位置: 首页 > article >正文

机器学习 day03

文章目录

  • 前言
  • 一、特征降维
    • 1.特征选择
    • 2.主成分分析(PCA)
  • 二、KNN算法
  • 三、模型的保存与加载


前言

通过今天的学习,我掌握了机器学习中的特征降维的概念以及用法,KNN算法的基本原理及用法,模型的保存和加载


一、特征降维

对于未经处理的原始数据,其中往往包括大量的特征,会导致计算量很大,我们希望通过降维,舍弃掉一些特征,或者将几个特征转换为一个特征

特征降维的方式主要包括:

  • 特征选择:舍弃掉一些特征,从原始特征集中挑选出最相关的特征
  • 主成分分析(PCA):通过数学计算,将几个特征转换为一个特征,达到降维的目的

1.特征选择

(1)低方差过滤特征选择
原理:如果计算某一个特征的数据得到的方差很小,说明这个特征的数据总体变化不大,包含的信息较少,可以舍弃

API用法:sklearn.feature_selection.VarianceThreshold(threshold=2.0)

  • threshold参数用于指定低方差阈值,小于该阈值的特征将被过滤
data = pd.DataFrame([[10,1],[11,3],[11,1],[11,5],[11,9],[11,3],[11,2],[11,6]])
# 实例化转换器对象
transfer = VarianceThreshold(threshold=0.1)
# 特征选择
data_new = transfer.fit_transfrom(data)
print(data_new)

(2)相关系数特征选择
原理:根据计算两个变量的皮尔逊相关系数度量二者的相关性,若相关系数很小,则说明两个量之间没什么关联,可以据此舍弃一些与目标不相关的特征

皮尔逊相关系数的取值范围为:[-1,1],越接近1代表正相关性越强,反之代表负相关性越强,而接近0代表相关性很弱

通过以下公式:
ρ = Cos ⁡ ( x , y ) D x ⋅ D y = E [ ( x − E x ) ( y − E y ) ] D x ⋅ D y = ∑ i = 1 n ( x − x ~ ) ( y − y ˉ ) / ( n − 1 ) ∑ i = 1 n ( x − x ˉ ) 2 / ( n − 1 ) ⋅ ∑ i = 1 n ( y − y ˉ ) 2 / ( n − 1 ) \rho=\frac{\operatorname{Cos}(x, y)}{\sqrt{D x} \cdot \sqrt{D y}}=\frac{E[(x_-E x)(y-E y)]}{\sqrt{D x} \cdot \sqrt{D y}}=\frac{\sum_{i=1}^{n}(x-\tilde{x})(y-\bar{y}) /(n-1)}{\sqrt{\sum_{i=1}^{n}(x-\bar{x})^{2} /(n-1)} \cdot \sqrt{\sum_{i=1}^{n}(y-\bar{y})^{2} /(n-1)}} ρ=Dx Dy Cos(x,y)=Dx Dy E[(xEx)(yEy)]=i=1n(xxˉ)2/(n1) i=1n(yyˉ)2/(n1) i=1n(xx~)(yyˉ)/(n1)
计算得到余弦相似度,|ρ|<0.4为低度相关; 0.4<=|ρ|<0.7为显著相关; 0.7<=|ρ|<1为高度相关

API用法:scipy.stats.personr(x,y)

  • x,y为需要比较的两个向量
  • 返回值包括:statistic皮尔逊相关系数以及pvalue零假设,该值越小说明两个量越相关
from scipy.stats import pearsonr
x = [1,2,3]
y = [10,20,30]
res = pearsonr(x,y)
print(res.statistic)
print(res.pvalue)

2.主成分分析(PCA)

主成分分析的核心是在保留数据方差的前提下将原始数据降维到新的坐标空间中以减少数据维度
在这里插入图片描述
假设B点坐标为( x 0 x_0 x0 y 0 y_0 y0),根据上图的几何关系 x 0 x_0 x0投影到L的大小AE为 x 0 ∗ c o s α x_0*cos \alpha x0cosα

y 0 y_0 y0投影到L的大小EF为 y 0 ∗ s i n α y_0*sin\alpha y0sinα

在这里插入图片描述
通过这个公式,我们可以将二维坐标点映射到一维的直线上(本质上是通过矩阵运算进行线性变换),达到降维的目的

这里投影到直线上的距离就是降维后保留的信息,而垂直于直线上的投影则是损失的信息,在进行PCA时,我们要使保留信息/原始信息=信息保留的比例较大

其次,我们根据主成分的方差等,确定最终保留的主成分个数, 方差大的要留下

API用法:sklearn.decomposition.PCA(n_components=None)

  • n_components用于指定降维参数,如果是小数表示降维后的信息保留比,如果是整数表示降维至多少特征
from sklearn.decomposition import PCA
# 注意该列表中元素表示四维向量
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]
# 实参为小数表示信息保留比,为整数时表示保留特征的个数
tool = PCA(n_components=2)
data = tool.fit_transform(data)
print(data)

tips:在机器学习库中,默认输入的数据中:行代表每一个数据样本,列代表数据样本的各个特征,降维指的是减少数据样本的特征数

二、KNN算法

K-近邻算法(K-Nearest Neighbors,简称KNN),根据K个邻居样本的类别来判断当前样本的类别;

该算法的核心是计算某个样本到相邻k个样本间的距离,再对得到的距离进行排序,最后得到样本的类别

KNN算法的原理简单易懂,但对于维度较高和数据链较大的样本效果不佳且效率低下

API用法:sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, algorithm=‘auto’)

  • n_neighbors代表近邻的个数
  • algorithm指找到近邻的方法,是数据结构中的算法,一般指定为“auto”
from sklearn.datasets import load_iris
from sklearn.model_selction import train_test_split
from sklearn.perprocessing import StandarScaler
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
# 加载数据
x,y = load_iris(return_X_y=True)
# 数据划分
x_train,x_test,y_train,y_test = train_test_split(x,y,train_size=0.8,shuff=True,random_state=42)
# 特征工程
transfer = StandarScaler()
x_train = transfer.fit_transfrom(x_train)
x_test = transfer.transfrom(x_test)
# 创建模型
model = KNeughborsClassifier(n_neighbors=5)
# 训练模型
model.fit(x_train,t_train)
# 模型预测
y_pred = model.predict(x_test)
# 模型评估
score = np.sum(y_test==y_pred)/len(y_test)
print(score)

三、模型的保存与加载

在现实开发场景中,模型的训练和使用往往是分离的,因此我们希望训练完模型后可以保存到指定位置,再次使用时可以加载模型直接使用

API使用:

  • 保存模型:joblib.dump(model, path)
  • 加载模型:joblib.load(path)
if score > 0.9:joblib.dump(model,"./src/model/knn.pkl")joblib.dump(transfer,"./src/model/knn_transfer.pkl")print("保存成功!")
else:print("模型效果差,保存失败!")

THE END

相关文章:

机器学习 day03

文章目录 前言一、特征降维1.特征选择2.主成分分析&#xff08;PCA&#xff09; 二、KNN算法三、模型的保存与加载 前言 通过今天的学习&#xff0c;我掌握了机器学习中的特征降维的概念以及用法&#xff0c;KNN算法的基本原理及用法&#xff0c;模型的保存和加载 一、特征降维…...

《社交应用动态表情:RN与Flutter实战解码》

React Native依托于JavaScript和React&#xff0c;为动态表情的实现开辟了一条独特的道路。其核心优势在于对原生模块的便捷调用&#xff0c;这为动态表情的展示和交互提供了强大支持。在社交应用中&#xff0c;当用户点击发送动态表情时&#xff0c;React Native能够迅速调用相…...

嵌入式软件--stm32 DAY 6 USART串口通讯(下)

1.寄存器轮询_收发字符串 通过寄存器轮询方式实现了收发单个字节之后&#xff0c;我们趁热打铁&#xff0c;争上游&#xff0c;进阶到字符串。字符串就是多个字符。很明显可以循环收发单个字节实现。 然后就是接收字符串。如果接受单个字符的函数放在while里&#xff0c;它也可…...

问题处理——在ROS2(humble)+Gazebo+rqt下,无法显示仿真无人机的相机图像

文章目录 前言一、问题展示二、解决方法&#xff1a;1.下载对应版本的PX42.下载对应版本的Gazebo3.启动 总结 前言 在ROS2的环境下&#xff0c;进行无人机仿真的过程中&#xff0c;有时需要调取无人机的相机图像信息&#xff0c;但是使用rqt&#xff0c;却发现相机图像无法显示…...

69、微服务保姆教程(十二)容器化与云原生

容器化与云原生 在微服务架构中,容器化和云原生技术是将应用程序部署到生产环境的核心技术。通过容器化技术,可以将应用程序及其依赖项打包成一个容器镜像,确保在任何环境中都能一致运行。而云原生技术则通过自动化的容器编排系统(如 Kubernetes),实现应用的动态扩展、自…...

朱老师,3518e系列,第六季

第一节&#xff1a;概述。 首先是 将 他写好的 rtsp 源码上传&#xff0c;用于分析。 已经拷贝完。 第二节&#xff1a; h264 编码概念。 编解码 可以用cpu, 也可以用 bsp cpu 编解码的效果不好。做控制比较好。 h264 由 VCL&#xff0c; NAL 组成。 NAL 关心的是 压缩…...

ElasticSearch-集群

本篇文章依据ElasticSearch权威指南进行实操和记录 1&#xff0c;空集群 即不包含任何节点的集群 集群大多数分为两类&#xff0c;主节点和数据节点 主节点 职责&#xff1a;主节点负责管理集群的状态&#xff0c;例如分配分片、添加和删除节点、监控节点故障等。它们不直接…...

一文掌握工业相机选型计算

目录 一、基本概念 1.1 物方和像方 1.2 工作距离和视场 1.3 放大倍率 1.4 相机芯片尺寸 二、公式计算 三、实例应用 一、基本概念 1.1 物方和像方 在光学领域&#xff0c;物方&#xff08;Object Space&#xff09;是与像方&#xff08;Image Space&#xff09;相对的…...

记录心态和工作变化

忙中带闲的工作 其实工作挺忙的, 总是在赶各种功能点. 好巧的是iOS那边因为上架的问题耽搁了一些时间, 从而让Android的进度有了很大的调整空间. 更巧的是后端那边因为对客户端的需求不是很熟悉, 加上Android海外这块的业务他也是第一次接触. 所以需要给他留一些时间把各个环节…...

深入理解 TypeScript 中的 unknown 类型:安全处理未知数据的最佳实践

在 TypeScript 的类型体系中&#xff0c;unknown 是一个极具特色的类型。它与 any 看似相似&#xff0c;却在安全性上有着本质差异。本文将从设计理念、核心特性、使用场景及最佳实践等方面深入剖析 unknown&#xff0c;帮助开发者在处理动态数据时既能保持灵活性&#xff0c;又…...

LabVIEW机械振动信号分析与故障诊断

利用 LabVIEW 开发机械振动信号分析与故障诊断系统&#xff0c;融合小波变换、时频分布、高阶统计量&#xff08;双谱&#xff09;等先进信号处理技术&#xff0c;实现对齿轮、发动机等机械部件的非平稳非高斯振动信号的特征提取与故障诊断。系统通过虚拟仪器技术将理论算法转化…...

Helm配置之为特定Deployment配置特定Docker仓库(覆盖全局配置)

文章目录 Helm配置之为特定Deployment配置特定Docker仓库(覆盖全局配置)需求方法1:使用Helm覆盖值方法2: 在Lens中临时修改Deployment配置步骤 1: 创建 Docker Registry Secret步骤 2: 在 Deployment 中引用 Secret参考资料Helm配置之为特定Deployment配置特定Docker仓库(覆…...

【Spring】Spring中的适配器模式

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。 目录 适配器模式Spring MVC的适配器模式 适配器模式 适配器模式&#xff08;Adapter Pattern&a…...

GO学习指南

GO学习指南 主题一 go语言基础知识讲解 go语言面向对象编程 go语言接口详解 go语言协程 主题二 web基础知识 后续内容请大家持续关注&#xff0c;每月一主题&#xff0c;让各位读者能零基础、零成本学习go语言...

2、ubuntu系统配置OpenSSH | 使用vscode或pycharm远程连接

1、OpenSSH介绍 OpenSSH&#xff08;Open Secure Shell&#xff09;是一套基于SSH协议的开源工具&#xff0c;用于在计算机网络中提供安全的加密通信。它被广泛用于远程系统管理、文件传输和网络服务的安全隧道搭建&#xff0c;是保护网络通信免受窃听和攻击的重要工具。 1.1…...

MySQL面试知识点详解

一、MySQL基础架构 1. MySQL逻辑架构 MySQL采用分层架构设计&#xff0c;主要分为&#xff1a; 连接层&#xff1a;处理客户端连接、授权认证等 服务层&#xff1a;包含查询解析、分析、优化、缓存等 引擎层&#xff1a;负责数据存储和提取&#xff08;InnoDB、MyISAM等&am…...

小白入门:GitHub 远程仓库使用全攻略

一、Git 核心概念 1. 三个工作区域 工作区&#xff08;Working Directory&#xff09;&#xff1a;实际编辑文件的地方。 暂存区&#xff08;Staging Area&#xff09;&#xff1a;准备提交的文件集合&#xff08;使用git add操作&#xff09;。 本地仓库&#xff08;Local…...

RPC与SOAP的区别

一.RPC&#xff08;远程过程调用&#xff09;和SOAP&#xff08;简单对象访问协议&#xff09;均用于实现分布式系统中的远程通信&#xff0c;但两者在设计理念、协议实现及应用场景上存在显著差异。 二.对比 1.设计理念 2.协议规范 3.技术特性 4.典型应用场景 5.总结 三.总结…...

Day11-苍穹外卖(数据统计篇)

前言&#xff1a; 今天写day11的内容&#xff0c;主要讲了四个统计接口的制作。看起来内容较多&#xff0c;其实代码逻辑都是相似的&#xff0c;这里我们过一遍。 今日所学&#xff1a; Apache ECharts营业额统计用户统计订单统计销量排行统计 1. Apache ECharts 1.1 介绍 A…...

Tomcat简述介绍

文章目录 Web服务器Tomcat的作用Tomcat分析目录结构 Web服务器 Web服务器的作用是接收客户端的请求&#xff0c;给客户端作出响应。 知名Java Web服务器 Tomcat&#xff08;Apache&#xff09;&#xff1a;用来开发学习使用&#xff1b;免费&#xff0c;开源JBoss&#xff0…...

《从零开始:Spring Cloud Eureka 配置与服务注册全流程》​

关于Eureka的学习&#xff0c;主要学习如何搭建Eureka&#xff0c;将order-service和product-service都注册到Eureka。 1.为什么使用Eureka? 我在实现一个查询订单功能时&#xff0c;希望可以根据订单中productId去获取对应商品的详细信息&#xff0c;但是产品服务和订单服…...

如何保证RabbitMQ消息的顺序性?

保证RabbitMQ消息的顺序性是一个常见的需求&#xff0c;尤其是在处理需要严格顺序的消息时。然而&#xff0c;默认情况下&#xff0c;RabbitMQ不保证消息的全局顺序&#xff0c;因为消息可能会通过不同的路径&#xff08;例如不同的网络连接或线程&#xff09;到达队列&#xf…...

FPGA学习知识(汇总)

1. wire与reg理解&#xff0c;阻塞与非阻塞 2. 时序取值&#xff0c;时钟触发沿向左看 3. ip核/setup debug 添加 ila 一、ila使用小技巧 二、同步复位、异步复位和异步复位同步释放 设计复位设计&#xff0c;尽量使用 异步复位同步释放&#xff1b;尽管该方法仍然对毛刺敏感…...

c语言 写一个五子棋

c语言 IsWin判赢 display 画 10 x 10 的棋盘 判断落子的坐标是否已有棋子 判断落子坐标范围是否超出范围 // 五子棋 #include <stdio.h> #include <stdlib.h>// 画棋盘 10 x 10的棋盘&#xff0c;len为行数 void display(char map[][10], int len) {system(&q…...

Redisson分布式锁-锁的可重入、可重试、WatchDog超时续约、multLock联锁(一文全讲透,超详细!!!)

本文涉及到使用Redis实现基础分布式锁以及Lua脚本的内容&#xff0c;如有需要可以先参考博主的上一篇文章&#xff1a;Redis实现-优惠卷秒杀(基础版本) 一、功能介绍 (1)前面分布式锁存在的问题 在JDK当中就存在一种可重入锁ReentrantLock&#xff0c;可重入指的是在同一线…...

Python爬虫实战:研究源码还原技术,实现逆向解密

1. 引言 在网络爬虫技术实际应用中,目标网站常采用各种加密手段保护数据传输和业务逻辑。传统逆向解密方法依赖人工分析和调试,效率低下且易出错。随着 Web 应用复杂度提升,特别是 JavaScript 混淆技术广泛应用,传统方法面临更大挑战。 本文提出基于源码还原的逆向解密方法…...

WordPress Relevanssi插件时间型SQL注入漏洞(CVE-2025-4396)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

Adobe Illustrator学习备忘

1.移动画板&#xff1a;需按住空格键加鼠标一块才能拖动 2.放大缩小画板&#xff1a;按住Alt键加鼠标滚轮 3.撤回&#xff1a;CtrlZ 4.钢笔练习网站&#xff1a;The Bzier Game...

C#中的dynamic与var:看似相似却迥然不同

在C#编程的世界里&#xff0c;var和dynamic这两个关键字常常让初学者感到困惑。它们看起来都在定义变量时省略了显式类型声明&#xff0c;但实际上它们的工作方式和应用场景有着天壤之别。今天&#xff0c;让我们一起揭开这两个关键字的神秘面纱。 var&#xff1a;编译时的类型…...

求职困境:开发、AI、运维、自动化

文章目录 问&#xff1a;我的技术栈是web全栈&#xff08;js&#xff0c;css&#xff0c;html&#xff0c;react&#xff0c;typscript&#xff09;&#xff0c;C开发&#xff0c;python开发&#xff0c;音视频图像开发&#xff0c;神经网络深度学习开发&#xff0c;运维&#…...