谁能解释我StandardScaler?
machine-learning
python
scikit-learn
7
0

我无法理解sklearn文档中StandardScaler页面

谁能简单地向我解释一下?

参考资料:
Stack Overflow
收藏
评论
共 8 个回答
高赞 时间 活跃

应用StandardScaler() ,X中的每一列的均值为0,标准差为1。

公式在此页面上被其他人列出。

基本原理:某些算法要求数据看起来像这样(请参阅sklearn docs )。

收藏
评论

StandardScaler背后的想法是它将转换您的数据,使其分布的平均值为0,标准差为1。
对于多元数据,这是按功能进行的(换句话说,对于数据的每一列都是独立的)。
给定数据的分布,数据集中的每个值都将减去平均值,然后除以整个数据集(或多变量情况下的特征)的标准差。

收藏
评论

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

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

重要信息: StandardScaler()将规范化功能(X的每一列,分别!!),以便每一列/功能/变量的mean = 0standard deviation = 1

PS:我在此页面上找到了最受支持的答案,错了。我引用“数据集中的每个值都将减去样本均值”-这既不正确也不正确。


例:

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.])

数学:

在此处输入图片说明


更新08/2019 :关于输入参数with_meanwith_stdFalse / True ,我在这里提供了答案: https : with_std

收藏
评论

以下是一个简单的工作示例,用于解释标准化计算的工作原理。理论部分已经在其他答案中得到了很好的解释。

>>>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。

参考文献

  1. 比较不同缩放器对数据与异常值的影响

  2. 标准化和标准化之间有什么区别?

  3. 使用sklearn StandardScaler缩放的数据均值不为零

收藏
评论

上面的答案很好,但是我需要一个简单的例子来减轻过去的担忧。我想确保它确实单独处理了每一列。现在,我可以放心了,找不到导致我担心的例子。如上所述,所有列均按比例缩放。

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)

输出值

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)
收藏
评论

当您要比较对应于不同单位的数据时,这很有用。在这种情况下,您要删除单元。要以一致的方式对所有数据执行此操作,请以方差为单位且系列的均值为0的方式转换数据。

收藏
评论
收藏
评论

StandardScaler执行标准化任务。通常,数据集包含比例不同的变量。例如,一个Employee数据集将包含AGE列,其值的范围为20-70,以及SALARY列,其值的范围为10000-80000
由于这两列的规模不同,因此在构建机器学习模型时将它们标准化以具有相同的规模。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号