机器学习—特性缩放

特性缩放的技术能使梯度下降运行得更快,让我们先来看看功能大小之间的关系,这就是该特性的数字和相关参数的大小,作为一个具体的例子,让我们用两个特征来预测房子的价格,X1代表一个房子的大小,X2代表两个卧室的数量,假设X1通常在300-2000平方英尺之间,X2从0-5个卧室不等,所以在这个例子中,X1具有相对较大的值范围,X2的值范围相对较小。让我们以2000平方英尺的房子为例,有5间卧室,这个训练样本的价格是50万或50万美元,你认为参数大小的合理值是多少,让我们看一组可能的参数。W1=50,W2=0.1,b=50,所以在这种情况下,以千美元为单位的估计价格是10万K+0.5K+50K,所以这显然与50万美元的实际价格相去甚远,这不是一个很好的参数选择集。对于W1和W2,现在让我们看看另一种可能性,一号和二号正好相反,1是0.1,2是50,在W1和W2的选择中b也是50,W1相对较小,W2相对较大,50比0.1大得多,所以这里的预测价格是0.1*2000K+50*5+50,所以这个版本的模型预测价格为50万美元是一个更合理的估计,而且正好和房子的真实价格是一样的,所以希望你能注意到,当一个特性的可能值范围很大时就像平方英尺的大小,一直到2000,一个好的模型更有可能学会选择一个相对较小的参数,像0.1这样的值,同样的,当特征的可能值很小时,比如卧室的数量,那么它的参数的合理值就会比较大,像50。

这与梯度下降有什么关系?,让我们来看看特征的散点图,其中平方英尺的大小是横轴X1,卧室的数量X2在垂直轴上,如果绘制训练数据,你会注意到横轴的比例尺要大得多,或者值的范围要大得多,与垂直轴相比,让我们看看成本函数在等高线图中的样子,你可能会看到一个等高线图,其中水平轴的范围要窄的多,在0和1 之间,而垂直轴的值要大得多,10-100之间,所以等高线形成椭圆形或椭圆形一边短一边长,这是因为对W的一个非常小的变化,会对预估价格产生非常大的影响,对成本J有很大影响,因为w倾向于乘以一个非常大的数,即平方英尺大小。相比之下,为了大大改变预测,W需要更大的变化,因此对W2的小变化,不要改变成本函数。

如果你要进行梯。度下降,如果你用你的训练数据,因为轮廓又高又瘦,梯度下降最终可能会在很长一段时间内来回反弹,在它最终到达全球极小值之前,在这种情况下,要做的一件有用的事情是缩放特性,这意味着队训练数据执行一些转换,所以X1保存现在可能从0-1,X2也可以从0-1,所以数据点现在看起来更像这样,你可能会注意到,底部的地块模型现在与顶部的大不相同,最关键的一点是,X1和X2 现在都取了彼此可比的值范围,如果你在上面定义的成本函数上运行梯度下降,使用这个转换数据重新缩放X1和X2,然后轮廓就会更象这样,更像圆圈,少了高瘦,梯度下降可以找到一条更直接的路径到达全局最小值。

所以回顾一下,当你有不同的功能,具有非常不同的值范围,它会导致梯度下降运行缓慢,但是重新缩放不同的功能,所以它们都具有可比的值范围可以显著加快梯度下降。

如何实现特性缩放?

获取具有非常不同值范围的特性,并对它们进行缩放,使其具有彼此可比的价值范围。如果X1在3000-2000之间,获得X1缩放版本的一种方法是将每一个原始X取一个值除以范围的最大值2000,所以比例X1将从0.15开始到1,同样,因为X2从0-5,可以通过取每个原始的X2来计算X2的缩放版本除以5,这也是最大的,因此,比例X2现在将从0-1,所以如果你在图上绘制缩放的X1和X2 ,可能如下图所示

除了除以最大值,你也可以做所谓的均值正常化,所以这看起来是你从原始功能开始,然后再缩放它们,使它们的中心都在零附近,所以以前它们只有大于零的值,现在它们有负值也有正值,但可能通常在负一和正一之间,所以计算X1的平均归一化,先求平均值,也称为训练集上X1的平均值,让我们把这个叫做刻薄的μ1,例如,每亩地的平均面积是600平方英尺,所以让我们把每个X1-μ1/2000-300,2000是最大的,300是最小的,如果你这么做,你得到了规范化的X1介于-0.18到0.82,类似于平均归一化X2,你可以计算出特征二的平均值,例如μ2=2或3,然后你可以把每一个X2=X2-μ2/5-0,平均归一化X2介于-0.46到0.54,所以如果你用平均归一化X1和X2来绘制训练数据,可能是这样。

