使用 make_blobs 生成数据集,指定样本数据量 n_samples=40,分类 centers=2,随机状态 random_state=50,标准差 cluster_std=2。
一、使用 StandardScaler 进行数据预处理
数据预处理代码如下:
#数据预处理
import numpy
import matplotlib.pyplot as plt #导入画图工具
from sklearn.datasets import make_blobs #导入数据集生成工具
from sklearn.preprocessing import StandardScaler
X , y = make_blobs(n_samples=40, centers=2,random_state=50,cluster_std=2)
#1.使用 StandardScaler 进行数据预处理
X_1 = StandardScaler().fit_transform(X)
#设定子图形的个数和排列方式
fig, sub = plt.subplots(1, 2 ,figsize = (10, 3))
#设置图题
titles = ('make_blobs datas',
'after StandardScaler')
Xs = [X,X_1]
#散点图绘制数据点
for X, title, ax in zip(Xs, titles, sub.flatten()):
ax.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', s=60)
ax.set_title(title)
plt.show()
执行结果为:
可见,
数据预处理前,样本的2个特征分贝对应x轴和y轴,特征1 的数值大约在 -8~7之间,特征2的数值大约在 -10~0之间;
数据预处理后,数据点的分布没有什么不同,但是x和y轴发生了变化,所有的特征1的数值都在-2~3之间,特征2的数值大约在 -3~2之间。
这是因为,StandardScaler 的原理是,将所有数据的特征值转换为均值为0,方差为1 的状态,这样 就可以确保数据的“大小”是一致的。
二、使用 MinMaxScaler 进行数据预处理
#数据预处理
import numpy
import matplotlib.pyplot as plt #导入画图工具
from sklearn.datasets import make_blobs #导入数据集生成工具
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
X , y = make_blobs(n_samples=40, centers=2,random_state=50,cluster_std=2)
#2.使用 MinMaxScaler 进行数据预处理
X_2 = MinMaxScaler().fit_transform(X)
#设定子图形的个数和排列方式
fig1, sub1 = plt.subplots(1, 2 ,figsize = (10, 3))
#设置图题
titles1 = ('make_blobs datas',
'after MinMaxScaler')
Xs1 = [X,X_2]
#散点图绘制数据点
for X, title, ax in zip(Xs1, titles1, sub1.flatten()):
ax.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', s=60)
ax.set_title(title)
plt.show()
执行结果为:
对比之前的原数据和经过 StandardScaler 后的数据,可以看到,经过 MinMaxScaler 预处理的数据两个特征值都被转换到 0到1之间。
三、使用 RobustScaler 进行数据预处理
#数据预处理
import numpy
import matplotlib.pyplot as plt #导入画图工具
from sklearn.datasets import make_blobs #导入数据集生成工具
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import RobustScaler
X , y = make_blobs(n_samples=40, centers=2,random_state=50,cluster_std=2)
#3.使用 RobustScaler 进行数据预处理
X_3 = RobustScaler().fit_transform(X)
#设定子图形的个数和排列方式
fig2, sub2 = plt.subplots(1, 2 ,figsize = (10, 3))
#设置图题
titles2 = ('make_blobs datas',
'after RobustScaler')
Xs2 = [X,X_3]
#散点图绘制数据点
for X, title, ax in zip(Xs2, titles2, sub2.flatten()):
ax.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', s=60)
ax.set_title(title)
plt.show()
执行结果为:
RobustScaler 与 StandardScaler 类似,但是更加“粗暴”,会直接把一些异常值踢出去。从图中可以看到,特征1 的数值控制在 -1.5~2之间,特征2的数值控制在 -2~1.5 之间。
四、使用 Normalizer 进行数据预处理
Normalizer 将所有样本的特征向量转化为欧几里得距离为1,也就是说它把数据的分布变成一个半径为1 的圆,或者一个球。Normalizer通常是在我们只想保留数据特征向量的方向,而忽略其数值的时候用。
执行结果为: