【发布时间】:2018-09-14 12:17:15
【问题描述】:
谁能解释幕后的数学原理?为什么 Python 和 R 会返回不同的结果?我应该将哪一个用于实际业务场景?
原始数据
id cost sales item
1 300 50 pen
2 3 88 wf
3 1 70 gher
4 5 80 dger
5 2 999 ww
Python 代码:
import pandas as pd
from sklearn.preprocessing import StandardScaler
df = pd.read_csv('Scale.csv')
df[['cost', 'sales']] = StandardScaler().fit_transform(df[['cost', 'sales']])
df
Python 标准化结果
id cost sales item
0 1 1.999876 -0.559003 pen
1 2 -0.497867 -0.456582 wf
2 3 -0.514686 -0.505097 gher
3 4 -0.481047 -0.478144 dger
4 5 -0.506276 1.998826 ww
和R代码
library(readr)
library(dplyr)
df <- read_csv("C:/Users/Ho/Desktop/Scale.csv")
df <- df %>% mutate_each_(funs(scale(.) %>% as.vector),
vars=c("cost","sales"))
R 归一化结果
id cost sales item
1 1 1.7887437 -0.4999873 pen
2 2 -0.4453054 -0.4083792 wf
3 3 -0.4603495 -0.4517725 gher
4 4 -0.4302613 -0.4276651 dger
5 5 -0.4528275 1.7878041 ww
感谢@温
【问题讨论】:
-
如果我们真的有 Scale.csv 会有所帮助,这样我们就可以自己运行和验证。
-
我不怎么使用 Python,但看起来它的转换在计算要按比例缩放的方差时使用 n 作为分母,而 R 在分母中使用 (n-1)。
-
数据中是否有缺失值?
-
@Dason 即 R 使用的是 正确 分母。 (我在开玩笑。)
-
@joran 是有道理的,因为 R 适用于自认为是程序员的统计学家,而 Python 适用于自认为是统计学家的程序员。
标签: python r normalization standardized