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

机器学习——KNN数据均一化

在KNN(K-近邻)算法中,数据均一化(归一化)是预处理的关键步骤,用于消除不同特征量纲差异对距离计算的影响。以下是两种常用的归一化操作及其核心要点:

质押

一 、主要思想

1. 最值归一化(Min-Max Normalization)

公式


X_{norm}=\frac{x-x_{min}}{x_{max}-x_{min}}


特点

  • 将数据映射到 [0, 1] 区间内。
  • 适用场景:特征分布有明显边界(如像素值0-255、评分0-100),且数据中异常值较少16。
  • 缺点:对异常值敏感,若存在极端值(如极大或极小值),可能导致大部分数据集中在某个狭窄区间,影响模型性能 

2. 均值方差归一化(Z-Score Standardization)

公式


x_{std}=\frac{x-\mu }{\sigma }


(其中 μ 为均值,σ为标准差)
特点

  • 将数据转换为均值为 0、方差为 1 的分布。
  • 适用场景:数据分布无明显边界,或存在极端值(如收入、房价等连续型特征)。
  • 优点:对异常值的鲁棒性优于最值归一化,适用于大多数机器学习算法。

归一化在KNN中的必要性

  • 距离计算敏感性问题:KNN依赖距离度量(如欧氏距离),若特征尺度差异大(如年龄0-100 vs. 收入0-100000),大范围特征会主导距离计算,导致模型偏差。
  • 模型性能优化:归一化后数据分布更均匀,可提升KNN的分类精度和收敛速度。

3.注意事项

  1. 训练集与测试集统一处理:需先对训练集计算归一化参数(如min/max、均值/标准差),再对测试集应用相同参数,避免数据泄露
  2. 算法选择建议:优先使用均值方差归一化,因其对异常值和数据分布的适应性更强

二、算法实现

(1)主要函数:sklearn.preprocessing.StandardScaler()

(2)关键参数

参数作用默认值
copy是否创建数据副本(False 时可能直接修改原始数据,需注意数据类型兼容性)4True
with_mean是否对数据去均值(设为 False 时跳过中心化,适用于稀疏矩阵处理)4True
with_std是否对数据缩放至单位方差(设为 False 时仅中心化,不缩放)4True
  • scale_:每个特征的标准差(缩放比例)。
  • mean_:每个特征的均值。
  • var_:每个特征的方差。
  • n_samples_seen_:已处理的样本总数(支持在线学习时统计增量数据)。

(3)示例

1、最大值最小值均一化

import numpy as np
from sklearn import datasets#加载鸢尾花数据集
iris=datasets.load_iris()
X = iris.data
y = iris.target#最大最小值归一化
np.max(X[:,0])
np.min(X[:,0])#对每一列进行最值归一化
X[:,0] = (X[:,0] - np.min(X[:,0])) /  (np.max(X[:,0]) - np.min(X[:,0])) #第0列
X[:,1] = (X[:,1] - np.min(X[:,1])) /  (np.max(X[:,1]) - np.min(X[:,1])) #第1列
X[:,2] = (X[:,2] - np.min(X[:,2])) /  (np.max(X[:,2]) - np.min(X[:,2])) #第2列
X[:,3] = (X[:,3] - np.min(X[:,3])) /  (np.max(X[:,3]) - np.min(X[:,3])) #第3列

2、归零均一化

import numpy as np
from  sklearn import datasets #加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target#计算均值、标准差
np.mean(X[:,0])
np.std(X[:,0])#每列归一化
X[:,0] = (X[:,0] - np.mean(X[:,0]))/np.std(X[:,0])
X[:,1] = (X[:,1] - np.mean(X[:,1]))/np.std(X[:,1])
X[:,2] = (X[:,2] - np.mean(X[:,2]))/np.std(X[:,2])
X[:,3] = (X[:,3] - np.mean(X[:,3]))/np.std(X[:,3])

3、scikit-learn 中的StandardScaler

