【特征缩放方法总结】

一、特征缩放概述

特征缩放是指通过某种方法将不同量纲的特征转换到相同量纲,以消除特征之间的量纲差异,从而提高模型的收敛速度和准确性。

二、离差标准化(Min-Max Normalization)

离差标准化将数据缩放到一个指定的范围(通常是[0, 1])。其公式为:

X ′ = X − X m i n X m a x − X m i n X' = \frac{X - X_{min}}{X_{max} - X_{min}} X=XmaxXminXXmin

1. 原理介绍

离差标准化通过将每个特征值减去最小值并除以范围(最大值减最小值),使得数据的最小值变为0,最大值变为1。

2. 优缺点

优点

  • 简单直观,容易理解和实现。
  • 适用于分布较稳定的数据集。

缺点

  • 对于有异常值的数据,敏感度较高,异常值会显著影响结果。
  • 依赖于数据的最小值和最大值,数据范围变化会导致重新计算。

3. 代码

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler

# 示例数据
data = {'feature': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)

# 使用MinMaxScaler进行离差标准化
scaler = MinMaxScaler()
df['normalized_feature'] = scaler.fit_transform(df[['feature']])

print(df)

三、标准差标准化(Standardization)

标准差标准化将数据转换为均值为0,标准差为1的标准正态分布。其公式为:

X ′ = X − μ σ X' = \frac{X - \mu}{\sigma} X=σXμ

1. 原理介绍

标准差标准化通过减去均值并除以标准差,使得数据分布的均值为0,标准差为1,适用于有正态分布假设的数据。

2. 优缺点

优点

  • 对于有正态分布假设的数据效果好。
  • 对异常值的影响相对较小。

缺点

  • 计算过程相对复杂。
  • 需要知道数据的均值和标准差,数据变化时需要重新计算。

3. 代码

from sklearn.preprocessing import StandardScaler

# 使用StandardScaler进行标准差标准化
scaler = StandardScaler()
df['standardized_feature'] = scaler.fit_transform(df[['feature']])

print(df)

四、小数定标标准化(Decimal Scaling Normalization)

小数定标标准化通过移动小数点位置将数据缩放到[-1, 1]范围。其公式为:

X ′ = X 1 0 j X' = \frac{X}{10^j} X=10jX

其中,j是使得 m a x ( ∣ X ′ ∣ ) < 1 max(|X'|) < 1 max(X)<1的最小整数。

1. 原理介绍

小数定标标准化通过移动小数点的位置,使得数据值的绝对值小于1。

2. 优缺点

优点

  • 实现简单,计算方便。
  • 不依赖于数据的统计特性(如均值、标准差)。

缺点

  • 对数据的分布没有改善作用。
  • 适用于值较为集中的数据,不适合范围差异大的数据。

3. 代码

# 小数定标标准化
def decimal_scaling(data):
    max_abs = max(abs(data))
    j = np.ceil(np.log10(max_abs))
    return data / (10**j)

df['decimal_scaled_feature'] = decimal_scaling(df['feature'])

print(df)

五、函数转换(Function Transformation)

函数转换通过对数据应用某种数学函数(如对数、平方根)来进行标准化。

1. 原理介绍

函数转换可以用于使数据更符合正态分布或减少数据的偏度,常用的转换方法有对数转换、平方根转换等。

2. 优缺点

优点

  • 可以有效处理数据的偏态分布。
  • 提高模型对异常值的鲁棒性。

缺点

  • 需要选择合适的函数,选择不当可能无法改善数据分布。
  • 某些函数转换可能会对数据范围有限制(如对数转换要求数据为正)。

3. 代码

# 对数转换
df['log_transformed_feature'] = np.log(df['feature'])

# 平方根转换
df['sqrt_transformed_feature'] = np.sqrt(df['feature'])

print(df)
  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武帝为此

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值