数据预处理方法—数据标准化和数据归一化

1.数据标准化

1.1 概念:

标准化是将数据转化为均值为0,标准差为1的分布。通过标准化处理,所有特征在同一个尺度上,使得模型更加稳定和高效,尤其适用于正态(高斯)分布的数据。

1.2 原理

标准化后的数据具有相同尺度,减少特征之间量纲不一致的影响,有助于提高某些机器学习算法的性能。

1.3 核心公式

标准化公式:

其中,µ 是特征的均值,σ是特征的标准差。

假设X={X1,X2,...,Xn},其均值和标准差分别为:

1.4.python案例

创建一个包含两个特征的数据集,对数据进行标准化。

步骤:

1.创建一个随机数据集

2.对数据进行标准化

3.绘制标准化前后的数据分布直方图

4.绘制标准化前后的数据散点图

scikit-learn 中,我们可以使用sklearn.preprocessing 模块中的StandardScaler类实现数据标准化。

python 复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
# 1. 创建一个随机数据集
np.random.seed(0)
data = np.random.rand(100, 2) * 1000
# 创建一个DataFrame
df = pd.DataFrame(data, columns=['Feature1', 'Feature2'])
# 2. 对数据进行标准化
scaler = StandardScaler()
data_standardized = scaler.fit_transform(data)
# 创建标准化后的DataFrame
df_standardized = pd.DataFrame(data_standardized, columns=['Feature1',colour='bule')
plt.hist(df_standardized['Feature2'], bins=20, alpha=0.7, label='Feature2',color='green')
# 3. 绘制标准化前后的数据分布直方图
plt.figure(figsize=(12,6))
# 标准化前
plt.subplot(1,2,1)
plt.hist(df['Feature1'], bins=20, alpha=0.7, label='Feature1', color='blue')
plt.hist(df['Feature2'], bins=20, alpha=0.7, label='Feature2', color='green')
plt.title('Before Standardization')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend()
# 标准化后
plt.subplot(1, 2, 2)
plt.hist(df_standardized['Feature1'], bins=20, alpha=0.7, label='Feature1',color='blue')

plt.hist(df_standardized['Feature2'], bins=20, alpha=0.7, label='Feature2',color='green')
plt.title('After Standardization')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend()
plt.tight_layout()
plt.show()
# 4. 绘制标准化前后的数据散点图
plt.figure(figsize=(12, 6))
# 标准化前
plt.subplot(1, 2, 1)
plt.scatter(df['Feature1'], df['Feature2'], color='blue', alpha=0.7)
plt.title('Before Standardization')
plt.xlabel('Feature1')
plt.ylabel('Feature2')
# 标准化后
plt.subplot(1, 2, 2)
plt.scatter(df_standardized['Feature1'], df_standardized['Feature2'],color='red',alpha=0.7)
plt.title('After Standardization')
plt.xlabel('Feature1')
plt.ylabel('Feature2')
plt.tight_layout()
plt.show()

输出结果:

2.数据归一化

2.1 概念

归一化是将数据缩放到特定范围(通常是[0,1]),特别适用于距离度量敏感的算法

2.2 原理

归一化后的数据每个特征的取值范围相同,有助于提高某些机器学习算法的性能。

2.3 核心公式

归一化公式:

其中,Xmax和Xmin分别是特征的最大值和最小值。

假设X={X1,X2,...Xn},其最小值和最大值分别为:

Xmin=min(X)

Xmax=max(X)

注意:我们也可以通过公式将数据压缩到其他指定的范围[a,b]:

其中,a和b是目标范围的上下界。

2.4 Python案例

当涉及到数据预处理中的归一化,一个经典的案例就是处理不同尺度或者有明显数值差异的的特征 。我们可以用鸢尾花数据集来演示。这个数据集包含了三种不同品种的鸢尾花,每种花有四个特征:花萼长度,花萼宽度,花瓣长度和花瓣宽度。

这里使用python和一些常见的数据科学库来演示归一化过程,并且展示归一化前后的数据分布情况

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.preprocessing import MinMaxScaler
# 加载鸢尾花数据集
iris=datasets.load_iris()
X=iris.data # 特征数据
# 创建MinMaxScaler对象
scaler = MinMaxScaler()
# 对数据集进行归一化
X_normalized = scaler.fit_transform(X)
# 可视化归一化前后的数据分布
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
# 归一化前的数据分布
ax1.scatter(X[:,0],X[:,1],c=iris.target)
ax1.set_title('Before Normalization')
ax1.set_xlabel('Sepal Length (cm)')
ax1.set_ylabel('Sepal Width (cm)')
# 归一化后的数据分布
ax2.scatter(X_normalized[:,0],X_normalized[:,1],c=iris.target)
ax2.set_title('After Normalization')
ax2.set_xlabel('Sepal Length (normalized)')
ax2.set_ylabel('Sepal Width (normalized)')
plt.tight_layout()
plt.show()

输出结果

3.标准化和归一化对比

标准化和归一化都能实现对数据的缩放,不过它们各自的功能以及适用场景并不一样。

相关推荐
xiaoxiaoxiaolll34 分钟前
期刊速递 | 《Light Sci. Appl.》超宽带光热电机理研究,推动碳纳米管传感器在制药质控中的实际应用
人工智能·学习
练习两年半的工程师40 分钟前
AWS TechFest 2025: 风险模型的转变、流程设计的转型、生成式 AI 从实验走向实施的三大关键要素、评估生成式 AI 用例的适配度
人工智能·科技·金融·aws
Elastic 中国社区官方博客3 小时前
Elasticsearch:智能搜索的 MCP
大数据·人工智能·elasticsearch·搜索引擎·全文检索
stbomei3 小时前
从“能说话”到“会做事”:AI Agent如何重构日常工作流?
人工智能
yzx9910134 小时前
生活在数字世界:一份人人都能看懂的网络安全生存指南
运维·开发语言·网络·人工智能·自动化
许泽宇的技术分享5 小时前
LangGraph深度解析:构建下一代智能Agent的架构革命——从Pregel到现代AI工作流的技术飞跃
人工智能·架构
乔巴先生245 小时前
LLMCompiler:基于LangGraph的并行化Agent架构高效实现
人工智能·python·langchain·人机交互
张子夜 iiii6 小时前
实战项目-----Python+OpenCV 实现对视频的椒盐噪声注入与实时平滑还原”
开发语言·python·opencv·计算机视觉
静西子6 小时前
LLM大语言模型部署到本地(个人总结)
人工智能·语言模型·自然语言处理
cxr8286 小时前
基于Claude Code的 规范驱动开发(SDD)指南
人工智能·hive·驱动开发·敏捷流程·智能体