import numpy as np
from sklearn import datasets#加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.targetfrom sklearn.preprocessing import StandardScaler #均一化模块standard_scaler = StandardScaler()standard_scaler.fit(X)standard_scaler.mean_ #均值
standard_scaler.scale_ #标准差X = standard_scaler.transform(X)#均一化后重新赋值给X
print(X[:5] )'''
结果:
array([[-0.90068117,  1.01900435, -1.34022653, -1.3154443 ],[-1.14301691, -0.13197948, -1.34022653, -1.3154443 ],[-1.38535265,  0.32841405, -1.39706395, -1.3154443 ],[-1.50652052,  0.09821729, -1.2833891 , -1.3154443 ],[-1.02184904,  1.24920112, -1.34022653, -1.3154443 ]])
'''#使用归一化的数据进行预测分类from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,train_size=0.8,random_state=666)from sklearn.preprocessing import StandardScaler #均一化模块standard_scaler = StandardScaler()standard_scaler.fit(X_train) #适配数据standard_scaler.mean_  #均值
standard_scaler.scale_ #标准差X_train_standard = standard_scaler.transform(X_train) #X_train 归一
X_test_standard = standard_scaler.transform(X_test)   #X_test 归一from sklearn.neighbors import KNeighborsClassifier
knn_classifier = KNeighborsClassifier(n_neighbors=5)
knn_classifier.fit(X_train_standard,y_train)
knn_classifier.score(X_test_standard, y_test) #结果:1.0

特别注意:

在进行归零均一化操作时,要对训练集和测试集分别进行归一化后才能进行分类预测。一般先求出训练集的 mean(均值) 和scale (标准差)再进行归一transform操作,但值得注意的是,测试集不用再进行mean和sacle的计算,直接使用训练集即可。因为现实中的数据有时候很难进行归一化。

相关文章:

机器学习——KNN数据均一化

在KNN(K-近邻)算法中,数据均一化(归一化)是预处理的关键步骤,用于消除不同特征量纲差异对距离计算的影响。以下是两种常用的归一化操作及其核心要点: 质押 一 、主要思想 1. 最值归一化&#…...

页面元素内容太长,给元素添加title

一、需求 页面元素内容太长&#xff0c;给元素添加title 二、实现 1、直接使用title属性 <div target"_blank" class"text-overflow" title"叉车司机">叉车司机</div> 2、使用tdesign的Popup 弹出层 <t-popup>触发元素&…...

【Git多分支使用教程】

Git多分支使用教程 Git多分支使用手册目录多分支只拉取一个多分支拉取指定几个步骤 1&#xff1a;克隆第一个分支步骤 2&#xff1a;获取其他分支 常见问题与解决方法1. 错误&#xff1a;origin/分支名 is not a commit2. 分支名称冲突3. --single-branch 限制 总结 Git多分支使…...

【408--复习笔记】数据结构

【408--复习笔记】数据结构 1.绪论数据结构基本概念• 请简述数据结构的定义。• 数据结构中数据、数据元素、数据项、数据对象的区别是什么&#xff1f; 算法相关• 什么是算法&#xff1f;算法的五个重要特性是什么&#xff1f;• 如何理解算法的时间复杂度和空间复杂度&…...

使用 Vite 提升前端开发体验:入门与配置指南

在现代前端开发中&#xff0c;构建工具的选择对开发效率和项目性能有着至关重要的影响。Vite 是一个新兴的前端构建工具&#xff0c;由 Vue.js 的作者尤雨溪开发&#xff0c;旨在通过利用现代浏览器的原生 ES 模块特性&#xff0c;提供更快的开发服务器启动速度和更高效的热更新…...

WPS JS宏编程教程(从基础到进阶)--第二部分:WPS对象模型与核心操作

第二部分&#xff1a;WPS对象模型与核心操作 WPS对象的属性、方法、集合 工作簿对象常用表达方式工作表对象常用表达方式单元格对象常用表达方式 单元格操作实战 单元格复制与重定位单元格偏移与尺寸调整 颜色设置专题 索引颜色与RGB颜色按条件动态设置单元格颜色 第二部分&…...

瑞数信息《BOTS自动化威胁报告》正式发布

在数字化时代&#xff0c;BOTS自动化攻击如同一场无声的风暴&#xff0c;正以前所未有的态势席卷全球网络空间。为了让各行业更好地应对自动化威胁挑战&#xff0c;瑞数信息作为BOTS自动化攻击防护领域的专业厂商&#xff0c;多年来持续输出BOTS自动化威胁报告&#xff0c;为各…...

