机器学习python实践过程中对数据预处理中StandardScaler标准化方法的一些个人思考

这篇文章主要是想跟大家分享一下个人关于数据预处理中StandardScaler标准化的思考,同时记录一下,如果有误请见谅,欢迎一起探讨。当然,如果这篇文章还能入得了各位“看官”的法眼,麻烦点赞、关注、收藏,支持一下!

先给出数据处理前和处理后的对比图片,让大家直观感受一波

 图中横轴为x1,纵轴为x2,分别表示数据点的两个特征,且蓝、红、绿黄四根线的方程如下:

蓝线方程:x1=u1-σ1

红线方程:x1=u1+σ1

绿线方程:x2=u2+σ2

黄线方程:x2=u2-σ2

其中,u1、u2分别为数据点不同特征的均值,σ1、σ2分别为数据点不同特征的标准差,StandardScaler方法处理后u1=u2=0,σ1=σ2=1

对比上面的两图片,我们可以发现:

1、经过StandardScaler方法处理后,横纵坐标的最值、数据点的中心位置,以及标准差生了明显的变化

2、数据点之间的相对方位没有发生变化,但是数据点之间的距离却减小了(简单的说就是小明站在小红东偏西30°的方向上,且与小红之间的直线距离为100m,经过StandardScaler方法处理后,小明仍然站在小红东偏西30°的方向上,但是与小红之间的直线距离变成了1m)

3、数据点多集中于蓝、红、绿、黄四条实线所围成的区域内,经过StandardScaler方法处理后数据符合标准正态分布,即数据多集中在(-1,1)的区间内

由此,我们可以将StandardScaler方法对数据的处理分成两个步骤来看:

第一步:在坐标系中将原数据整体进行平移操作,使得原数据两个特征的的均值均为0

第二步:对平移后的原数据整体进行缩放,使得数据点之间的距离减小,直至原数据两个特征的标准差均为1

下面附上了图片生成的代码,大家有需要自取:

#导入numpy
import numpy as np
#导入画图工具
import matplotlib.pyplot as plt
#导入数据集生成工具
from sklearn.datasets import make_blobs
#导入StandarScaler
from sklearn.preprocessing import StandardScaler

X,y=make_blobs(n_samples=40,centers=2,random_state=50,cluster_std=2)#cluster_std表示每个类别的标准差(方差开平方)
X_1=StandardScaler().fit_transform(X)
point=(X,X_1)
title=("Original Data",
       "Standardized Data")

fig,ax=plt.subplots(1,2,figsize=(12,5.5))
plt.subplots_adjust(wspace=0.2,hspace=0.2)
#subplots_adjust函数的功能为调整子图的布局参数。对于没有设置的参数保持不变

for point,title,ax in zip(point,title,ax.flatten()):
    ax.scatter(point[:,0], point[:,1],c=y,cmap=plt.cm.cool)
    ax.set_xlim(min(point[:,0])-1, max(point[:,0])+1)#设置横轴的最大值和最小值
    ax.set_ylim(min(point[:,1])-1, max(point[:,1])+1)#设置纵轴的最大值和最小值
    feature0_std=np.std(point[:,0])#获取数据点第一个特征的标准差
    feature1_std=np.std(point[:,1])#获取数据点第二个特征的标准差
    feature0_mean=np.mean(point[:,0])#获取数据点第一个特征的均值
    feature1_mean=np.mean(point[:,1])#获取数据点第二个特征的均值
    #根据均值、标准差,针对数据点的两个特征分别画出距离各特征均值一个标准差的直线,也就是四条线
    ax.plot([feature0_std+feature0_mean,feature0_std+feature0_mean],
            [min(point[:,1])-1,max(point[:,1])+1],color='red',linestyle='-')
    ax.plot([-feature0_std+feature0_mean,-feature0_std+feature0_mean],
            [min(point[:,1])-1,max(point[:,1])+1],color='blue',linestyle='-')
    ax.plot([min(point[:,0])-1,max(point[:,0])+1],
            [feature1_std+feature1_mean,feature1_std+feature1_mean],color='green',linestyle='-')
    ax.plot([min(point[:,0])-1,max(point[:,0])+1],
            [-feature1_std+feature1_mean,-feature1_std+feature1_mean],color='yellow',linestyle='-')
    ax.set_title(title)

#显示图像
plt.show()

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值