归一化和标准化的概念
•归一化和标准化都是数据预处理技术,旨在调整数据的尺度,但它们的方法和适用场景有所不同。以下是两者之间区别的详细介绍:12
- 归一化(Normalization)主要是将数据缩放到或[-1,1]区间内,通常是通过将数据除以最大值或最小值来实现。这种方法适用于需要将数据限制在特定范围内的算法,如支持向量机(SVM)、K近邻(KNN)等,以及需要计算距离的算法,如K-means聚类和某些类型的神经网络。
- 标准化(Standardization)也称为Z值归一化,是将数据的均值调整为0,标准差调整为1。这实际上是将数据转换为标准正态分布。标准化适用于大多数线性模型,如逻辑回归和线性回归,因为它保持了样本间的相对距离。
简而言之,归一化通常用于将数据限制在特定范围内,而标准化则是为了调整数据的分布,使其具有零均值和单位标准差。这两种方法都有助于提高数据的一致性和算法的性能。
为什么做归一化和标准化?
特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些模型(算法)无法学习到其它的特征。
数据归一化API:
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import seaborn as sns
import pandas as pd
#加载数据集
iris_data = load_iris()
print(f'数据集-->\n{iris_data.feature_names}\n{iris_data.data[:10]}')
print(f'\n目标数-->\n{iris_data.target_names}\n{iris_data.target}')
#数据展示
iris_df = pd.DataFrame(iris_data['data'],columns=iris_data.feature_names)
iris_df['target'] = iris_data.target
print(iris_df)
feature_names = list(iris_data.feature_names)
print(feature_names)
for i in range(len(feature_names)):
for j in range(i+1,len(feature_names)):
col1 = feature_names[i]
col2 = feature_names[j]
sns.lmplot(x=col1,y=col2,hue='target',data=iris_df)
plt.xlabel(col1)
plt.ylabel(col2)
plt.title(f'{col1} vs {col2}')
plt.show()
标准化算法实现
from sklearn.preprocessing import StandardScalerdata = [[88, 90, 4], [77, 96, 6], [52, 95, 2], [89, 52, 7]]
# 2. 初始化标准化对象
transformer = StandardScaler()
# 3. 对原始特征进行变换
data = transformer.fit_transform(data)
# 4. 打印归一化后的结果
print(data)
# 5 打印每1列数据的均值和标准差
print('transfer.mean_-->', transformer.mean_)
print('transfer.var_-->', transformer.var_