【NUUO 摄像头】(弱口令登录漏洞)

漏洞简介&#xff1a;NUUO 是NUUO公司的一款小型网络硬盘录像机设备。 NUUO NVRMini2 3.0.8及之前版本中存在后门调试文件。远程攻击者可通过向后门文件handle_site_config.php发送特定的请求利用该漏洞执行任意命令。 1.Fofa搜索语句&#xff1a; 在Fofa网站&#xff0c;搜索&…...

Android系统的安全问题 - Linux的能力模型(Capability)和 SELinux 的区别

Linux 的能力模型&#xff08;Capabilities&#xff09;和 SELinux 是两种不同的安全机制&#xff0c;虽然它们都用于增强 Linux 系统的安全性&#xff0c;但它们的实现方式和目标有所不同。 1. Linux Capabilities&#xff08;能力模型&#xff09; 作用&#xff1a;传统的 …...

Rust安装并配置配置vscode编译器

一. 下载rustup-init.exe rust下载网址&#xff1a;Getting started - Rust Programming Language 根据系统&#xff0c;选择适合的exe文件 我选择的的是右边64bit的 打开下载的文件 输入1&#xff0c;回车 二. Visual C 安装 自动下载安装vs 等待安装完毕 三. Rust 安装…...

Spring Boot响应压缩配置与优化

一、核心工作机制 1.1 自动协商触发条件 Spring Boot的响应压缩功能基于智能协商机制&#xff0c;需同时满足以下条件方可触发&#xff1a; 客户端支持&#xff1a;请求头包含Accept-Encoding: gzip/deflate数据量阈值&#xff1a;响应体大小超过预设值&#xff08;默认2KB&…...

el-select开启filterable模式,限制输入框输入类型

遇到el-select开启filterable模式查询&#xff0c;下拉框内容是文字与数字组合版&#xff0c;导致校验不准&#xff0c;且没有属性能直接限制focus输入的内容&#xff0c;这时候可以用自定义属性来解决 实例&#xff1a;&#xff08;以只能输入数字为例&#xff09; <el-for…...

创建login.api.js步骤和方法

依次创建 login.api.js、home.api.js...... login.api.js、home.api.js 差不多 导入到 main.js main.js 项目中使用...

在线运行vscode

安装 https://github.com/coder/code-server?utm_sourcesyndication&pubDate20250317 运行前预览脚本 curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run运行脚本 curl -fsSL https://code-server.dev/install.sh | sh其他 可以通过后台服务运行&am…...

【Nginx】可以做哪些优化?

一、配置文件优化 1.1 性能优化 开启网页压缩 gzip on;设置网页缓存时间expires 缓存时间;设置连接保持超时keepalive_timeout 服务端超时时间 客户端超时时间;设置连接保持最大请求数keepalive_requests设置工作进程数 worker_processes 与服务器CPU数量…...

springboot在feign和线程池中使用TraceId日志链路追踪(最终版)-2

文章目录 简述问题feign调用时给head加入traceIdFeignConfig配置FeignConfig 局部生效feign拦截器和配置合并为一个文件&#xff08;最终版&#xff09;feign异步调用拦截器配置[不常用] 使用TTL自定义线程池为什么需要TransmittableThreadLocal&#xff1f; 总结参考和拓展阅读…...

datawhale组队学习-大语言模型-task5:主流模型架构及新型架构

目录 5.3 主流架构 5.3.1 编码器-解码器架构 5.3.2 因果解码器架构 5.3.3 前缀解码器架构 5.4 长上下文模型 5.4.1 扩展位置编码 5.4.2 调整上下文窗口 5.4.3 长文本数据 5.5 新型模型架构 5.5.1 参数化状态空间模型 5.5.2 状态空间模型变种 5.3 主流架构 在预训…...

《Matplotlib三维可视化工业实践——从分子模拟到流体力学》

目录 ​编辑 一、工业三维可视化挑战 1.1 典型工业场景需求 1.2 技术痛点分析 二、Matplotlib三维可视化基础 2.1 三维坐标体系构建 2.2 核心三维绘图API 三、分子模拟可视化实战 3.1 晶体结构渲染 3.2 分子轨迹动态演示 四、流体力学场数据优化渲染 4.1 矢量场高效…...