最后一种常见的重新标度方法叫做Z分数归一化,实现Z分数归一化,你需要计算每个特征的标准差,如果你不知道标准差是多少,不用担心,这门课不需要你知道,或者你听说过正态分布或者钟形曲线,有时也叫高斯分布,这就是正态分布的标准差,但如果你没听说过这个,你也不用担心,但如果你知道标准差是多少,然后实现Z分数归一化,你先计算平均值和标准差,通常用每个特征的小写希腊字母sigma表示,例如,可能特征一的标准差是450,μ1=600,归一化X1=X1-μ1/sigma1,你会发现Z分数归一化了X1介于-0.67到3.1,同样,如果你计算第二个特征的标准差是1.4,μ2=2000,归一化X2=X2-μ2/sigma2,在这种情况下,由X2归一化的Z分数现在介于-1.6到1.9,所以说,如果将训练数据绘制在归一化的X1和X2上,可能是如下图所示这样的。

作为经验法则,执行功能缩放时,你可能希望将功能范围从周围的任何地方,-1到周围的某个地方加上每个特征X的一个,但是这些值-1和-1可能有点松,所以如果特征范围在-3到3之间或者-0.3-0.3所有这些都是完全可以的,或者如果你有一个不同的功能X2,它的值在-2和5之间,但也许没问题,如果你也不管它,但是如果另一个像X3这样的特征在-100到100之间,然后就有了一个非常不同的值范围,从-1到1,因此,最好将此功能扩展到3,所以它的范围从接近-1到1,同样的,在-0.001到0.001之间,那么这些值就太小了,这意味着你可能也想重订它,最后,如果你的功能X5,例如医院的尺寸,病人的体温从98°到105°不等,在这种情况下,这些值大约是100,与其他比例特征相比,这实际上是相当大的,这实际上会导致梯度下降运行的更慢,因此,在这种情况下,功能缩放可能会有所帮助,进行功能重新缩放几乎没有任何害处,所以当有疑问时,就去执行它,这就是用这个小技术进行功能缩放的内容。你通常可以让梯度下降跑的更快。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

做安全后,再也不想打麻将了...

有时候,打麻将不是消遣,而是工作日常 摸起的每一张牌,可能都透露着安全从业者背后的“心酸”...... 看看下面经历,是否似曾相识!

2010年国赛高教杯数学建模A题储油罐的变位识别与罐容表标定解题全过程文档及程序

2010年国赛高教杯数学建模 A题 储油罐的变位识别与罐容表标定 通常加油站都有若干个储存燃油的地下储油罐,并且一般都有与之配套的“油位计量管理系统”,采用流量计和油位计来测量进/出油量与罐内油位高度等数据,通过预先标定的罐容表&#…

计算机网络基础(1)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络基础 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 计算机网…

解锁中东北非市场:Flat Ads通过效果营销赋能企业高效增长

10 月 15 日至 16 日,Flat Ads 参加了在土耳其伊斯坦布尔举行的 Mobidictum Conference 2024,这场土耳其乃至中东与北非地区规模最大的游戏产业盛会,吸引了来自全球的顶尖游戏企业、开发者和营销服务商。作为全球领先的营销平台,Flat Ads 在此次大会上重点展示了基于效果营销的…

STM32 USB CUBEMX

开发背景 使用的平台:STM32H750 注意事项 时钟必须是48MHZ,其它都不行 2. 将默认任务的堆栈设大一点 如果使用操作系统,USB任务跑在默认任务里,因此需要设置默认任务的堆栈缓存是直接定义的全局变量,需要设置编译器…

黑马程序员C++提高编程学习笔记

黑马程序员C提高编程 提高阶段主要针对泛型编程和STL技术 文章目录 黑马程序员C提高编程一、模板1.1 函数模板1.1.1 函数模板基础知识 案例一: 数组排序1.2.1 普通函数与函数模板1.2.2 函数模板的局限性 1.2 类模板1.2.1 类模板的基础知识1.2.2 类模板与函数模板1.…

机器学习在聚合物及其复合材料中的应用与实践

在当前的工业和科研领域,聚合物及其复合材料因其卓越的物理和化学性能而受到广泛关注。这些材料在航空航天、汽车制造、能源开发和生物医学等多个行业中发挥着至关重要的作用。随着材料科学的发展,传统的实验和理论分析方法已逐渐无法满足新材料研发的需…

