机器学习特性缩放的介绍,什么时候为什么使用

简介: 机器学习特性缩放的介绍,什么时候为什么使用

在这篇文章中,我们将讨论什么是特征缩放以及为什么我们在机器学习中需要特征缩放。我们还将讨论数据的标准化,以及使用scikit-learn实现同样的标准化。

640.png

什么是特性缩放?

特征缩放是对输入数据进行标准化/规范化所需要的重要预处理之一。当每一列的值范围非常不同时,我们需要将它们扩展到公共级别。这些值重新规划成公共水平,然后我们可以对输入数据应用进一步的机器学习算法。

我们有不同的特征,其中一个特征的数据可能以公里表示,另一列的数据可能以米表示,最后一列的数据可能以厘米表示。在将算法应用到数据上之前,首先需要将数据放到“米”、“公里”或“厘米”的公共尺度上进行有效的分析和预测。

缩放前输入数据

640.png

在上面的数据集中,我们可以看到列1和列2中的值有非常不同的范围。第一列值表示年龄在30到90岁之间,而工资值在30000到15000之间变化。所以两列值的比例是截然不同的。在进一步分析之前,我们需要将其调整到相同的范围。

缩放后的输出

缩放值的一种方法是将所有列的值从0到1或者我们可以将它们的值放在-3到3之间。将值更新到新的范围的过程通常称为Normalization 或 Standardization.。

下面是标准缩放后的数据输出。从数据中可以看出,所有的值都在-3到3之间。

640.png

数据标准化后的数据如下。可以看出,年龄和薪水的数据介于0到1之间。

640.png

为什么我们需要特征缩放?

640.png

要获得正确的预测和结果,就需要特征缩放。如果某一列的值与其他列相比非常高,则具有更高值的列的影响将比其他低值列的影响高得多。高强度的特征比低强度的特征重得多,即使它们在确定输出中更为关键。因此,预测可能无法给出预期的结果,并且可能无法满足业务用例。

机器学习算法也可能对范围较小的列不敏感,并可能导致不一致

总而言之,功能缩放是必需的,因为:

  1. 回归系数直接受特征范围的影响
  2. 具有较高比例的功能比具有较低比例的功能更重要
  3. 如果我们具有缩放值,则可以轻松实现渐变下降
  4. 如果按比例缩放,某些算法将减少执行时间。
  5. 一些算法基于欧几里得距离,欧几里得距离对特征尺度非常敏感。

不同的特征缩放技术

我们可以使用不同的缩放技术来缩放输入数据集。我们可以应用以下任一方法:

Normalization 或 Standardization

什么是归一化(Normalization )?

归一化是在0到1之间缩放要素值归一化。这称为最小-最大缩放。

640.png

在上式中:

  • Xmax和Xmin是功能列的最大值和最小值
  • X的值始终在最小值和最大值之间

使用Scikit Learn进行数据归一化

以下是使用Scikit Learn进行归一化的简单实现。

importpandasimportnumpyasnpdataset=pandas.read_csv("./data/FirstDataset.csv")
X=dataset.iloc[:, :].valuesfromsklearn.preprocessingimportMinMaxScalernorm=MinMaxScaler()
X[:, 1:3] =norm.fit_transform(X[:, 1:3])
print(X)

什么是机器学习的标准化?

标准化基于标准偏差。它衡量功能中价值的传播。这是最常用的之一。

640.png

在标准缩放过程中,我们将特征的均值偏移为0,标准偏差为1。应用标准缩放器时,我们获得的值在-3到3范围内

640.png

当对特征值应用标准偏差时,特征集中值的99.7%介于-3 SD(标准偏差)至3 SD(标准偏差)之间。

640.png

让我们看一下示例:

640.png

在上述情况下,值在-3到3之间标准化,因此减小了数据列中值的范围。缩放这些值后,可以将其输入到机器学习算法进行进一步分析。

importpandasimportnumpyasnpdataset=pandas.read_csv("./data/FirstDataset.csv")
X=dataset.iloc[:, :].valuesfromsklearn.preprocessingimportStandardScalernorm=StandardScaler()
X[:, 1:3] =norm.fit_transform(X[:, 1:3])
print(X)
在Scikit-Learn中应用StandardScaler

当数据遵循高斯曲线时,我们可以应用标准缩放器。如果数据遵循高斯曲线,则标准偏差变得易于计算且有效,并且在预测时会给出出色的结果。

对特征缩放敏感的算法

下面给出了一些对特征缩放非常敏感的算法。这些算法对特征缩放很敏感,因为它们取决于距离和高斯曲线。

  • 线性和逻辑回归
  • 神经网络
  • 支持向量机
  • K均值聚类
  • K最近邻居
  • 主成分分析

对特征缩放不敏感的算法

对特征缩放不敏感的算法通常是“基于树的”算法

  • 分类和回归树
  • 森林随机回归

标准化和归一化

这些关键字经常可互换使用。虽然归一化是在0到1之间缩放值,但是标准化大约是将平均值设为0,将标准偏差设为1。在确定我们需要标准化还是归一化时,需要考虑一些要点。

  • 当数据代表高斯曲线时,可以使用标准化
  • 标准化不受异常值的影响。
  • 归一化对异常值的影响很高
  • 非高斯曲线表示时的归一化效果很好
目录
相关文章
成功解决matplotlib.units.ConversionError: Failed to convert value(s) to axis units: ‘LiR‘
成功解决matplotlib.units.ConversionError: Failed to convert value(s) to axis units: ‘LiR‘
|
9月前
|
机器学习/深度学习 算法 决策智能
遗传算法(GA)优化后RBF神经网络优化分析(Matlab代码实现)
遗传算法(GA)优化后RBF神经网络优化分析(Matlab代码实现)
220 0
|
9月前
|
机器学习/深度学习 算法 计算机视觉
【MATLAB第37期】 #保姆级教程 XGBOOST模型参数完整且详细介绍,调参范围、思路及具体步骤介绍
【MATLAB第37期】 #保姆级教程 XGBOOST模型参数完整且详细介绍,调参范围、思路及具体步骤介绍
|
9月前
|
算法 C语言 Windows
【MATLAB第9期】基于MATLAB的xgboost算法安装超详细教学(踩坑避雷指南)暂时仅限于Windows系统 #末尾含源码获取链接
【MATLAB第9期】基于MATLAB的xgboost算法安装超详细教学(踩坑避雷指南)暂时仅限于Windows系统 #末尾含源码获取链接
|
10月前
|
Docker 容器
docker如何将镜像中的文件下载到本地
docker如何将镜像中的文件下载到本地
1252 0
|
10月前
|
传感器 数据处理 图形学
线性插值的计算公式和使用场景
线性插值的计算公式和使用场景
230 0
成功解决ValueError: Found input variables with inconsistent numbers of samples: [86, 891]
成功解决ValueError: Found input variables with inconsistent numbers of samples: [86, 891]
成功解决smtplib.SMTPAuthenticationError: (535, b'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb
成功解决smtplib.SMTPAuthenticationError: (535, b'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb
|
Linux Android开发
LINUX下Android NDK下载并配置
LINUX下Android NDK下载并配置
383 0
|
数据可视化 数据挖掘 定位技术
Matplotlib可视化50例
本文整理自博客《Top 50 matplotlib Visualizations – The Master Plots》,原文章代码运行时存在很多错误,本文修复其错误,争取帮助读者更好地使用Matplotlib绘制各种图像。
522 0
Matplotlib可视化50例