【neo4j数据导出并在其他电脑导入】

停止服务 neo4j stop 导出 neo4j-admin database dump neo4j --to-path"C:\Users\12901\Downloads\test folder" 导入 将 .dump 文件放在一个目录中 mkdir /root/dump-directory mv /root/neo4j.dump /root/dump-directory/ 使用包含 .dump 文件的目录路径作为 …...

多智能体融合(Multi-Agent Fusion)

多智能体融合&#xff08;Multi-Agent Fusion&#xff09;是指在多智能体系统&#xff08;MAS, Multi-Agent System&#xff09;中&#xff0c;多个智能体&#xff08;Agent&#xff09;通过协作、竞争或共享信息&#xff0c;实现全局最优的智能决策和任务执行。该方法广泛应用…...

状态模式(State Pattern)

状态模式&#xff08;State Pattern&#xff09; 如果任务的执行过程是有多个不同状态的&#xff08;比如初始化、运行中、完成等&#xff09;&#xff0c;你可以使用状态模式。每个状态可以有不同的行为&#xff0c;使得任务的状态管理更加清晰和可维护。 示例&#xff1a; …...

Linux网站搭建(新手必看)

1.宝塔Linux面板的功能 宝塔面板是一款服务器管理软件&#xff0c;可以帮助用户建立网站&#xff0c;一键配置服务器环境&#xff0c;使得用户通过web界面就可以轻松的管理安装所用的服务器软件。 2. 宝塔Linux面板的安装 宝塔官网地址&#xff1a;宝塔面板 - 简单好用的Linu…...

JavaEE进阶---Mybatis(预编译SQL即时SQL动态SQL标签池化技术说明)

文章目录 1.经典面试题&#xff08;#{}和${}的区别&#xff09;1.1关于#1.2关于$1.3情况下需要使用$ 2.数据库连接池2.1池化技术图解 3.动态SQL3.1if标签的使用3.2where标签的使用3.3set标签的使用 1.经典面试题&#xff08;#{}和${}的区别&#xff09; 1.1关于# 预编译SQL&a…...

Object.defineProperty()Proxy详解(Vue23数据劫持实现)

底层原理&#x1f447;&#x1f3ff; 总结一下&#xff0c;结构应该包括&#xff1a; 1. 方法的基本作用和参数。 2. 数据描述符和存取描述符的区别。 3. 属性定义的内部处理流程。 4. 在Vue中的应用实例。 5. 常见错误和正确实践。 每个部分都要结合搜索结果的信息&…...

网页的性能优化

面试中如何回答"前端性能优化"问题 在面试中回答性能优化问题时&#xff0c;建议采用结构化表达方式&#xff0c;展示你的系统化思维和实战经验。以下是一个推荐的回答框架&#xff1a; 1. 开场概述 “前端性能优化是一个系统工程&#xff0c;我通常会从加载性能、…...

Vue 3中的Teleport:超越组件边界的渲染

Vue 3引入了许多新特性&#xff0c;其中之一便是Teleport。它为开发者提供了一种强有力的方式来控制组件的渲染位置&#xff0c;使得我们可以将组件的内容“传送”到DOM树的任何地方&#xff0c;而不仅仅局限于其父级组件的边界内。这在创建模态框、通知系统或任何需要脱离当前…...

JVM垃圾回收笔记01-垃圾回收算法

文章目录 前言1. 如何判断对象可以回收1.1 引用计数法1.2 可达性分析算法查看根对象哪些对象可以作为 GC Root ?对象可以被回收&#xff0c;就代表一定会被回收吗&#xff1f; 1.3 引用类型1.强引用&#xff08;StrongReference&#xff09;2.软引用&#xff08;SoftReference…...

3.26学习总结

今天主要学习了内部类&#xff0c;但总感觉有点混乱&#xff0c;和之前的抽象啊&#xff0c;接口&#xff0c;多态等概念联系在一起感觉更混乱了&#xff0c;所以打算先把最近学的理清一遍&#xff0c;敲一遍代码再往后学...

京东--数据开发实习生--保险业务部门--一面凉经