使用Python进行GRPC和Dubbo协议的高级测试

01 GRPC测试 GRPC(Google Remote Procedure Call)是一种高性能、开源的远程过程调用(RPC)框架,由 Google开发并基于Protocol Buffers(protobuf)进行通信。它使用了HTTP/2协议作为传输层&#x…

纯css实现瀑布流! 附源码!!!

瀑布流用于展示图片信息,我这里用的背景颜色来代替图片 PC端效果 源码(直接复制粘贴就可以运行了!!!) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>PC端瀑布流</title><style>.box {w…

Github 优质项目推荐(第七期)

文章目录 Github优质项目推荐 - 第七期一、【LangGPT】&#xff0c;5.7k stars - 让每个人都成为提示专家二、【awesome-selfhosted】&#xff0c;198k stars - 免费软件网络服务和 Web 应用程序列表三、【public-apis】&#xff0c;315k stars - 免费 API四、【JeecgBoot】&am…

【深入学习Redis丨第八篇】详解Redis数据持久化机制

前言 Redis支持两种数据持久化方式&#xff1a;RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上&#xff0c;后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用&#xff0c;但是通常会将两者结合使用。 一、持久化 1.1、什么…

UE4 材质学习笔记10(程序化噪波/覆雪树干着色器/岩层着色器)

一.程序化噪波 柏林噪波是一种能生成很好的随机图案的算法&#xff0c;它是一个无限的、不重复的图案&#xff0c;可以采用这种基础图案并以多种方式对其进行修改&#xff0c; 将它缩放并进行多次组合&#xff0c;就可以创建一个分形图案。这些组合的缩放等级称为一个Octave 这…

docker数据管理和网络通信+docker实例+dockerfile镜像实战

一、Docker 的数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 1&#xff0e;数据卷&#xff08;主机和容器间的挂载&#xff09; 数据卷是一个供容器…

Python爬虫教程:Selenium可视化爬虫的快速入门

网络爬虫作为获取数据的一种手段&#xff0c;其重要性日益凸显。Python语言以其简洁明了的语法和强大的库支持&#xff0c;成为编写爬虫的首选语言之一。Selenium是一个用于Web应用程序测试的工具&#xff0c;它能够模拟用户在浏览器中的操作&#xff0c;非常适合用来开发可视化…

忘记密码?一招教你轻松重设欧拉系统密码!

在日常使用操作系统时&#xff0c;偶尔忘记密码确实会让人感到有些烦恼。无论是因为忙碌的生活节奏&#xff0c;还是不经意间的疏忽&#xff0c;这种情况都有可能暂时阻碍我们访问系统&#xff0c;进而影响到工作或学习的顺利进行。为了帮助大家更轻松地解决这个问题&#xff0…

【升华】人工智能10大常用算法与及代码实现(汇总)

人工智能10大常用算法与及代码实现&#xff0c;研究这10个例子作为人工智能入门例子&#xff0c;使用的语言为python语言。 这10大算法包括&#xff1a;线性回归、逻辑回归、决策树、朴素贝叶斯、支持向量机&#xff08;SVM&#xff09;、集成学习、K近邻算法、K-means算法、神…

Qt 实现动态时钟

1.实现效果 2.widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace

嵌入式-交叉编译链

一、Buildroot Official website&#xff1a; https://buildroot.org/downloads/manual/manual.html Buildroot是Linux平台上一个用于构建嵌入式Linux系统的框架&#xff0c;它简化了系统构建过程并实现了工作的自动化。以下是对Buildroot的详细介绍&#xff1a; 一、概述 …

excel如何把年龄转换为日期

总体的思路 我们从一个核心的日期函数出发 我们首先需要年月日 我的数据大概是这样的。 获取年份 第一步&#xff1a;提取岁前面的数字 left(目标单元格&#xff0c;“从左到右获取第几个字符”)第二步:替换掉数字后面的岁 第三步:新增一个单元格 在里面填入年 第四步:用…

pyaudio出现Invalid number of channels的解决方法

最近准备做个录制电脑本身的音频&#xff0c;于是用到了pyaudio。代码如下。 import pyaudiodef get_audio_devices():p pyaudio.PyAudio()device_info p.get_host_api_info_by_index(0)device_count device_info.get(deviceCount)devices []for i in range(device_count)…