谁能解释一下StandardScaler?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能解释一下StandardScaler?相关的知识,希望对你有一定的参考价值。
我无法理解page文档中StandardScaler
的sklearn
。
有人能用简单的语言向我解释一下吗?
StandardScaler
背后的想法是它将转换您的数据,使其分布的平均值为0,标准差为1.给定数据的分布,数据集中的每个值将减去样本均值,然后除通过整个数据集的标准偏差。
主要思想是在应用机器学习技术之前对您的特征进行标准化/标准化(mean = 0
和standard deviation = 1
)。
您应该记住的一件重要事情是,大多数(如果不是全部)scikit-learn
模型/类/函数,期望作为输入具有尺寸/形状X
的矩阵[number_of_samples, number_of_features]
。这是非常重要的。其他一些库期望作为输入反向。
StandardScaler()
将标准化特征(X的每一列,单独!!!),以便每个列/特征/变量将具有mean = 0
和standard deviation = 1
。
例:
from sklearn.preprocessing import StandardScaler
import numpy as np
# 4 samples/observations and 2 variables/features
data = np.array([[0, 0], [1, 0], [0, 1], [1, 1]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
print(data)
[[0, 0],
[1, 0],
[0, 1],
[1, 1]])
print(scaled_data)
[[-1. -1.]
[ 1. -1.]
[-1. 1.]
[ 1. 1.]]
验证每个要素(列)的平均值是否为0:
scaled_data.mean(axis = 0)
array([0., 0.])
验证每个功能(列)的std是否为1:
scaled_data.std(axis = 0)
array([1., 1.])
数学:
如何计算:
你可以在这里阅读更多:
StandardScaler执行标准化任务。通常,数据集包含规模不同的变量。对于例如Employee数据集将包含AGE列,其值为20-70,SALARY列的值为10000-80000。 由于这两列的规模不同,它们在建立机器学习模型时具有标准化,具有共同的规模。
当您想要比较与不同单位对应的数据时,这非常有用。在这种情况下,您要删除单位。要以一致的方式对所有数据执行此操作,您需要以方差为单一的方式转换数据,并且系列的均值为0。
上面的答案很棒,但我需要一个简单的例子来缓解我过去的一些担忧。我想确保它确实分别处理每个列。我现在放心了,无法找到让我担心的例子。如上所述,所有列都是单独缩放的。
CODE
import pandas as pd
import scipy.stats as ss
from sklearn.preprocessing import StandardScaler
data= [[1, 1, 1, 1, 1],[2, 5, 10, 50, 100],[3, 10, 20, 150, 200],[4, 15, 40, 200, 300]]
df = pd.DataFrame(data, columns=['N0', 'N1', 'N2', 'N3', 'N4']).astype('float64')
sc_X = StandardScaler()
df = sc_X.fit_transform(df)
num_cols = len(df[0,:])
for i in range(num_cols):
col = df[:,i]
col_stats = ss.describe(col)
print(col_stats)
OUTPUT
DescribeResult(nobs=4, minmax=(-1.3416407864998738, 1.3416407864998738), mean=0.0, variance=1.3333333333333333, skewness=0.0, kurtosis=-1.3599999999999999)
DescribeResult(nobs=4, minmax=(-1.2828087129930659, 1.3778315806221817), mean=-5.551115123125783e-17, variance=1.3333333333333337, skewness=0.11003776770595125, kurtosis=-1.394993095506219)
DescribeResult(nobs=4, minmax=(-1.155344148338584, 1.53471088361394), mean=0.0, variance=1.3333333333333333, skewness=0.48089217736510326, kurtosis=-1.1471008824318165)
DescribeResult(nobs=4, minmax=(-1.2604572012883055, 1.2668071116222517), mean=-5.551115123125783e-17, variance=1.3333333333333333, skewness=0.0056842140599118185, kurtosis=-1.6438177182479734)
DescribeResult(nobs=4, minmax=(-1.338945389819976, 1.3434309690153527), mean=5.551115123125783e-17, variance=1.3333333333333333, skewness=0.005374558840039456, kurtosis=-1.3619131970819205)
应用StandardScaler()
后,X中的每列平均值为0,标准差为1。
此页面上的其他人列出了公式。
基本原理:一些算法要求数据看起来像这样(参见sklearn docs)。
以下是一个简单的工作示例,用于解释标准化计算的工作原理。理论部分已在其他答案中得到很好的解释。
>>>import numpy as np
>>>data = [[6, 2], [4, 2], [6, 4], [8, 2]]
>>>a = np.array(data)
>>>np.std(a, axis=0)
array([1.41421356, 0.8660254 ])
>>>np.mean(a, axis=0)
array([6. , 2.5])
>>>from sklearn.preprocessing import StandardScaler
>>>scaler = StandardScaler()
>>>scaler.fit(data)
>>>print(scaler.mean_)
#Xchanged = (X−μ)/σ WHERE σ is Standard Deviation and μ is mean
>>>z=scaler.transform(data)
>>>z
计算
正如您在输出中看到的那样,均值是[6。 ,2.5]和标准差是[1.41421356,0.8660254]
数据是(0,1)位置是2标准化=(2 - 2.5)/0.8660254 = -0.57735027
(1,0)位置的数据为4标准化=(4-6)/1.41421356 = -1.414
标准化后的结果
标准化后检查平均值和标准偏差
注意:-2.77555756e-17非常接近0。
参考
- Compare the effect of different scalers on data with outliers
- What's the difference between Normalization and Standardization?
- Mean of data scaled with sklearn StandardScaler is not zero
以上是关于谁能解释一下StandardScaler?的主要内容,如果未能解决你的问题,请参考以下文章