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

4. KNN算法之 特征预处理(归一化标准化)

归一化、标准化、鸢尾花识别案例

1️⃣ 特征工程的目的 和 步骤
目的:利用专业背景知识和技巧处理数据,用于提升模型的性能;
步骤
① 特征提取(Feature Extraction):从原始数据中提取与任务相关的特性;特征向量;
② 特征预处理(Feature Preprocessing):将不同的单位的特征数据转成同一个范围内;防止因为量纲的问题对数据集产生影响;(归一化,标准化)
③ 特征降维(Feature Decomposition):将原始数据的为度降低;
④ 特征选择(Feature Selection):从特征中选择一些重要特征训练模型;
⑤ 特征组合(Feature Crosses):把多个特征合并组合成一个特征;一般采用 乘法或 加法;
特征降维和特征选择的区别:降维会改变原数据,而选择不会;
2️⃣特征预处理的两个手段:归一化和标准化;
3️⃣为什么要进行归一化和标准化:防止因为量纲的问题对模型产生影响;(量纲即权重、单位)
4️⃣特征预处理之 归一化介绍
① 目的:防止因为量纲(单位)问题,导致特征列的方差值相差较大,影响模型的最终结果; 所以通过公式把 各列的值 映射到 [0, 1] 区间 。
② 公式:
x'=(当前值-该列最小值) / (该列最大值-该列最小值)
x''=x' * (mx - mi) + mi

③ 公式解释:
x’ ——> 基于公式算出来的结果
x’’ ——> 最终要的结果
mx ——> 区间的最大值
mi ——> 区间的最小值

④ 弊端:容易受到 最大值和最小值 的影响,所以他一般用于处理 小数据集;

1. 特征预处理之归一化:

目的:防止因为量纲(单位)问题,导致特征列的方差值相差较大,影响模型的最终结果; 所以通过公式把 各列的值映射到 [0, 1]区间;
公式:x'=(当前值-该列最小值) / (该列最大值-该列最小值)x''=x' * (mx - mi) + mi;(下图中)
应用场景:适用于小数据集的处理;


图示:[mi, mx]是区间,默认是[0,1],左右都包括,mi默认是0,mx默认是1;x是当前值,公式为:x'=(当前值-该列最小值) / (该列最大值-该列最小值):① 当x=90时如上图计算出的 x’=1,若要映射到[0, 1]之间,最终结果 x’‘=1*(1+0)+0=1;(用第二个公式x''=x' * (mx - mi) + mi产生的原因:假如想将结果映射到任意值,如[3, 5]之间,而不是 [0, 1之间],需要基于算出来的 x’的值将数据映射到[3, 5],要执行此公式操作;)② 当x=60时,上图计算出的 x’=0,映射到[0, 1]之间的最终结果x’‘=0、映射到[3, 5]之间的最终结果值 x’‘=3;③ 当x=75时,上图计算出的 x’=0,映射到[0, 1]之间的最终结果x’‘=0.5、映射到[3, 5]之间的最终结果值 x’'=4;
但此方式有弊端,即便数据量很大(假设第一列有300w条),在算的时候也只考虑最大值、最小值,并不考虑其他的元素,所以此种方式很容易受到极值的影响;所以此归一化更适用于小数据集的操作,而标准化更适用于大数据集的操作;)

""" 案例:演示特征预处理之 归一化操作 回顾:特征工程的目的 和 步骤 目的:利用专业的知识背景和技巧处理数据,用于提升模型的性能 步骤: 1.特征提取 2.特征预处理(归一化,标准化) 3.特征降维 4.特征选择 5.特征组合 特征预处理之归一化介绍: 目的:防止因为量纲(单位)问题,导致特征列的方差值相差较大,影响模型的最终结果; 所以通过公式把 各列的值 映射到 [0, 1] 区间 。 公式: x'=(当前值-该列最小值) / (该列最大值-该列最小值) x''=x' * (mx - mi) + mi 公式解释: x' ——> 基于公式算出来的结果 x'' ——> 最终要的结果 mx ——> 区间的最大值 mi ——> 区间的最小值 弊端:容易受到 最大值和最小值 的影响,所以他一般用于处理 小数据集; """# 导包fromsklearn.preprocessingimportMinMaxScaler#归一化对象# 1.准备数据集(归一化之前的原数据)x_train=[[90,2,10,40],[60,4,15,45],[75,3,13,46]]# 2.创建归一化对象# transfer=MinMaxScaler()# 参数feature_range:指定归一化后的数据集的区间,默认为[0,1],如果就是这个区间,则参数可以省略不写transfer=MinMaxScaler(feature_range=(3,5))# 3.对原数据集进行归一化操作x_train_new=transfer.fit_transform(x_train)# 4.打印处理后的数据print("归一化后的数据集为:\n")print(x_train_new)

2. 特征预处理之标准化:

目的:防止因为量纲(单位)问题,导致特征列的方差值相差较大,影响模型的最终结果;所以通过公式把 各列的值映射到均值为0, 标准差为1的正态分布序列 。
公式:x'=(当前值-该列平均值) / (该列标准差σ)
应用场景:适用于大数据集的处理;


图示:即当数据列达到一定量级时,最小值和最大值的影响会很小,所以标准化公式中参考的是该列的均值mean以及标准差σ ,它映射的区间是均值为0、标准差为1的正态分布;)

