机器学习特性缩放的介绍,什么时候为什么使用
在这篇文章中,我们将讨论什么是特征缩放以及为什么我们在机器学习中需要特征缩放。我们还将讨论数据的标准化,以及使用scikit-learn实现同样的标准化。
什么是特性缩放?
特征缩放是对输入数据进行标准化/规范化所需要的重要预处理之一。当每一列的值范围非常不同时,我们需要将它们扩展到公共级别。这些值重新规划成公共水平,然后我们可以对输入数据应用进一步的机器学习算法。
我们有不同的特征,其中一个特征的数据可能以公里表示,另一列的数据可能以米表示,最后一列的数据可能以厘米表示。在将算法应用到数据上之前,首先需要将数据放到“米”、“公里”或“厘米”的公共尺度上进行有效的分析和预测。
缩放前输入数据
在上面的数据集中,我们可以看到列1和列2中的值有非常不同的范围。第一列值表示年龄在30到90岁之间,而工资值在30000到15000之间变化。所以两列值的比例是截然不同的。在进一步分析之前,我们需要将其调整到相同的范围。
缩放后的输出
缩放值的一种方法是将所有列的值从0到1或者我们可以将它们的值放在-3到3之间。将值更新到新的范围的过程通常称为Normalization 或 Standardization.。
下面是标准缩放后的数据输出。从数据中可以看出,所有的值都在-3到3之间。
数据标准化后的数据如下。可以看出,年龄和薪水的数据介于0到1之间。
为什么我们需要特征缩放?
要获得正确的预测和结果,就需要特征缩放。如果某一列的值与其他列相比非常高,则具有更高值的列的影响将比其他低值列的影响高得多。高强度的特征比低强度的特征重得多,即使它们在确定输出中更为关键。因此,预测可能无法给出预期的结果,并且可能无法满足业务用例。
机器学习算法也可能对范围较小的列不敏感,并可能导致不一致
总而言之,功能缩放是必需的,因为:
- 回归系数直接受特征范围的影响
- 具有较高比例的功能比具有较低比例的功能更重要
- 如果我们具有缩放值,则可以轻松实现渐变下降
- 如果按比例缩放,某些算法将减少执行时间。
- 一些算法基于欧几里得距离,欧几里得距离对特征尺度非常敏感。
不同的特征缩放技术
我们可以使用不同的缩放技术来缩放输入数据集。我们可以应用以下任一方法:
Normalization 或 Standardization
什么是归一化(Normalization )?
归一化是在0到1之间缩放要素值归一化。这称为最小-最大缩放。
在上式中:
- Xmax和Xmin是功能列的最大值和最小值
- X的值始终在最小值和最大值之间
使用Scikit Learn进行数据归一化
以下是使用Scikit Learn进行归一化的简单实现。
import pandas
import numpy as np
dataset = pandas.read_csv("./data/FirstDataset.csv")
X = dataset.iloc[:, :].values
from sklearn.preprocessing import MinMaxScaler
norm = MinMaxScaler()
X[:, 1:3] = norm.fit_transform(X[:, 1:3])
print(X)
什么是机器学习的标准化?
标准化基于标准偏差。它衡量功能中价值的传播。这是最常用的之一。
在标准缩放过程中,我们将特征的均值偏移为0,标准偏差为1。应用标准缩放器时,我们获得的值在-3到3范围内
当对特征值应用标准偏差时,特征集中值的99.7%介于-3 SD(标准偏差)至3 SD(标准偏差)之间。
让我们看一下示例:
在上述情况下,值在-3到3之间标准化,因此减小了数据列中值的范围。缩放这些值后,可以将其输入到机器学习算法进行进一步分析。
import pandas
import numpy as np
dataset = pandas.read_csv("./data/FirstDataset.csv")
X = dataset.iloc[:, :].values
from sklearn.preprocessing import StandardScaler
norm = StandardScaler()
X[:, 1:3] = norm.fit_transform(X[:, 1:3])
print(X)
在Scikit-Learn中应用Standard Scaler
当数据遵循高斯曲线时,我们可以应用标准缩放器。如果数据遵循高斯曲线,则标准偏差变得易于计算且有效,并且在预测时会给出出色的结果。
对特征缩放敏感的算法
下面给出了一些对特征缩放非常敏感的算法。这些算法对特征缩放很敏感,因为它们取决于距离和高斯曲线。
- 线性和逻辑回归
- 神经网络
- 支持向量机
- K均值聚类
- K最近邻居
- 主成分分析
对特征缩放不敏感的算法
对特征缩放不敏感的算法通常是“基于树的”算法
- 分类和回归树
- 森林随机回归
标准化和归一化
这些关键字经常可互换使用。虽然归一化是在0到1之间缩放值,但是标准化大约是将平均值设为0,将标准偏差设为1。在确定我们需要标准化还是归一化时,需要考虑一些要点。
- 当数据代表高斯曲线时,可以使用标准化
- 标准化不受异常值的影响。
- 归一化对异常值的影响很高
- 非高斯曲线表示时的归一化效果很好
作者:Mayank Gupta
deephub翻译组
- js中数组(Array)的排序(sort)注意事项
- 双机热备工作模式及高内聚低耦合架构解释
- linux下拷贝命令中的文件过滤操作记录
- 关于智慧城市的十大反思(上)
- scrollTop与offsetTop研究
- JQuery笔记(四) 通用选择的尝试
- Docker容器学习梳理--基础环境安装
- Javascript:模仿淘宝的信用评价
- 好米有好价! 两枚4字母域名均以五位数交易
- Docker容器学习梳理--Volume数据卷使用
- 菜单常用:复位全部并设置某个项的样式
- Mysql更换MyISAM存储引擎为Innodb的操作记录
- 比特币分叉倒计时,糖果福利又来了
- 执行git push出现"Everything up-to-date"
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python csv文件记录流程代码解析
- 简单的Python人脸识别系统
- PHP实现的微信公众号扫码模拟登录功能示例
- PHP获取数据库表中的数据插入新的表再原删除数据方法
- python3 中时间戳、时间、日期的转换和加减操作
- PHP通过文件路径获取文件名的实例代码
- PHP常用正则表达式精选(推荐)
- PHP观察者模式实例分析【对比JS观察者模式】
- PHP实现图片压缩
- Python库安装速度过慢解决方案
- PHP按一定比例压缩图片的方法
- PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
- django restframework serializer 增加自定义字段操作
- 深入理解 PHP7 中全新的 zval 容器和引用计数机制
- python中可以声明变量类型吗