特征工程之标准化(标准差在pandas与numpy中计算,有所差别)

1. 问题引入:算法相同,数据格式不同,计算出的标准差不同???

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
data = [[-1 ,2],[3,6]]
data_np = np.array(data)
data_df = pd.DataFrame(data)
def fun(x):
    return (x - x.mean(axis=0))/(x.std(axis=0))
scaler = StandardScaler()
print('库函数:\n',scaler.fit_transform(data)) 
print('\ndata_np:\n',fun(data_np))
print('\ndata_df:\n',fun(data_df))

问题

2.问题发现:

  1. 库函数与使用numpy.array() 标准化计算的一致
  2. 使用pandas.DataFrame() 标准化计算的与前两者不一致

3.问题思考:

  1. 计算的中间过程单步执行了,没有问题,只有std()计算的不一致
  2. 找到原因了!!有偏的标准差与无偏的标准差所造成的

4.问题解决与验证

pandas内置有偏的标准差:
σ 有 偏 = ∑ i = 1 n ( x i − x ‾ ) 2 n \Large \sigma_{有偏} = \sqrt{\frac{ \sum^{n}_{i=1}{(x_{i} - \overline{x})} ^{2}}{ \color{red}{n}} } σ=ni=1nxix2
numpy内置无偏的标准差:
σ 无 偏 = ∑ i = 1 n ( x i − x ‾ ) 2 n − 1 \Large \sigma_{无偏} = \sqrt{\frac{ \sum^{n}_{i=1}{(x_{i} - \overline{x})} ^{2}}{ \color{red}{n -1}} } σ=n1i=1nxix2
就是上述公式中的n n-1 作祟。
验证一下:
σ 无 偏 2 ( n − 1 ) = σ 有 偏 2 n \Large \sigma_{无偏}^{2} (n-1) = \sigma_{有偏} ^{2}{n} σ2(n1)=σ2n

data_np_std = data_np.std(axis=0)[0]**2*2
data_df_std = data_df.std(axis=0)[0]**2*1
print(data_np_std)
print(data_df_std)
print(np.isclose(data_np_std,data_df_std))

在这里插入图片描述

5.总结:

实际中采用无偏的更多,直接调用库函数就行。手动实现的时候,就要注意了,使用有偏还是无偏,毕竟std()是根据数据的格式是array()还是Dataframe()采用哪种标准差!!!

完结撒花🎉🎉🎉

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值