特征归一化/标准化(Feature scaling)

目录

一、概念和公式

1.1 Rescaling (min-max normalization、range scaling)

1.2 Mean normalization

1.3 Standardization (Z-score Normalization)

1.4 Scaling to unit length

二、什么时候需要feature scaling?

三、什么时候不需要feature scaling?

四、代码示例

五、Ref


记录下Feature scaling的相关知识点

一、概念和公式

Feature scaling是对数据做变换的方式,会将原始的数据转换到某个范围,或者某种形态。

Feature scaling的目的是为了获得某种“无关性”----偏置无关、尺度无关、长度无关……当归一化/标准化方法背后的物理意义和几何含义与当前问题的需要相契合时,其对解决该问题就有正向作用,反之,就会起反作用。所以,“何时选择何种方法”取决于待解决的问题,即problem-dependent。

1.1 Rescaling (min-max normalization、range scaling)

min-max 归一化:

将每一维特征线性映射到目标范围[a,b],即将最小值映射为a,最大值映射为b,常用目标范围为[0,1]和[−1,1];

1.2 Mean normalization

mean 归一化:

将均值映射为0,同时用最大值最小值的差对特征进行归一化;

1.3 Standardization (Z-score Normalization)

标准化:

其中\sigma是样本的标准差(std);每维特征0均值1方差(zero-mean and unit-variance);

1.4 Scaling to unit length

将每个样本的特征向量除以其长度,即对样本特征向量的长度进行归一化,长度的度量常使用的是L2 norm(欧氏距离),有时也会采用L1 norm;

二、什么时候需要feature scaling?

下表给出了几个常见监督算法是否需要监督算法:

  • 涉及或隐含距离计算的算法,比如K-means、KNN、PCA、SVM等,一般需要feature scaling;
  • 损失函数中含有正则项时,一般需要feature scaling;
  • 梯度下降算法,需要feature scaling;

 

三、什么时候不需要feature scaling?

  • 与距离计算无关的概率模型,不需要feature scaling,比如Naive Bayes;
  • 与距离计算无关的基于树的模型,不需要feature scaling,比如决策树、随机森林等,树中节点的选择只关注当前特征在哪里切分对分类更好,即只在意特征内部的相对大小,而与特征间的相对大小无关;

四、代码示例

def normalization(data):
    _range = np.max(data) - np.min(data)
    return (data - np.min(data)) / _range
 
 
def standardization(data):
    mu = np.mean(data, axis=0)
    sigma = np.std(data, axis=0)
    return (data - mu) / sigma

五、Ref

### 主成分分析(PCA)中的数据预处理 在主成分分析(PCA)之前,通常推荐对数据进行 **标准化** 而不是简单的归一化[^1]。这是因为标准化能够使每种特征的均值变为0,标准差变为1,从而消除了因不同特征之间量纲差异而可能带来的偏差。 #### 标准化的意义 通过标准化操作,可以使各个变量处于相同的尺度范围内,这对于依赖于距离计算的方法尤为重要,比如PCA。如果不对数据进行这种变换,则某些具有较大数值范围的特征可能会主导整个分析过程的结果[^3]。 #### 归一化的局限性 相比之下,虽然归一化也可以调整数据到特定区间内(通常是[0, 1] 或 [-1, 1]) ,但它并不能改变原始数据分布形状或者解决由于单位不同的问题引起的权重失衡情况。因此,在执行像PCA这样的技术时,仅仅依靠归一化往往不足以提供最佳效果[^4]。 然而需要注意的是,“更好”的选择实际上取决于具体的场景以及目标需求: - 如果您的主要目的是让所有的输入都落在相似的数量级上,并且不需要考虑统计学意义上的中心趋势和离散程度的话,那么可以选择使用Min-Max Scaling即所谓的“归一化”。 - 当您希望保留更多关于原数据集内部结构的信息并减少由测量尺度引起的影响时,则更倾向于采用Z-score Normalization也就是我们常说的标准分数转换法来进行所谓‘标准化’处理[^2]. 以下是Python中实现这两种方法的一个简单例子: ```python from sklearn.preprocessing import StandardScaler, MinMaxScaler import numpy as np data = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]]) scaler_standard = StandardScaler() standardized_data = scaler_standard.fit_transform(data) scaler_minmax = MinMaxScaler(feature_range=(0, 1)) normalized_data = scaler_minmax.fit_transform(data) print("Standardized Data:\n", standardized_data) print("\nNormalized Data:\n", normalized_data) ``` 上述代码展示了如何利用`sklearn`库来分别完成数据的标准化归一化工作流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hello2mao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值