Base&#xff1a; 本人投递的是后台开发岗位&#xff0c;调剂到数据开发岗位&#xff0c;京东的数据开发也做后台开发方面的工作&#xff0c;还包括算法、策略、数据挖掘和数据平台搭建之类的职责。面试内容基本只会问简历上的&#xff0c;在此基础上再去考察岗位职责相关的内…...

【Hugging Face 开源库】Diffusers 库 —— 扩散模型

Diffusers 的三个主要组件1. DiffusionPipeline&#xff1a;端到端推理工具__call__ 函数callback_on_step_end 管道回调函数 2. 预训练模型架构和模块UNetVAE&#xff08;Variational AutoEncoder&#xff09;图像尺寸与 UNet 和 VAE 的关系EMA&#xff08;Exponential Moving…...

TypeScript(TS) 的使用初识

我将详细讲解 TypeScript&#xff08;TS&#xff09; 的使用。TypeScript 是由微软开发的一种开源编程语言&#xff0c;它是 JavaScript 的超集&#xff0c;通过引入静态类型和面向对象编程特性&#xff0c;增强了 JavaScript 的开发体验和代码质量。TypeScript 最终会被编译成…...

QTcpSocket多线程连接慢问题

20250325记录 环境&#xff1a;Qt5.14.2 64位 msvc编译 在多线程环境下&#xff0c;使用QTcpSocket实现客户端&#xff0c;发现在少部分电脑上&#xff0c;连接时间过长&#xff0c;定时器检查套接字状态时&#xff0c;发现连接处于QAbstractSocket::ConnectingState状态。 …...

Vue的实例

Every Vue application starts with a single Vue component instance as the application root. Any other Vue component created in the same application needs to be nested inside this root component. 每个 Vue 应用都以一个 Vue 组件实例作为应用的根开始。在同一个应…...

[AI绘图] ComfyUI 中自定义节点插件安装方法

ComfyUI 是一个强大的 AI 图像生成工具,支持自定义节点插件扩展其功能。本文介绍 ComfyUI 中安装自定义节点插件的三种方法,包括 Git Clone 方式、插件管理器安装方式,以及手动解压 ZIP 文件的方法,并分析它们的优缺点。 1. Git Clone 方法 使用 git clone 是最稳定且推荐…...

数据库第二周作业

数据库约束、常见语句等 数据库约束 主键约束 #创建表&#xff0c;把id设为主键 mysql> create table test02(-> id int primary key, #----主键约束-> name varchar(50)-> ); Query OK, 0 rows affected (0.02 sec) ​ #插入数据测试 mysql> insert into te…...

Appium Inspector使用教程

1.下载最新版本 https://github.com/appium/appium-inspector/releases 2.本地启动一个Appium服务 若Android SDK已安装Appium服务&#xff0c;则在任意terminal使用appium启动服务即可 3.Appium Inspector客户端配置连接到Appium服务 Configuring and Starting a Session…...

【QT继承QLabel实现绘制矩形、椭圆、直线、多边形功能,并且支持修改大小,移动位置,复制,粘贴,删除功能】

文章目录 介绍绘制一个矩形&#xff08;椭圆&#xff09;roi绘制一个多边形roi对矩形roi的缩放&#xff1a;对多边形rio的缩放&#xff08;移动点的位置&#xff09; 介绍 绘制矩形&#xff0c;椭圆&#xff0c;直线实际用的都是是同一个思路&#xff1a;鼠标第一次点击就确定…...

Elasticsearch未授权访问漏洞

1、编辑elasticsearch.yml配置文件&#xff0c;添加认证相关配置 vim elasticsearch.ymlxpack.security.enabled: true xpack.license.self_generated.type: basic xpack.security.transport.ssl.enabled: true2、重启ElasticSearch # 重启方式可能略微不同 systemctl restar…...

怎么处理 Vue 项目中的错误的?

一、错误类型 任何一个框架,对于错误的处理都是一种必备的能力 在Vue 中,则是定义了一套对应的错误处理规则给到使用者,且在源代码级别,对部分必要的过程做了一定的错误处理。 主要的错误来源包括: 后端接口错误代码中本身逻辑错误二、如何处理 后端接口错误 通过axi…...

Elasticsearch原生linux部署集群 和docker部署集群

