特征工程——为什么要对数值类型的特征做归一化?

2023-11-10

百面机器学习涉及到的问题,在我不理解和认为不对的地方做了补充和修改,若有错误欢迎指教!
为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。例如,分析一个人的身高和体重对健康的影响, 如果使用米( m )和千克( kg ) 作为单位, 那么身高特征会在1.6 1.8m,体重特征会在50 - 100kg 的范围内,分析出来的结果显然会倾向于数值差别比较大的体重特征。想要得到更为准确的结果, 就需要进行特征归一(Normalization ) 处理,使各指标处于同一数值量级,以便进行分析。

为什么需要对数值类型的特征做归一化?
对数值类型的特征做归一化可以将所以的特征都统一到一个大致相等的数值区间内。
比如x1的范围是[0,10],x2的范围是[0,100]。 两者的量纲是不等的,可想而知相比于x1,x2需要更多的迭代步数(梯度下降法)才能收敛到最佳值,从而使最后的结果更倾向于于x2特征。而当归一化后,x1,x2的量纲相等,不仅能减少迭代步数,还能使原本数值范围很大的特征不至于过度影响最后的结果。

我们不妨借助随机梯度下降的实例来说明归一化的重要性:
假设有两种数值型特征,的取值范围为[0,10] , 心的取值范围为[0, 3] , 于是可以构造_个目标函数符合图1.1 (a)中的等值图。
在这里插入图片描述

在学习速率相同的情况下,x1的更新速度会大于需要较多的迭代才能找到最优解。如果将x1和x2 归一化到相同的数值区间后,优化目标的等值图会变成图1.1 ( b ) 中的圆形,x1 和x2的更新速度变得更为一致,容易更快地通过梯度下降找到最优解。

当然,数据归一化并不是万能的。在实际应用中,通过梯度下降法求解的模型通常是需要归一化的, 包括线性回归逻辑回归支持向量机、神经网络等模型。但对于决策树模型则并不适用,以C4.5 为例,决策树在进行节点分裂时主要依据数据集D关于特征x 的信息增益比,而信息增益比跟特征是否经过归一化是无关的,因为归一化并不会改变样本在特征x上的信息增益。

常用的归一化:
线性函数归一化( Min-Max Scaling ) 。它对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。
x’ = (x - X_min) / (X_max - X_min)

零均值归一化(Z-Score Normalization)。可以将原始数据映射到均值为0,标准差为1的分布上。
x’ = (x - μ)/σ

参考:https://www.jianshu.com/p/95a8f035c86c
非线性归一化
(1)对数函数转换:y = log10(x)
(2)反余切函数转换:y = atan(x) * 2 / π
(3)经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。需要根据数据分布的情况,决定非线性函数的曲线,比如log(V, 2)还是log(V, 10)等。

中心化
  x’ = x - μ
某知乎答主的回答提到了他个人经验:一般来说,我个人建议优先使用标准哈。对于输出有要求时再尝试别的方法,如归一化或者更加复杂的方法。很多方法都可以将输出范围调整到[0, 1],如果我们对于数据的分布有假设的话,更加有效的方法是使用相对应的概率密度函数来转换。让我们以高斯分布为例,我们可以首先计算高斯误差函数(Gaussian Error Function),此处定为er fc(·),那么可以用下式进行转化:还没理解???
在这里插入图片描述

这篇博客提到他的经验:1) 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。2) 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
这篇博客提到他的经验:1) 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。2) 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

5 哪些模型必须归一化/标准化?
(1)SVM
  不同的模型对特征的分布假设是不一样的。比如SVM 用高斯核的时候,所有维度共用一个方差,这不就假设特征分布是圆的么,输入椭圆的就坑了人家,所以简单的归一化都还不够好,来杯白化才有劲。比如用树的时候就是各个维度各算各的切分点,没所谓。

(2)KNN
  需要度量距离的模型,一般在特征值差距较大时,都会进行归一化/标准化。不然会出现“大数吃小数”。

(3)神经网络
  1)数值问题
  归一化/标准化可以避免一些不必要的数值问题。输入变量的数量级会引起数值问题,但其实要引起也并不是那么困难。因为tansig(tanh)的非线性区间大约在[-1.7,1.7]。意味着要使神经元有效,tansig( w1x1 + w2x2 +b) 里的 w1x1 +w2x2 +b 数量级应该在 1 (1.7所在的数量级)左右。这时输入较大,就意味着权值必须较小,一个较大,一个较小,两者相乘,就引起数值问题了。
  假如你的输入是421,你也许认为,这并不是一个太大的数,但因为有效权值大概会在1/421左右,例如0.00243,那么,在matlab里输入 421·0.00243 == 0.421·2.43,会发现不相等,这就是一个数值问题。

