归一化的定义与作用

本文主要来源:http://blog.csdn.net/lanmeng_smile/article/details/49903865
归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。

首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。

归一化的目的,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系;或是为了作图,原来很难在一张图上作出来,归一化后就可以很方便的给出图上的相对位置等。

在使用机器学习算法的数据预处理阶段,归一化也是非常重要的一个步骤。例如在应用SVM之前,缩放是非常重要的。Sarle的神经网络FAQ的第二部分(1997)阐述了缩放的重要性,大多数注意事项也适用于SVM。缩放的最主要优点是能够避免大数值区间的属性过分支配了小数值区间的属性。另一个优点能避免计算过程中数值复杂度。因为关键值通常依赖特征向量的内积(inner products),例如,线性核和多项式核力,属性的大数值可能会导致数值问题。我们推荐将每个属性线性缩放到区间[-1,+1]或者[0, 1]。

当然,我们必须使用同样的方法缩放训练数据和测试数据。例如,假设我们把训练数据的第一个属性从[-10,+10]缩放到[-1, +1],那么如果测试数据的第一个属性属于区间[-11, +8],我们必须将测试数据转变成[-1.1, +0.8]。

### 归一化归一化定义 归一化是一种数据预处理技术,其目的是将不同量纲的数据映射到同一尺度范围内。常见的归一化方式包括线性缩放至[0,1]区间或[-1,1]区间[^1]。通过这种方式,可以使各特征具有相同的权重,从而提高模型训练效率并改善收敛性能。 反归一化则是指将经过归一化处理的数据还原为其原始数值范围的过程。这一过程通常用于验证预测结果的实际意义,在评估模型效果时尤为重要[^2]。 --- ### 归一化作用及应用场景 #### 作用 1. **提升模型训练速度**:当输入数据分布在较大范围内时,梯度下降法可能难以快速找到最优解。归一化能够缩小数据分布差异,使优化器更快地接近目标函数极值点。 2. **增强算法稳定性**:对于依赖欧几里得距离或其他基于距离的算法(如KNN、SVM),未归一化的高维度数据可能导致某些特征占据主导地位,进而影响最终决策边界的质量。因此,这些场景下需采用归一化操作以平衡各个维度的影响程度[^3]。 3. **减少过拟合风险**:部分神经网络架构对初始化参数敏感,未经适当调整可能会陷入局部最优点而无法有效泛化新样本。通过对输入层实施归一化措施有助于缓解此类现象的发生概率。 #### 应用场景 - 在图像识别领域,像素强度往往处于固定界限之内(例如RGB颜色空间内的取值范围为0~255)。此时运用`transforms.Normalize()`方法完成批量图片张量形式下的逐通道均值减去标准差除法运算即可实现自动化归一流程[^4]。 - 当构建推荐系统时遇到稀疏矩阵表示用户偏好行为模式的情况,则可通过Min-Max Scaling等方式把评分体系统一起来以便后续协同过滤机制发挥作用。 --- ### 反归一化作用及应用场景 #### 作用归一化的主要功能在于恢复被压缩变形后的实际物理含义或者业务指标解释能力。比如在金融预测任务完成后,需要将以百分比变化率呈现的结果重新转化为绝对金额单位供管理层审阅分析;又或者是医疗影像重建过程中为了展示清晰可见的效果图必须经历逆向变换步骤才能获得符合人类视觉习惯的画面质量。 #### 应用场景 - 使用Scikit-Learn库里的MinMaxScaler对象先调用`.fit(X)`记录最大最小统计特性再分别执行`.transform(new_data)``.inverse_transform(processed_data)`达到双向转换目的[^2]。 - PyTorch框架中同样支持自定义正则表达式的编写来满足特定需求下的复杂逻辑控制要求: ```python import torch from torchvision import transforms def denormalize(tensor, mean, std): """Apply inverse normalization.""" for t, m, s in zip(tensor, mean, std): t.mul_(s).add_(m) # t = t * s + m return tensor # Example usage channel_mean = (0.485, 0.456, 0.406) channel_std = (0.229, 0.224, 0.225) normalizer = transforms.Normalize(mean=channel_mean, std=channel_std) image_tensor = ... # Your input image as a Tensor normalized_image = normalizer(image_tensor) denormalized_image = denormalize(normalized_image.clone(), channel_mean, channel_std) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值