Easticsearch 是一个分布式的搜索和分析引擎&#xff0c;广泛应用于日志分析、全文检索、实时数据分析等场景。为了满足高可用性和高性能的需求&#xff0c;Elasticsearch 通常以集群的方式部署。部署 Elasticsearch 集群时&#xff0c;可以选择两种主要方式&#xff1a;原生 L…...

缓存设计模式

缓存设计模式&#xff08;Cache Design Pattern&#xff09;是一种用于存储和管理频繁访问数据的技术&#xff0c;旨在提高系统性能、降低数据库或后端服务的负载&#xff0c;并减少数据访问延迟。以下是几种常见的缓存设计模式&#xff0c;并用 Python Redis 进行示例代码实现…...

详解TCP的四次握手和三次挥手,以及里面每个阶段的状态

TCP 三次握手&#xff08;连接建立&#xff09; TCP 连接建立通过三次握手完成&#xff0c;确保双方同步初始序列号并确认可达性。 阶段说明 第一次握手 客户端 → 服务器&#xff1a;发送 SYN&#xff08;同步请求&#xff09;&#xff0c;携带初始序列号 seq x。客户端状态…...

Linux文件目录管理指令详解(上篇)

Linux文件目录管理指令详解&#xff08;上篇&#xff09; 在Linux操作系统中&#xff0c;文件目录管理是基础且重要的技能。通过一系列指令&#xff0c;用户可以高效地浏览、创建、修改和删除文件及目录。本文将详细介绍Linux中常用的文件目录管理类指令&#xff0c;包括pwd、…...

BCC-应用程序组件分析

libbpf-tools/gethostlatency 追踪glibc中的getaddrinfo、gethostbyname、gethostbyname2函数用时 # /usr/share/bcc/libbpf-tools/gethostlatency TIME PID COMM LATms HOST 14:58:32 8418 curl 313.635 www.taobao.com以# cur…...

无参数读文件和RCE

什么是无参数&#xff1f; 无参数&#xff08;No-Argument&#xff09;的概念&#xff0c;顾名思义&#xff0c;就是在PHP中调用函数时&#xff0c;不传递任何参数。我们需要利用仅靠函数本身的返回值或嵌套无参数函数的方式&#xff0c;达到读取文件或远程命令执行&#xff0…...

SpringMVC_day02

一、SSM 整合 核心步骤 依赖管理 包含 SpringMVC、Spring JDBC、MyBatis、Druid 数据源、Jackson 等依赖。注意点&#xff1a;确保版本兼容性&#xff08;如 Spring 5.x 与 MyBatis 3.5.x&#xff09;。 配置类 SpringConfig&#xff1a;扫描 Service 层、启用事务管理、导入…...

在Linux、Windows系统上安装开源InfluxDB——InfluxDB OSS v2并设置开机自启的保姆级图文教程

一、进入InfluxDB下载官网 InfluxData 文档https://docs.influxdata.com/Install InfluxDB OSS v2 | InfluxDB OSS v2 Documentation...

LinkedIn数据抓取零风险指南:亮数据住宅代理实现企业级合规采集

亮数据住宅代理实现企业级合规采集 一、前言二、尝试使用三、使用体验高效稳定易用性&#xff1a;合规与安全&#xff1a;技术支持&#xff1a; 四、适用场景五、推荐程度六、试用地址 一、前言 最近一位猎头小伙伴找到我&#xff0c;说目前很多公司的出海业务都在招人&#x…...

ROS2的发展历史、核心架构和应用场景

以下是对**ROS2&#xff08;Robot Operating System 2&#xff09;**的发展历史、核心架构和应用场景的详细解析&#xff0c;覆盖其技术演变、关键特性和生态系统&#xff1a; 一、ROS2的诞生背景&#xff1a;从ROS1到ROS2 1. ROS1的历史与局限 ROS1的起源&#xff1a; 2007年…...

PHP eval 长度限制绕过与 Webshell 获取

在 PHP 代码中&#xff0c;如果 eval($param); 存在且长度受限&#xff0c;并且过滤了 eval 和 assert&#xff0c;仍然可以通过多种方法绕过限制&#xff0c;获取 Webshell。 源码 <?php $param $_REQUEST[param]; if(strlen($param)<17 && stripos($param,…...