数据预处理方法—数据标准化和数据归一化
创作时间:
作者:
@小白创作中心
数据预处理方法—数据标准化和数据归一化
引用
CSDN
1.
https://m.blog.csdn.net/2301_80151359/article/details/142417975
1. 数据标准化
1.1 概念
标准化是将数据转化为均值为0,标准差为1的分布。通过标准化处理,所有特征在同一个尺度上,使得模型更加稳定和高效,尤其适用于正态(高斯)分布的数据。
1.2 原理
标准化后的数据具有相同尺度,减少特征之间量纲不一致的影响,有助于提高某些机器学习算法的性能。
1.3 核心公式
标准化公式:
其中,µ 是特征的均值,σ是特征的标准差。
假设X={X1,X2,...,Xn},其均值和标准差分别为:
1.4 Python案例
创建一个包含两个特征的数据集,对数据进行标准化。
步骤:
- 创建一个随机数据集
- 对数据进行标准化
- 绘制标准化前后的数据分布直方图
- 绘制标准化前后的数据散点图
在scikit-learn中,我们可以使用sklearn.preprocessing模块中的StandardScaler类实现数据标准化。
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', 'Feature2'])
# 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和一些常见的数据科学库来演示归一化过程,并且展示归一化前后的数据分布情况
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. 标准化和归一化对比
标准化和归一化都能实现对数据的缩放,不过它们各自的功能以及适用场景并不一样。
热门推荐
不锈钢保温杯内胆的三种材质区别
千万别用这7种杯子装开水,小心热水变“毒水”,家里有的赶紧扔
江西流坑村:保存最完整的江南古村落之一
抗焦虑饮食指南:压力一大我就想吃甜食?
为什么电视剧里都喜欢买芹菜?
开封灌汤包DIY挑战赛,谁是最强厨神?
天冷鼻炎易反复?医生提醒:冬季做好这几点措施,可有效缓解鼻炎
阳春著名景点有什么?阳春必游5大景点,你去过几个?
【鼻炎】等于鼻敏感?与鼻窦炎一样吗?症状、原因、治疗及预防方法一览
【鼻炎】等于鼻敏感?与鼻窦炎一样吗?症状、原因、治疗及预防方法一览
阳春春湾镇:旧圩新圩两相依,见证乡镇商业变迁
江苏省第五届广场舞大赛:舞出健康好身材
广场舞新潮流:年轻人爱上“僵尸舞”
宁波文旅发展:从"文化强国"到"银发经济"
广场舞热潮:从健身运动到文化现象
“我要上全运”2024年南粤古驿道定向大赛(阳江·阳春站)圆满完成
罗阳茶、酿油罩、春砂仁......罗阳古圩“一脚跨两市”,多多多靓货卖
苹果黄芪水 超简单的做法,低成本养生
苹果和麦冬是绝配,老辈们的做法,省钱实用
黄芪麦冬桂圆红枣枸杞苹果煮水的功效
手机相机扫码指南:操作教程、注意事项与常见问题解答
日本二战时期“河豚计划”:一个未实现的犹太人避难所构想
二战日本"河豚计划":欲借犹太移民改善与德国关系
世界银屑病日:《银屑病365问》权威科普助力患者科学管理
岳飞郾城大战,杨再兴小商桥英勇殉国
南宋抗金名将杨再兴:郾城之战的幕后英雄
福建连城培田古村:明清建筑瑰宝焕发文旅新生机
如何通过饮食补钙呢
春天抓住补钙“黄金期”,多吃这两种蔬菜,比牛奶钙含量还高!
从沟通到规则:六个维度培养听话孩子