2)求解需要
  a. 初始化:在初始化时我们希望每个神经元初始化成有效的状态,tansig函数在[-1.7, 1.7]范围内有较好的非线性,所以我们希望函数的输入和神经元的初始化都能在合理的范围内使得每个神经元在初始时是有效的。(如果权值初始化在[-1,1]且输入没有归一化且过大,会使得神经元饱和)
  b. 梯度:以输入-隐层-输出这样的三层BP为例,我们知道对于输入-隐层权值的梯度有2ew(1-a^2)*x的形式(e是誤差,w是隐层到输出层的权重,a是隐层神经元的值,x是输入),若果输出层的数量级很大,会引起e的数量级很大,同理,w为了将隐层(数量级为1)映身到输出层,w也会很大,再加上x也很大的话,从梯度公式可以看出,三者相乘,梯度就非常大了。这时会给梯度的更新带来数值问题。公式上还没理解,含以上明白???
  c. 学习率:由(2)中,知道梯度非常大,学习率就必须非常小,因此,学习率(学习率初始值)的选择需要参考输入的范围,不如直接将数据归一化,这样学习率就不必再根据数据范围作调整。 隐层到输出层的权值梯度可以写成 2ea,而输入层到隐层的权值梯度为 2ew(1-a^2)x ,受 x 和 w 的影响,各个梯度的数量级不相同,因此,它们需要的学习率数量级也就不相同。对w1适合的学习率,可能相对于w2来说会太小,若果使用适合w1的学习率,会导致在w2方向上步进非常慢,会消耗非常多的时间,而使用适合w2的学习率,对w1来说又太大,搜索不到适合w1的解。如果使用固定学习率,而数据没归一化,则后果可想而知。
  d.搜索轨迹:已解释
  
(4)PCA

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

特征工程——为什么要对数值类型的特征做归一化? 的相关文章

  • 机械硬盘分区 最佳性能方案

    原理 机械硬盘的通过磁头读写数据 由于角速度恒定 磁头越靠近外圈 扫描的扇区越多 读写速度越快 3个磁盘分区方案 假设 磁盘半径r 10 内层半径r1 2 5 中层半径r2 5 外层半径r3 7 5 内层面积 s1 r2xr2 r1xr1
  • Android APP 与STM32无线环境控制系统

    本系统为安卓APP的环境参数远程监控系统 以STM32F103单片机作为本设计的中控中心 结合物联网技术 以Android智能手机作为远程控制的客户端 通过8266 WiFi模块实现环境监控系统硬件与Android手机的交互 环境参数的反馈
  • Android学习——MultiAutoCompleteTextView组件

    1 编辑activity main xml文件 添加MultiAutoCompleteTextView组件
  • unity3d 5 GUI Texture不显示原因分析

    Unity5添加GUI组件game视图无显示可能原因如下 1 Transform position应该为0 1之间为屏幕占比 2 scale大小比例 3 如果用系统自带的第一人称控制器 组件中不包括GUI层 因此应该在添加组件中Render

