首页 > 解决方案 > python中的sklearn如何计算.scale_?(它到底是什么算法?)

问题描述

请假设我们有一个这样的数组:

import numpy as np
X_train = np.array([[ 1., -1.,  2.],
                     [ 2.,  0.,  0.],
                     [ 0.,  1., -1.]])

我们通过以下代码对其进行.scale_缩放:sklearn

from sklearn import preprocessing
scaler = preprocessing.StandardScaler().fit(X_train)
scaler.scale_

结果显示:

array([0.81649658, 0.81649658, 1.24721913])

你知道它是如何计算的吗?如果你知道,请写出它的公式,它是如何计算的?我想这.scale_显示了Interquartile range (IQR),但是当我手动计算它时IQR

array([2, 2, 3]) rather than `array([0.81649658, 0.81649658, 1.24721913])`.

另外,我认为array([0.81649658, 0.81649658, 1.24721913])是一种正常类型的array([2, 2, 3]),但我不知道它是如何标准化的。请帮我找到它。

标签: python-3.xscikit-learnnormalizationiqrstandardization

解决方案


均值、方差和标准差的三个主要统计量度计算如下:

mean = preprocessing.StandardScaler().fit(X_train).mean_ 
variance = preprocessing.StandardScaler().fit(X_train).var_
Standard_deviation = preprocessing.StandardScaler().fit(X_train).scale_

根据问题:

X_train = np.array([[ 1., -1.,  2.],
                     [ 2.,  0.,  0.],
                     [ 0.,  1., -1.]])

mean = preprocessing.StandardScaler().fit(X_train).mean_ 
print(mean)
array([1.        , 0.        , 0.33333333])

variance = preprocessing.StandardScaler().fit(X_train).var_
print(variance )
array([0.66666667, 0.66666667, 1.55555556])

Standard_deviation = preprocessing.StandardScaler().fit(X_train).scale_
print(Standard_deviation )
array([0.81649658, 0.81649658, 1.24721913])

换句话说:

scaler.scale_ = np.sqrt(scaler.var_)

推荐阅读