归一化和标准化

本文深入解析了数据预处理中的归一化和标准化技术,阐述了两者的概念、应用场景及核心区别。归一化旨在将数据转换为无量纲形式,便于不同单位的数据比较;标准化则使数据符合标准正态分布,适用于机器学习算法。文章还提供了多种实施方法,如Min-MaxNormalization、Z-score规范化等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概念:

归一化:1)把数据变成(0,1)或者(1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。2)把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。

标准化:在机器学习中,我们可能要处理不同种类的资料,例如,音讯和图片上的像素值,这些资料可能是高维度的,资料标准化后会使每个特征中的数值平均变为0(将每个特征的值都减掉原始资料中该特征的平均)、标准差变为1,这个方法被广泛的使用在许多机器学习算法中(例如:支持向量机、逻辑回归和类神经网络)。

2.区别:

归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,仅由变量的极值决定,因区间放缩法是归一化的一种。标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。

3.常用方法:

归一化:

(1)Min-Max Normalization

   x' = (x - X_min) / (X_max - X_min)

        X_min:样本最小值,X_max:样本最大值,但是最大最小值容易受到异常点的影响,健壮性比较差,使用于传统的精确小  数据。

(2)平均归一化
   x' = (x - μ) / (MaxValue - MinValue)

        μ为样本均值
  (1)和(2)有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

(3)非线性归一化
  1)对数函数转换:y = log10(x)
  2)反余切函数转换:y = atan(x) * 2 / π

标准化:

(1)Z-score规范化(标准差标准化 / 零均值标准化)
  x' = (x - μ)/σ

    σ:样本标准差。

参考:

简书:https://www.jianshu.com/p/95a8f035c86c

知乎:https://www.zhihu.com/question/20467170

知乎:https://zhuanlan.zhihu.com/p/35600334

 

 

<think>好的,用户现在想了解如何对天线数据集进行归一化标准化处理,以便转换为适合训练的CSV格式。我需要结合之前的对话内容来给出合适的回答。首先,回顾一下用户之前的问题,他们需要将天线数据的前四列作为结构参数,后200列为不同频点的S11值,转换为CSV格式。现在用户进一步询问数据预处理中的归一化标准化步骤。 首先,我需要确定用户的数据结构。之前的回答中提到前四列是结构参数(比如L, W, H, d),后面的列是S11参数值。现在用户需要进行归一化标准化处理,可能需要区分对待结构参数S11值,因为它们的量纲可能不同。例如,结构参数可能是毫米或厘米,而S11是分贝或其他单位。所以,可能需要不同的处理方式。 接下来,用户需要了解归一化标准化的区别。归一化通常指将数据缩放到[0,1]区间,而标准化则是将数据调整为均值为0,标准差为1。这两种方法的应用场景不同,归一化对异常值敏感,标准化更适合大多数机器学习算法,尤其是涉及距离计算的模型。 然后,我需要考虑如何在实际操作中应用这些方法。使用Python的pandasscikit-learn库是比较常见的做法。可能需要分别对结构参数S11参数进行处理,或者统一处理所有特征。需要给出代码示例,比如使用MinMaxScalerStandardScaler,并解释每个步骤的作用。 另外,用户可能想知道在什么时候进行这些预处理步骤。是在数据合并到CSV之前还是之后?根据之前的回答,数据转换是在合并到CSV时进行的,所以预处理应该在合并后的数据集上进行。但如果是多个文件合并,可能需要先合并再处理,或者逐个处理后再合并。需要明确步骤顺序。 还需要注意,归一化标准化后的数据需要保存到CSV中,以便后续训练使用。要提醒用户保存时不要包含索引,并验证处理后的数据范围是否符合预期,比如归一化后的数据是否在0-1之间,标准化后的均值标准差是否正确。 可能用户还会关心是否需要区分训练集测试集,在预处理时是否需要分开处理。但根据当前问题,用户可能只是需要整体的处理步骤,所以暂时可以假设整个数据集的处理,后续再考虑训练测试分割时的注意事项。 最后,根据用户之前的引用,比如引用[2]中提到线性方法的局限性,可能需要提到数据预处理如何帮助模型更好地捕捉非线性结构,但这点可能稍微超出当前问题的范围,可以简要提及或留到相关问题中。 总结步骤应该是:加载数据,区分结构参数S11参数,选择归一化标准化的方法,应用处理,合并数据,保存为CSV。同时需要给出代码示例,并解释关键点,如列的选择、处理顺序、验证方法等。</think>以下是对天线数据集进行归一化/标准化处理的完整解决方案,结合工程实践机器学习预处理要求: ### 一、数据处理流程设计 1. **参数类型区分处理** - 结构参数(前4列):建议采用标准化(Z-score),消除不同物理量纲的影响 $$ x' = \frac{x - \mu}{\sigma} $$ - S11参数(后200列):推荐Min-Max归一化,保留频响曲线形态特征 $$ x_{norm} = \frac{x - x_{min}}{x_{max} - x_{min}} $$ 2. **处理顺序**(基于前次转换结果) 原始数据 → 格式转换(上次处理) → 特征工程 → 归一化 → 训练用CSV[^1] ### 二、Python实现代码 ```python import pandas as pd from sklearn.preprocessing import StandardScaler, MinMaxScaler # 读取已转换的CSV df = pd.read_csv('antenna_dataset.csv') # 分离特征类型 structural_params = df.iloc[:, :4] # 前4列结构参数 s11_features = df.iloc[:, 4:] # 后200列S11参数 # 创建预处理管道 structural_scaler = StandardScaler() s11_scaler = MinMaxScaler(feature_range=(0, 1)) # 执行预处理 structural_processed = structural_scaler.fit_transform(structural_params) s11_processed = s11_scaler.fit_transform(s11_features) # 合并数据集 processed_data = pd.DataFrame( data=np.hstack([structural_processed, s11_processed]), columns=df.columns ) # 保存处理结果(添加预处理标记) processed_data.to_csv('antenna_dataset_normalized.csv', index=False) ``` ### 三、关键参数验证 1. **标准化验证** ```python assert np.allclose(structural_processed.mean(axis=0), 0, atol=1e-5) assert np.allclose(structural_processed.std(axis=0), 1, atol=1e-5) ``` 2. **归一化验证** ```python print(f"S11值域验证: Min={s11_processed.min():.2f}, Max={s11_processed.max():.2f}") # 应输出: Min=0.00, Max=1.00 ``` ### 四、工程实践建议 1. **参数保存** - 将scaler对象通过joblib保存,确保推理阶段使用相同参数 ```python from joblib import dump dump(structural_scaler, 'structural_scaler.joblib') dump(s11_scaler, 's11_scaler.joblib') ``` 2. **混合处理方法** 当存在多个物理量纲时,可对每个结构参数单独标准化: ```python for param in ['L', 'W', 'H', 'd']: scaler = StandardScaler() df[param] = scaler.fit_transform(df[[param]]) ``` ### 五、可视化验证(可选) 绘制处理前后参数分布对比: ```python import matplotlib.pyplot as plt plt.figure(figsize=(10,4)) plt.subplot(121) plt.hist(structural_params['L'], bins=30) plt.title('原始结构参数分布') plt.subplot(122) plt.hist(structural_processed[:,0], bins=30) plt.title('标准化后分布') plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值