随机推荐

  • WSL2使用cuda

    在微软最新发布的 Windows Insider 预览版本中 WSL2 获得了 GPU 计算支持 这意味着 Linux 二进制文件可以利用 GPU 资源 在 WSL 中进行机器学习 AI 开发或是数据科学等工作 微软在今年五月份的 Buil
  • Web安全基础-SQL MySQL

    文章目录 SQL简介 数据库简介 SQL语句 SELECT 语句 INSERT INTO 语句 Delete语句 Update 语句 Order by 语句 Where 语句 运算符 Limit 控制输出 MySQL注释符 MySQL基础
  • IntelliJ IDEA搭建一个Spring boot项目运行“Hello World”

    目录 IntelliJ IDEA搭建一个Spring boot项目 Hello World 创建新项目 1 Create New Project 2 创建Spring Boot项目 3 项目命名 4 搭建Web项目 5 选择项目目录 6 导
  • VMware tools详细教程 解决安装失败等问题

    1 打开虚拟机VMware Workstation 启动Ubuntu系统 菜单栏 虚拟机 安装VMware Tools 不启动Ubuntu系统是无法点击 安装VMware Tools 选项的 如下图 必须在虚拟机内部进行安装 2 如果弹出如
  • 创建安装程序Visual Studio Installer

    1 在vs2010 选择 新建项目 其他项目类型 Visual Studio Installer 安装项目 命名为 Setup1 这是在VS2010中将有三个文件夹 1 应用程序文件夹 表示要安装的应用程序需要添加的文件 2 用户的 程序
  • Redis的启动方式三种

    Redis的启动方式三种 启动一个 进入到redis中的src目录下 在控制台输入指令 redis server 注意 这样启动默认端口是 6379 进入客户端输入 redis cli 查看进程 杀死进程 指定端口启动redis服务 red
  • 如果使用Vue3.0实现一个 Modal,你会怎么进行设计?

    一 组件设计 组件就是把图形 非图形的各种逻辑均抽象为一个统一的概念 组件 来实现开发的模式 现在有一个场景 点击新增与编辑都弹框出来进行填写 功能上大同小异 可能只是标题内容或者是显示的主体内容稍微不同 这时候就没必要写两个组件 只需要根
  • mysql thread conn_Mysql thread 与 OS thread

    gt 欢迎阅读 陈同学博客原文 本文作为 Mysql插入2 6亿条垃圾数据后会发生什么 手工重现Mysql插入的 2 6亿 垃圾数据 的续篇 初始目的是想看看kill掉执行中的事务对应的os thread之后会发生什么 同时学习下mysql
  • apt-get简介

    在Ubuntu系统中 经常要用到apt get install指令来安装软件 由于常常需要root权限来操作 所以搭配sudo食用口感更佳 apt get指令对于安装 卸载 升级软件提供一条龙服务 对比于源码安装 实在是业界良心 源码安装
  • [Python系列-10]:Python之人工智能 - 基本工具 -4- 数组与矩阵数学工具Numpy

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119281620 目录 第1章
  • 【毕业设计_课程设计】基于协同过滤算法的个性化推荐系统(源码+论文)

    文章目录 0 项目说明 1 研究目的 2 研究方法 3 系统设计 3 1 前台模块 3 1 1 首页 3 1 2 个人中心 3 1 3 发布者中心 3 2 后台模块 3 2 1 首页 3 2 2 新闻管理 4 研究结论 5 界面展示 6 论
  • tree【WQS二分+MST】

    题目链接 洛谷 精确涉及到了WQS二分 BZOJ 2654 不推荐 个人不推荐做BZOJ2654的这道题 因为那道题可以水过去 不用WQS二分也是可以的 可以直接二分答案 显然是没有这个好的 先在这里讲一下什么是WQS二分吧 也是从网上看来
  • 关联分析的核心算法--Apriori算法的指标体系及实例

    Apriori算法的指标体系 Apriori算法生成的关联规则包含三个指标 支持度 Support 置信度 Confidemce 提升度 Lift 一般使用支持度 置信度二个指标判断事务之间关联关系的强弱 因此也被称为支持度 置信度框架 S
  • git海思Hi3516EV200的镜像,并编译

    前言 前面几篇文章讲解了 搭建海思的交叉编译环境的方法 选择docker或者 选择ubuntu下自己编译都行 DOPI的EV200开发板 板载的是SPI nand Flash W25N01GV 在编译uboot时 需要选择nand U Bo
  • 数据预测之BP神经网络具体应用以及matlab代码

    1 具体应用实例 根据表2 预测序号15的跳高成绩 表2 国内男子跳高运动员各项素质指标 序号 跳高成绩 30行进跑 s 立定三级跳远 助跑摸高 助跑4 6步跳高 负重深蹲杠铃 杠铃半蹲系数 100 s 抓举 1 2 24 3 2 9 6
  • Debian部署Tomcat 注册服务并设置开机启动

    目录 写在前面 1 准备工作 2 在Linux下安装Tomcat 3 Tomcat注册服务并设置开机启动 3 1 使用 rc local 配置开机启动 3 2 使用 etc init d 3 3 systemd配置 通用方式 在Debian
  • matlab显示全球海岸线

    1 使用matlab自带海岸线文件 画海岸线 load coast 加载matlab自带海岸线文件 plot long lat k LineWidth 0 7 绘制海岸线 并调整颜色 线类型 线宽 axis 180 180 90 90 调整
  • 轻松用Python控制你的手机

    Python编程几乎能做任何事 只要你敢想 敢尝试 今天来看下用Python代码怎么来控制你的安卓手机 具体的说是代替你的手 实现自动的触摸和一些动作 实现自动化操作 主要用的是安卓手机的Android调试桥 Android Debug B
  • Unity增量时间Time.deltaTime详解

    如博文无法正常显示 请访问原文地址 https blog csdn net ChinarCSDN article details 82914420 Unity增量时间详解 本文提供全流程 中文翻译 Chinar 坚持将简单的生活方式 带给世
  • 特征工程——为什么要对数值类型的特征做归一化?

    百面机器学习涉及到的问题 在我不理解和认为不对的地方做了补充和修改 若有错误欢迎指教 为了消除数据特征之间的量纲影响 我们需要对特征进行归一化处理 使得不同指标之间具有可比性 例如 分析一个人的身高和体重对健康的影响 如果使用米 m 和千克