数据预处理(归一化和标准化)

什么是特征预处理:通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

1.主要包含:

数值型数据的无量纲化

+归一化:通过对原始数据进行变换把数据映射到[mi,mx]之间

如对于以上数据,映射到[0,1],对于第一列,最大值是90,最小值是60,即X'=(90-60)/90-60=1,X''=1*(1-0)+0=1

如果有异常值(通常是最大值或者最小值),归一化将被严重影响。

+标准化:对原始数据进行变换到均值为0,标准差为1范围内

 

2.特征预处理API

为什么要进行归一化和标准化?

===答:特征的单位或者大小相差较大,或者某特征的方差相比其他特征要大出几个数量级,容易影响目标结果,使得机器学习算法无法学习到其他特征

如上图所示数据,里程数和公升数两个特征数值相差过大,在使用KNN时就会主要受里程数影响,公升数不起作用。

归一化API

 

练习:将约会数据归一化到[2,3]区间

数据见:https://pan.baidu.com/s/1qiWJkSRCS-yRx0g7VJcL9w
提取码:659r

 

from sklearn.preprocessing import MinMaxScaler
import pandas as  pd
def minmax_demo():    #分类特征提取
    #1.读取数据
    data = pd.read_csv('date.txt',delimiter='\t')
    print("data:\n",data)
    data = data.iloc[:,:3]
    print('data:\n',data)
    #2.实例化一个转换器
    transfer = MinMaxScaler(feature_range=[2,3])
    #3.调用fit_transform
    data_new = transfer.fit_transform(data)
    print('data_new:\n',data_new)
    return None
if __name__ == "__main__":
    minmax_demo()

标准化API

from sklearn.preprocessing import StandardScaler
import pandas as  pd
def stand_demo():    #分类特征提取
    #1.读取数据
    data = pd.read_csv('date.txt',delimiter='\t')
    print("data:\n",data)
    data = data.iloc[:,:3]
    print('data:\n',data)
    #2.实例化一个转换器
    transfer = StandardScaler()
    #3.调用fit_transform
    data_new = transfer.fit_transform(data)
    print('data_new:\n',data_new)
    return None
if __name__ == "__main__":
    stand_demo()

 

### 归一化标准化的概念 在深度学习的数据预处理阶段,归一化标准化是两种常见的数据尺度调整方法。这两种方法的目标都是使不同特征具有相同的尺度,从而提高模型的训练效率性能。 #### 标准化(Standardization) 标准化是一种将数据转换为标准正态分布的技术,其目标是让数据的均值为0,标准差为1。这种方法通常被称为Z-score标准化[^4]。 公式如下: ```python z = (x - μ) / σ ``` 其中,`x` 是原始数据点,`μ` 是数据的均值,`σ` 是数据的标准差。 #### 归一化(Normalization) 归一化则是将数据缩放到一个固定范围内,通常是[0, 1]区间。这种技术适用于需要限定输入范围的算法,例如某些神经网络激活函数。 公式如下: ```python x' = (x - min(x)) / (max(x) - min(x)) ``` 这里 `min(x)` `max(x)` 分别表示数据集中该特征的最大值最小值。 --- ### 方法的区别 两者的区别主要体现在以下几个方面: 1. **适用场景** - 标准化更适合于数据接近正态分布的情况,因为它假设数据遵循正态分布并将其转化为标准正态分布[^3]。 - 归一化则不依赖任何关于数据分布的假设,仅关注数据的实际取值范围。因此,对于那些不需要严格满足正态分布假设的任务,归一化可能是更好的选择。 2. **对异常值的影响** - 当存在极端异常值时,归一化可能会受到较大影响,因为这些异常值会显著拉大分母 `(max(x) - min(x))` 的值,进而压缩正常数据点的差异。 - 而标准化由于基于均值标准差计算,受异常值的影响相对较小,能够更好地保留样本间的距离关系。 3. **输出范围** - 标准化的结果是一个标准正态分布,理论上可以覆盖整个实数域 (-∞, +∞),但在实际应用中大多集中在 [-3, 3] 左右。 - 归一化的结果被强制约束在一个特定区间内(如 [0, 1] 或 [-1, 1]),这有助于一些对输入范围敏感的算法工作得更好。 --- ### 使用场景 - **标准化的应用场景** 如果数据大致呈正态分布或者希望减少异常值带来的干扰,则应优先考虑使用标准化。此外,在许多传统机器学习算法(如支持向量机、逻辑回归等)以及部分深度学习框架下,默认采用标准化作为默认预处理方式。 - **归一化的应用场景** 对于某些特殊类型的模型或任务而言,尤其是涉及梯度裁剪机制或是利用sigmoid/tanh这类饱型激活函数构建的深层架构时,往往推荐先执行归一化操作来确保权重更新过程平稳高效。另外,在图像像素值等领域也有广泛运用实例表明归一化能带来不错的效果提升[^2]。 --- ### 实现代码示例 以下是 Python 中实现归一化标准化的具体代码片段: #### Min-Max 归一化 ```python from sklearn.preprocessing import MinMaxScaler data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] scaler = MinMaxScaler() normalized_data = scaler.fit_transform(data) print(normalized_data) ``` #### Z-Score 标准化 ```python from sklearn.preprocessing import StandardScaler data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] scaler = StandardScaler() standardized_data = scaler.fit_transform(data) print(standardized_data) ``` --- ### 结论 综上所述,无论是归一化还是标准化都有各自的优势及局限性,具体选用哪种取决于待解决问题的特点以及所使用的建模工具特性等因素共同决定^。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不要绝望总会慢慢变强

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

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

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

打赏作者

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

抵扣说明:

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

余额充值