机器学习——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的计算,直接使用训练集即可。因为现实中的数据有时候很难进行归一化。

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

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

相关文章

Element UI实现表格全选、半选

制作如图所示的表格全选、半选&#xff1a; 父组件 <template><div id"app"><SelectHost :hostArray"hostArray" /></div> </template><script> import SelectHost from ./components/SelectHost.vue export default…

深度学习入门1 基于Python的理论与实现

torch.unsqueeze()将一维数据变为二维数据&#xff0c;torch只能处理二维数据 tensor不能反向&#xff0c;variable可以反向。variable.data.numpy()转换为numpy 第3章 神经网络 实现softmax函数时的注意事项&#xff1a;为防止e的指数运算造成溢出 矩阵的第 0 维是列方向,第…

vue响应式原理剖析

一、什么是响应式? 我们先来看一下响应式意味着什么?我们来看一段代码: m有一个初始化的值,有一段代码使用了这个值; 那么在m有一个新的值时,这段代码可以自动重新执行; let m = 20 console.log(m) console.log(m * 2)m = 40上面的这样一种可以自动响应数据变量的代码机…

UDP数据报套接字编程

1.DatagramSocket API Socket是操作系统中的一个概念 本质上是一种特殊的文件 Socket就属于是把"网卡"这个设备,抽象成文件了 往Socket文件中写数据,就相当于通过网卡发送数据 从Socket文件读数据,就相当于通过网卡接受数据 在Java中就使用DatagramSocket这个类…

逼用户升级Win11,微软开始给Win10限速

随着Windows10的支持时间越来越短&#xff0c;微软也加大了对Win10用户的驱赶力度。 最近&#xff0c;微软官宣了将要在今年6月份降低OneNote for Windows 10的同步速度。软件也将和Windows10在今年的10月14日一同停止支持和维护。 这将影响实时协作和多设备访问。 对OneNote…

NodeJs之http模块

一、概念&#xff1a; 1、协议&#xff1a;双方必须共同遵从的一组约定。 Hypertext Transfer Protocol&#xff1a;HTTP&#xff0c;超文本传输协议 2、请求&#xff1a; ① 请求报文的组成&#xff1a; 请求行请求头空行请求体 ② 请求行&#xff1a;

26考研——图_图的应用(6)

408答疑 文章目录 四、图的应用图的应用考查形式最小生成树最小生成树概念最小生成树的性质最小生成树中某顶点到其他顶点是否具有最短路径的分析构造最小生成树的算法Prim 算法Prim 算法概述Prim 算法的构建思想Prim 算法的步骤Prim 算法的示例Prim 算法的性质 Kruskal 算法Kr…

Photoshop 2025安装包下载及Photoshop 2025详细图文安装教程

文章目录 前言一、Photoshop 2025安装包下载二、Photoshop 2025安装教程1.解压安装包2.运行程序3.修改安装路径4.设安装目录5.开始安装6.等安装完成7.关闭安装向导8.启动软件9.安装完成 前言 无论你是专业设计师&#xff0c;还是初涉图像处理的小白&#xff0c;Photoshop 2025…

MySQL-存储过程

介绍 基本语法 创建 调用 查看 删除 变量 系统变量 查看 设置 用户定义变量 赋值 使用 局部变量 声明 赋值 流程控制 参数 条件结构 IF case 循环结构 while repeat loop 游标 条件处理程序 介绍 举个简单的例子&#xff0c;我们先select某数据&…

debug 笔记:llama 3.2 部署bug 之cutlassF: no kernel found to launch!

1 问题描述 按照官方的写法 import torch from transformers import pipeline import os os.environ["HF_TOKEN"] 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 model_id "meta-llama/Llama-3.2-3B"pipe pipeline("text-generation", modelmode…

《Python实战进阶》No34:卷积神经网络(CNN)图像分类实战

第34集&#xff1a;卷积神经网络&#xff08;CNN&#xff09;图像分类实战 摘要 卷积神经网络&#xff08;CNN&#xff09;是计算机视觉领域的核心技术&#xff0c;特别擅长处理图像分类任务。本集将深入讲解 CNN 的核心组件&#xff08;卷积层、池化层、全连接层&#xff09;…

【银河麒麟系统常识】命令:uname -m(查看系统架构)

命令&#xff1a; uname -m 功能 常用的 Linux/Unix 终端命令&#xff0c;用于显示当前系统的硬件架构&#xff1b; 返回 返回系统的CPU架构类型&#xff0c;用于判断软件兼容性&#xff1b; 输出结果架构说明常见设备x86_64Intel/AMD 64位 CPU主流 PC、服务器aarch64ARM 64位 …

游戏引擎学习第183天

回顾和今天的计划 我对接下来的进展感到非常兴奋。虽然我们可能会遇到一些问题&#xff0c;但昨天我们差不多完成了将所有内容迁移到新的日志系统的工作&#xff0c;我们正在把一些内容整合进来&#xff0c;甚至是之前通过不同方式记录时间戳的旧平台层部分&#xff0c;现在也…

Redisson 实现分布式锁简单解析

目录 Redisson 实现分布式锁业务方法&#xff1a;加锁逻辑LockUtil 工具类锁余额方法&#xff1a;工具类代码枚举代码 RedisUtil 工具类tryLock 方法及重载【分布式锁具体实现】Supplier 函数式接口调用分析 Redisson 实现分布式锁 业务方法&#xff1a; 如图&#xff0c;简单…

鸿蒙Flutter实战:19-Flutter集成高德地图,跳转页面方式

前言 在之前的文章现有Flutter项目支持鸿蒙II中&#xff0c;介绍了如何使用第三方插件&#xff0c;同时给出了非常多的使用案例&#xff0c;如 flutter_inappwebview&#xff0c;video_player, image_picker 等&#xff0c;本文将开始介绍如何集成高德地图。 整体方案 通过 …

26考研——图_图的代码实操(6)

408答疑 文章目录 五、图的代码实操图的存储邻接矩阵结构定义初始化插入顶点获取顶点位置在顶点 v1 和 v2 之间插入边获取第一个邻接顶点获取下一个邻接顶点显示图 邻接表结构定义初始化图插入顶点获取顶点位置在顶点 v1 和 v2 之间插入边获取第一个邻接顶点获取下一个邻接顶点…

力扣32.最长有效括号(栈)

32. 最长有效括号 - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<stack> #include<string> /*最长有效*/ class Solution { public:int longestValidParentheses(string s) {stack<int> st;int ans0;int ns.length();st.push(-1);fo…

Node.js 下载安装及环境配置教程、卸载删除环境配置超详细步骤(附图文讲解!) 从零基础入门到精通,看完这一篇就够了

Node.js 安装 一、进入官网地址下载安装包 Node.js — Download Node.js 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位 Tips&#xff1a;如果想下载指定版本&#xff0c;点击【以往的版本】&#xff0c;即可选择自己想要的版本下载 二、安装程序…

SQLark导出功能详解|轻松管理数据库数据与结构

SQLark 作为一款数据库管理工具&#xff0c;为用户提供了丰富且实用的导出功能。在数据库管理与开发过程中&#xff0c;数据及结构的导出操作至关重要&#xff0c;关乎数据的迁移、备份、版本管理以及问题定位等诸多关键环节。接下来&#xff0c;让我们深入了解 SQLark 的导出功…

搭建Redis主从集群

主从集群说明 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 主从结构 这是一个简单的Redis主从集群结构 集群中有一个master节点、两个slave节点&#xff08;现在叫replica&#xff09;…