解释sklearn的scale()和乘以STD加上平均值之间的区别

2024-09-29 07:34:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在对一些要分析的数据运行sklearn的PCAfit_transform()函数,我很难弄清楚我到底需要如何将缩放后的数据转换回在我运行的上下文中有意义的数字。更具体地说,当我跑步时:

import pandas as pd
import numpy as np

from sklearn.preprocessing import scale

X_scaled = scale(otr_df)

X_scaled2 = otr_df.sub(otr_df.mean())
X_scaled2 = X_scaled2.div(otr_df.std())

# Should print all zeroes
print (X_scaled - X_scaled2)/X_scaled

"""
The above prints the following:

Date              Index1         Index2            Index3          Index4
2016-05-11        0.000706       0.000706          0.000706        0.000706 ...
2016-05-10        0.000706       0.000706          0.000706        0.000706 ...
2016-05-09        0.000706       0.000706          0.000706        0.000706 ...
2016-05-06        0.000706       0.000706          0.000706        0.000706 ...
.                 .              .                 .
.                 .              .                 .
.                 .              .                 .
"""

当打印上面代码的底线时,我得到的是每列的常量值0.000706,而不是零(如我所期望的那样)。虽然很小,但如果我乘以几千以回到原来的比例(在某些情况下,我是这样的),这看起来并不是微不足道的。我的猜测是,它与除以(N-1)而不是N或沿着这些线的某个东西有关。然而,在花了太多时间阅读sklearn和pandas的文档之后,我想我会问这里是否有人有任何想法。你知道吗


Tags: 数据函数importpandasdfastransformsklearn
1条回答
网友
1楼 · 发布于 2024-09-29 07:34:21

sklearn在标准偏差计算中使用零自由度:

import pandas as pd
import numpy as np

from sklearn.preprocessing import scale

np.random.seed([3,1415])
otr_df = pd.DataFrame(np.random.rand(10, 10))
X_scaled = scale(otr_df)

X_scaled2 = otr_df.sub(otr_df.mean())
X_scaled2 = X_scaled2.div(otr_df.std(ddof=0))
#                                    ^
#                  Specify ddof here |

# Should print all zeroes
print (X_scaled - X_scaled2)/X_scaled

     0    1    2    3    4    5    6    7    8    9
0 -0.0 -0.0 -0.0 -0.0  0.0 -0.0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0  0.0 -0.0 -0.0 -0.0 -0.0 -0.0
2 -0.0  0.0 -0.0  0.0  0.0  0.0  0.0 -0.0 -0.0 -0.0
3  0.0  0.0  0.0 -0.0  0.0  0.0  0.0 -0.0  0.0  0.0
4  0.0 -0.0  0.0 -0.0 -0.0  0.0  0.0  0.0  0.0  0.0
5 -0.0 -0.0  0.0  0.0 -0.0  0.0  0.0 -0.0  0.0  0.0
6  0.0 -0.0  0.0  0.0 -0.0 -0.0  0.0  0.0  0.0  0.0
7 -0.0 -0.0 -0.0  0.0 -0.0 -0.0 -0.0  0.0  0.0 -0.0
8  0.0  0.0 -0.0 -0.0 -0.0  0.0 -0.0 -0.0  0.0 -0.0
9  0.0  0.0 -0.0 -0.0  0.0 -0.0 -0.0 -0.0 -0.0 -0.0

相关问题 更多 >