Python'da farklı standardizasyon örnekleri.
Referans için bu wikipedia makalesine bakın:
https://en.wikipedia.org/wiki/UnPrice_estimation_of_standard_deviation
Örnek Veriler
import pandas as pd
df = pd.DataFrame({
'A':[1,2,3],
'B':[100,300,500],
'C':list('abc')
})
print(df)
A B C
0 1 100 a
1 2 300 b
2 3 500 c
Pandalar kullanarak normalleştirme (Tarafsız tahminler verir)
Normalleştirirken ortalamayı çıkarırız ve standart sapmaya böleriz.
df.iloc[:,0:-1] = df.iloc[:,0:-1].apply(lambda x: (x-x.mean())/ x.std(), axis=0)
print(df)
A B C
0 -1.0 -1.0 a
1 0.0 0.0 b
2 1.0 1.0 c
Sklearn kullanarak normalleştirme (Pandalardan farklı, önyargılı tahminler verir)
Sizinle aynı şeyi sklearn
yaparsanız FARKLI çıktı alırsınız!
import pandas as pd
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df = pd.DataFrame({
'A':[1,2,3],
'B':[100,300,500],
'C':list('abc')
})
df.iloc[:,0:-1] = scaler.fit_transform(df.iloc[:,0:-1].to_numpy())
print(df)
A B C
0 -1.224745 -1.224745 a
1 0.000000 0.000000 b
2 1.224745 1.224745 c
Önyargılı sklearn tahminleri Makine Öğrenimini Daha Az Güçlü Yapar mı?
HAYIR.
Sklearn.preprocessing.scale'nin resmi dokümantasyonu, eğimli tahmin ediciyi kullanmanın makine öğrenimi algoritmalarının performansını etkilemek için OLMADIĞINI ve bunları güvenle kullanabileceğimizi belirtmektedir.
From official documentation:
We use a biased estimator for the standard deviation,
equivalent to numpy.std(x, ddof=0).
Note that the choice of ddof is unlikely to affect model performance.
MinMax Ölçeklendirme ne olacak?
MinMax ölçeğinde Standart Sapma hesaplaması yoktur. Sonuç hem pandalarda hem de scikit-öğrenmede aynıdır.
import pandas as pd
df = pd.DataFrame({
'A':[1,2,3],
'B':[100,300,500],
})
(df - df.min()) / (df.max() - df.min())
A B
0 0.0 0.0
1 0.5 0.5
2 1.0 1.0
# Using sklearn
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
arr_scaled = scaler.fit_transform(df)
print(arr_scaled)
[[0. 0. ]
[0.5 0.5]
[1. 1. ]]
df_scaled = pd.DataFrame(arr_scaled, columns=df.columns,index=df.index)
print(df_scaled)
A B
0 0.0 0.0
1 0.5 0.5
2 1.0 1.0