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

机器学习10-特征缩放

特征缩放的目的是确保不同特征的数值范围相近,使得模型在训练过程中更加稳定,加速模型收敛,提高模型性能。具体而言,零均值单位方差的目标有以下几点好处:

1. 均值为零(Zero Mean):通过减去特征的均值,可以使特征分布的中心位于零点。这样做有助于消除不同特征之间的偏差,确保模型不会在某些特征上过度拟合。如果某个特征的均值远离零,模型可能会更关注那些数值较大的特征。

2. 单位方差(Unit Variance):通过除以特征的标准差,可以将特征的尺度统一为相似的范围。这是因为不同特征可能具有不同的数值范围,如果某个特征的值较大,它可能会在模型中占据主导地位,而忽略其他特征。通过保持单位方差,确保了所有特征对模型的贡献相对均衡。

总的来说,零均值和单位方差的特征更容易被模型理解和处理,有助于提高模型的性能和泛化能力。特征缩放通常对那些使用距离度量或梯度下降等优化算法的模型尤为重要,如支持向量机、k最近邻、神经网络等。

单位方差指的是数据的方差被标准化为 1。
在特征缩放中,我们通常使用 StandardScaler 来实现单位方差。StandardScaler 通过减去均值并除以标准差的方式,将数据的分布调整为均值为 0,标准差为 1。

下面是一个简单的例子,演示如何使用 StandardScaler 实现单位方差:

import numpy as np
from sklearn.preprocessing import StandardScaler

# 创建一组示例数据
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# 初始化 StandardScaler
scaler = StandardScaler()

# 计算均值和标准差,并进行缩放
scaled_data = scaler.fit_transform(data)

# 输出缩放后的数据
print("原始数据:")
print(data)
print("\n缩放后的数据(单位方差):")
print(scaled_data)

结果:

缩放后的数据(单位方差):

[[-1.22474487 -1.22474487 -1.22474487]

[ 0. 0. 0. ]

[ 1.22474487 1.22474487 1.22474487]]

解释:

在这个例子中,我们创建了一个 3x3 的矩阵作为示例数据。然后,使用 StandardScaler 对数据进行缩放。输出中的缩放后数据的每个特征都具有零均值和单位方差。这是通过 fit_transform 方法完成的,该方法计算数据的均值和标准差,并将数据进行相应的缩放。

在实际应用中,特征缩放是机器学习中的一项常见预处理步骤,有助于确保不同特征之间的尺度不同不会影响模型的性能。

这段程序使用了`StandardScaler`类进行数据的标准化,标准化是一种特征缩放的方法。下面是这段程序的数学运算步骤

1. 计算均值(Mean):

对每个特征,计算其在所有样本上的平均值。对于示例数据,每一列的均值分别是

(1 + 4 + 7) / 3, (2 + 5 + 8) / 3, (3 + 6 + 9) / 3

2. 计算标准差(Standard Deviation):

对每个特征,计算其在所有样本上的标准差。标准差是每个数据点与均值的偏差的平方的平均值的平方根。对于示例数据,可以计算每列的标准差。

3. 进行缩放操作:

使用标准化公式进行缩放。对于每个特征,将其减去均值,然后除以标准差。这样可以确保每个特征的均值为0,标准差为1。

对于示例数据,缩放后的值可以通过以下公式计算:

x_{\text{scaled}} = \frac{x - \text{mean}}{\text{std}}

其中, x 是原始数据中的每个数据点, mean 是均值, std 是标准差。

结论:

这样,经过标准化处理后,每个特征的均值为0,标准差为1,即实现了单位方差


http://www.kler.cn/a/232354.html

相关文章:

  • ETH挖矿显卡超频信息汇总
  • spring boot整合https协议
  • java基础入门学习09-迭代器
  • Serverless架构在实时数据处理中的应用
  • 整理iPhone空间:iphone怎么删除相簿
  • 【CSS】什么是BFC?
  • 记录下ibus-libpinyin输入法的重新安装
  • three.js 箭头ArrowHelper的实践应用
  • Python第三方库国内下载镜像源地址
  • react中hook封装一个table组件
  • Java项目管理01-Maven基础
  • Mac安装nvm装完项目内node找不到
  • ChatGPT 变懒最新解释!或和系统Prompt太长有关
  • 自然语言学习nlp 六
  • 【flink状态管理(三)】StateBackend的整体设计、StateBackend创建说明
  • 从REPR设计模式看 .NET的新生代类库FastEndpoints的威力
  • 故障诊断 | 一文解决,TCN时间卷积神经网络模型的故障诊断(Matlab)
  • 设计模式理解:单例模式+工厂模式+建设者模式+原型模式
  • 怎么在Springboot启动的时候就启动一个永不停止的线程
  • 20240208作业
  • LeetCode-第28题-找出字符串中第一个匹配项的下标
  • Rust语言入门(第3篇)
  • Go Context -- 管理请求的上下文信息
  • vue3 之 商城项目—一级分类
  • 删除和清空Hive外部表数据
  • 上位机建立TCP/IP连接:Matlab实现