先自定义实现一下Scale Scale其本质上是一个线性的变化
from sklearn import preprocessing
import numpy as np
x=np.array([[10,112,2],[10,0,0],[0,30,-1]])
#求均值
X_mean=x.mean(axis=0)
X_std=x.std(axis=0)
print("这里自定义实现缩放",(x-X_mean)/X_std)
#求方差
#将每一个列都比昂其标准化的正态分布
x_scale=preprocessing.scale(x)
print(x_scale)
#结果为
这里自定义实现缩放 [[ 0.70710678 1.36606169 1.33630621]
[ 0.70710678 -0.99990083 -0.26726124]
[-1.41421356 -0.36616087 -1.06904497]]
[[ 0.70710678 1.36606169 1.33630621]
[ 0.70710678 -0.99990083 -0.26726124]
[-1.41421356 -0.36616087 -1.06904497]]
这里可以对比看出 其实就是将数据进行缩放 公式为 (X-Mean)/Std 中心化数据,那么到底为什么要中心化数据,首先我们了解机器学习是学习一个样本的特征那么我们先用代码来看一下缩放和位缩放的特征看变了没有
# 可视化数据展示
# 建立数据集列表
data_list = [x, x_scale]
# 创建颜色列表
color_list = ['blue', 'red']
# 创建标题样式
title_list = ['source data', 'scale']
# 设置画幅
plt.figure(figsize=(9, 6))
# 循环数据集和索引
for i, dt in enumerate(data_list):
# 子网格
plt.subplot(2, 3, i+1)
# 数据画散点图
plt.scatter(dt[:, 0], dt[:, 1], c=color_list[i])
#???离群数据是怎么定义的
#plt.xlim(-2,2)
#plt.ylim(-3,3)
# 设置标题
plt.title(title_list[i])
# 图片储存
#plt.savefig('xx.png')
从图上可以看出每一个列的特征分布一致 标准化的好处就是数据很明显更密集了这一点从对应的x轴和y轴可以很方便的看出来特别是有先距离算法 如Knn算法里标准化数据和未标准化数据的区别是非常大的