特征缩放(Feature Scaling):中心化(零均值化)和标准化

引言

       在学习机器学习的时候常听到特征缩放这个词,这其实是机器学习对数据进行预处理的方法,下面我们将会详细的介绍特征缩放,本文包括以下几部分:

        1):什么是特征缩放?

         2):为什么需要特征缩放?

         3):有哪些特征缩放的方法,有什么性质和用途?

         4):标准化和归一化有什么区别?

如果你对以上问题不是很清楚,下面的内容是对你有帮助的。

什么是特征缩放?

        特征缩放是用来标准化自变量或者数据特征范围的一种方法,通常在数据预处理阶段执行。

为什么需要特征缩放?

         由于原始数据的值的范围相差特别大,为了使得机器学习算法能够更好的工作,所以会对原始数据进行标准化处理。

         1. 统一特征的权重 & 提高模型的准确性

                     如果某个特征的取值范围比其他特征要大的多,那么数值计算(比如计算欧式距离)就会受该特征的支配,但实际上这个特征并不一定是最重要的。一般的,在计算过程中我们把每个特征看作同等重要。归一化或者标准化数据就可以使不同维度的特征放到一起进行比较,从而大大提高模型的准确性。

         2. 提升梯度下降法的收敛速度

                     在使用梯度下降法求解最优解时,归一化/标准化数据可以加快梯度下降的求解速度。

特征缩放的方法?

       1.  Rescaling (min-max normalization)

                                                    

        将数值范围缩放到[0,1]区间内

       2.  Mean normalization

                                                    

        将数值范围缩放的[-1,1]区间内,其数据的均值为0

       3.  Standardization (Z-score Normalization)

                                                     

         将数值缩放到0附近,且数值的分布变成均值为0,标准差为1的正态分布(先减去均值对特征进行中心化处理,再除以标准差进行缩放)。

       4.  Scaling to unit length

                                             

           机器学习中常用的对特征向量进行缩放的方法,使得整个向量的长度为1,通常是用向量除以其欧几里得距离。

归一化和标准化的区别:

    归一化:将样本特征值转换到同一量纲下,把数据映射到[0,1]或者[-1,1]区间。

    标准化:将样本的特征值转换为标准值,每个样本点都会对标准化产生影响。

在Python中,数据规范化是一种预处理技术,通常用于确保数据在一个统一范围内,以便于后续分析、模型训练或减少特征间的量纲影响。常见的数据规范化方法包括: 1. **最小-最大规范化 (Min-Max Scaling)**: 这将所有值缩放到新的0到1范围之间。公式通常是 `x_norm = (x - x_min) / (x_max - x_min)`,其中 `x` 是原始值,`x_min` `x_max` 分别是数据集中的最小值最大值。 2. **Z-Score标准化 (Standardization or Z-score)**: 把每个数值转换成标准正态分布,即均值为0,标准差为1。公式是 `x_norm = (x - mean) / std_deviation`,其中 `mean` 是平均值,`std_deviation` 是标准差。 3. **零中心化 (Mean Removal)**: 只移除均值,不改变数据的尺度,常用于某些统计分析。公式是 `x_norm = x - mean`。 4. **单位化 (Normalization to Unit Interval)**: 类似于最小-最大规范化,但有时候只对0到1区间做归一化处理。 在Python中,可以使用pandas库轻松实现这些操作,例如: ```python import pandas as pd def normalize(data, method='min-max'): if method == 'min-max': data_normalized = (data - data.min()) / (data.max() - data.min()) elif method == 'zscore': data_normalized = (data - data.mean()) / data.std() else: raise ValueError(f"Invalid normalization method: {method}") return data_normalized # 示例 df = pd.DataFrame({ 'feature_1': [10, 50, 30, 70], 'feature_2': [20, 60, 40, 80] }) normalized_df = normalize(df) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值