共计 1509 个字符,预计需要花费 4 分钟才能阅读完成。
个别状况下咱们在做数据预处理时都是应用 StandardScaler 来特色的标准化,如果你的数据中蕴含异样值,那么成果可能不好。
这里介绍的办法叫 Robust Scaling,正如它的名字一样可能取得更强壮的特色缩放后果。与 StandardScaler 缩放不同,异样值基本不包含在 Robust Scaling 计算中。因而在蕴含异样值的数据集中,更有可能缩放到更靠近正态分布。
StandardScaler 会确保每个特色的平均值为 0,方差为 1。而 RobustScaler 应用中位数和四分位数(四分之一),确保每个特色的统计属性都位于同一范畴。
公式如下:
咱们应用一些数据看看他的后果, 首先创立测试数据
import numpy as np
import matplotlib.pyplot as plt
nb_samples = 200
mu = [1.0, 1.0]
covm = [[2.0, 0.0], [0.0, 0.8]]
X = np.random.multivariate_normal(mean=mu, cov=covm, size=nb_samples)
而后应用三个罕用的缩放办法对数据进行预处理:
from sklearn.preprocessing import StandardScaler, RobustScaler, MinMaxScaler
ss = StandardScaler()
X_ss = ss.fit_transform(X)
rs = RobustScaler(quantile_range=(10, 90))
X_rs = rs.fit_transform(X)
mms = MinMaxScaler(feature_range=(-1, 1))
X_mms = mms.fit_transform(X)
可视化:
fig, ax = plt.subplots(2,2, sharex=True, sharey=True, dpi=1000)
ax[0][0].scatter(X[:,0], X[:,1], c='gray', alpha = .8)
ax[0][1].scatter(X_ss[:,0], X_ss[:,1], c='gray', alpha = .8)
ax[1][0].scatter(X_rs[:,0], X_rs[:,1], c='gray', alpha = .8)
ax[1][1].scatter(X_mms[:,0], X_mms[:,1], c='gray', alpha = .8)
ax[0][0].set_title('Original dataset')
ax[0][1].set_title('Standard Scaling')
ax[1][0].set_title('Robust Scaling')
ax[1][1].set_title('Min-Max Scaling')
plt.tight_layout()
为什么这个办法不会受异样值的影响?
如果数据中存在很大的异样值,可能会影响特色的平均值和方差进而影响标准化后果。而 RobustScaler 应用中位数和四分位数间距进行缩放,这样能够放大异样值的影响.
最初咱们再看一下这个办法的参数
quantile_range : tuple (q_min, q_max), 0.0 < q_min < q_max < 100.0, default=(25.0, 75.0)
quantile_range 用于计算 scale_的分位数范畴。默认状况下,它等于 IQR,即 q_min 是第一个分位数,q_max 是第三个分位数,也就是咱们下面公式中的 Q1 和 Q3.
https://avoid.overfit.cn/post/003377e07cdd4a7db3d4039979019bb8
作者:Simsangcheol