""" 特征预处理之标准化介绍: 目的:防止因为量纲(单位)问题,导致特征列的方差值相差较大,影响模型的最终结果; 所以通过公式把 各列的值 映射到 均值为0, 标准差为1 的正态分布序列 。 公式: x'=(当前值-该列平均值) / (该列标准差σ) 应用场景:适用于大数据集的处理; 结论:无论是归一化,还是标准化,目的都是为了解决因为量纲(单位)问题,导致模型评估较低等问题. 回顾: 方差计算公式:该列每个值 和 该列均值的差 的平方和 的平均值. 标准差计算公式:方差开平方根 """# 导包fromsklearn.preprocessingimportStandardScaler#归一化对象# 1.准备数据集(归一化之前的原数据)x_train=[[90,2,10,40],[60,4,15,45],[75,3,13,46]]# 2.创建标准化对象transfer=StandardScaler()# 3.对原数据集进行标准化操作x_train_new=transfer.fit_transform(x_train)# 4.打印处理后的数据print("标准化后的数据集为:\n")print(x_train_new)# 5.打印数据集的均值和方差print(f'数据集的均值为:{transfer.mean_}')#均值print(f'数据集的均值为:{transfer.var_}')#方差var()print(f'数据集的均值为:{transfer.scale_}')#标准差std()

3. 正态分布:

方差计算公式:该列每个值 和 该列均值的差 的平方和 的平均值.(记忆:当前值 减去 平均值 平方 再求和 然后除以元素个数);
标准差计算公式:方差开平方根



图示:(图中右上角红色线是标准线)标准差越小,数据越集中、越稳定,波动幅度越小;标准差越大,数据越分散、起伏大,波动幅度越大。Xi 表示当前值,u表示均值、σ表示标准差,(当前值Xi - 均值u)的平方 求和(左边 (∑ i=1~N) 表示求和:该列有N个元素,所以求N个的和)即(当前值-均值) 平方再求和,然后除以元素个数。)

4. 归一化和标准化区别:

数据归一化数据标准化
如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变;
(度量值 x’ 容易受到最大值和最小值的影响,鲁棒性差)
如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大
(在数据量大的情况下,异常值对样本的均值和标准差的影响可以忽略不计)
应用场景:最大值与最小值非常容易受异常点影响,鲁棒性较差,只适合传统精确小数据场景应用场景:适合大数据场景
sklearn. preprocessing.MinMaxScaler(feature_range=(0,1)… )sklearn. preprocessing.StandardScaler()
http://www.jsqmd.com/news/697628/

相关文章:

  • 别再只盯着SBC了!保姆级教程:用AAC和aptX提升你的蓝牙耳机音质(附实测对比)
  • 避坑指南:CloudCompare八叉树下采样,选‘最近点’还是‘中心点’?结果大不同!
  • 全国启动为期一年“打非治违”专项行动
  • 3分钟搞定飞书文档转Markdown:feishu2md让你告别手动复制粘贴
  • 无人机SAR吊舱:从原理到实战,揭秘全天候“透视”地球的科技之眼
  • Qwerty Learner词典导入终极指南:打造你的专属打字训练营
  • AI结对编程实战:基于auto-dev框架的智能开发助手搭建指南
  • AltSnap:Windows窗口管理的终极免费神器,告别繁琐点击!
  • Music-API终极指南:一站式跨平台音乐资源解析解决方案
  • DDrawCompat:让经典DirectX游戏在现代Windows上焕发新生的终极兼容性解决方案
  • DDrawCompat:让经典Windows游戏在现代系统上完美运行的DirectX兼容神器
  • 基于Claude API的智能营销文案生成:Prompt工程与批量自动化实践
  • 支付宝红包套装闲置不用?一文读懂合规变现的正确方式 - 团团收购物卡回收
  • 别再死记硬背了!用这5个实战案例,帮你彻底搞懂ISO 19011审核准则、证据、发现与结论的关系
  • Unity 2D新手避坑指南:用Ruby‘s Adventure项目搞懂Tilemap、碰撞器和动画系统
  • MySQL数据库突然变‘只读’了?别慌,5分钟教你用SET GLOBAL read_only = 0搞定
  • vscode 中的 css 样式代码不显示折叠图标的解决方法
  • 别再只玩图片识别了!用Vuforia Model Target Generator搞定Unity实体物体AR交互(保姆级避坑指南)
  • 告别抓瞎!手把手教你用ISO-27145标准解析汽车故障码(附J2012DA表格使用指南)
  • LeagueAkari:英雄联盟玩家的智能助手 - 告别繁琐操作,专注游戏竞技
  • 红队渗透测试研究
  • HarmonyOS 启动模式实战:singleton、multiton 与 specified 怎么选?
  • 终极指南:如何用APK安装器在Windows电脑上直接运行安卓应用
  • 2026年盘点泉州隐形车衣服务,推荐靠谱品牌及费用情况 - myqiye
  • 分布式实时数据采集系统架构深度解析:闲鱼商品监控实战指南
  • Redis怎样利用Lua脚本批量抓取多类型数据
  • 深度学习实战:从零搭建CLIP——让AI看懂图像和文字的神奇配对
  • Voxtral-4B-TTS-2603行业落地:医疗问诊系统多语种用药指导语音生成
  • ToolOrchestra:基于思维链与工具调用的AI智能体工作流编排框架
  • 别再手动算了!用VerilogA在Cadence里快速验证你的8位二进制转换结果