谁能解释一下StandardScaler?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能解释一下StandardScaler?相关的知识,希望对你有一定的参考价值。

我无法理解page文档中StandardScalersklearn

有人能用简单的语言向我解释一下吗?

答案

StandardScaler背后的想法是它将转换您的数据,使其分布的平均值为0,标准差为1.给定数据的分布,数据集中的每个值将减去样本均值,然后除通过整个数据集的标准偏差。

另一答案

主要思想是在应用机器学习技术之前对您的特征进行标准化/标准化(mean = 0standard deviation = 1)。

您应该记住的一件重要事情是,大多数(如果不是全部)scikit-learn模型/类/函数,期望作为输入具有尺寸/形状X的矩阵[number_of_samples, number_of_features]。这是非常重要的。其他一些库期望作为输入反向。

StandardScaler()将标准化特征(X的每一列,单独!!!),以便每个列/特征/变量将具有mean = 0standard 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.])

数学:

enter image description here

另一答案

如何计算:

enter image description here

你可以在这里阅读更多:

另一答案

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

标准化后的结果

enter image description here

标准化后检查平均值和标准偏差

enter image description here

注意:-2.77555756e-17非常接近0。

参考

  1. Compare the effect of different scalers on data with outliers
  2. What's the difference between Normalization and Standardization?
  3. Mean of data scaled with sklearn StandardScaler is not zero

以上是关于谁能解释一下StandardScaler?的主要内容,如果未能解决你的问题,请参考以下文章

请谁能解释一下为啥这个排列代码不起作用

谁能解释一下这个java代码是如何工作的?

我的代码出错了,谁能解释一下怎么回事?

谁能解释一下这个python代码中提到的一行的工作原理?

我是一个菜鸟,谁能帮忙解释一下一下代码?

Scala:谁能解释一下?