2017-05-27 32 views
3

私はsklearn standardscaler(平均削除と分散スケーリング)を使用してデータフレームをスケーリングし、平均を差し引いた値を手動で引いて標準偏差で除算したデータフレームと比較しました。この比較は、一貫した小さな差異を示す。なぜ誰かが説明できますか?私が使用し (データセットはこれです:http://archive.ics.uci.edu/ml/datasets/Winesklearn standardscaler結果がマニュアル結果と異なる

import pandas as pd 
from sklearn.preprocessing import StandardScaler 

df = pd.read_csv("~/DataSets/WineDataSetItaly/wine.data.txt", names=["Class", "Alcohol", "Malic acid", "Ash", "Alcalinity of ash", "Magnesium", "Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins", "Color intensity", "Hue", "OD280/OD315 of diluted wines", "Proline"]) 

cols = list(df.columns)[1:] # I didn't want to scale the "Class" column 
std_scal = StandardScaler() 
standardized = std_scal.fit_transform(df[cols]) 
df_standardized_fit = pd.DataFrame(standardized, index=df.index, columns=df.columns[1:]) 

df_standardized_manual = (df - df.mean())/df.std() 
df_standardized_manual.drop("Class", axis=1, inplace=True) 

df_differences = df_standardized_fit - df_standardized_manual 
df_differences.iloc[:,:5] 


    Alcohol Malic acid Ash   Alcalinity Magnesium 
0 0.004272 -0.001582 0.000653 -0.003290 0.005384 
1 0.000693 -0.001405 -0.002329 -0.007007 0.000051 
2 0.000554 0.000060 0.003120 -0.000756 0.000249 
3 0.004758 -0.000976 0.001373 -0.002276 0.002619 
4 0.000832 0.000640 0.005177 0.001271 0.003606 
5 0.004168 -0.001455 0.000858 -0.003628 0.002421 

答えて

4

scikit-学ぶデフォルトで二乗偏差の総和を観測数で割っている母集団の標準偏差は(ある用途np.std)とパンダのサンプルを使用しています(参照)これは、母集団標準偏差の偏りのない推定値を持ち、自由度(ddof)によって決定される補正係数です。したがって、デフォルトでは、numpyとscikit -learnの計算はddof=0を使用し、パンダはddof=1docs)を使用します。

DataFrame.std(軸=なし、skipna =なし、レベル=なし、DDOF = 1、numeric_only =なし、** kwargsから)要求された軸上

戻りサンプル標準偏差。

デフォルトでN-1で正規化されています。

df_standardized_manual = (df - df.mean())/df.std(ddof=0) 

違いは実質的にゼロになります:

 Alcohol Malic acid   Ash Alcalinity of ash  Magnesium 
0 -8.215650e-15 -5.551115e-16 3.191891e-15  0.000000e+00 2.220446e-16 
1 -8.715251e-15 -4.996004e-16 3.441691e-15  0.000000e+00 0.000000e+00 
2 -8.715251e-15 -3.955170e-16 2.886580e-15  -5.551115e-17 1.387779e-17 
3 -8.437695e-15 -4.440892e-16 3.164136e-15  -1.110223e-16 1.110223e-16 
4 -8.659740e-15 -3.330669e-16 2.886580e-15  5.551115e-17 2.220446e-16 
あなたはパンダのバージョンが変更した場合にこれはDDOF 引数

を使用して変更することができます