अजगर में विभिन्न मानकीकरण का उदाहरण।
संदर्भ के लिए इस विकिपीडिया लेख को देखें:
https://en.wikipedia.org/wiki/Unbiased_estimation_of_standard_deviation
उदाहरण डेटा
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
पांडा का उपयोग करके सामान्यीकरण (निष्पक्ष अनुमान देता है)
जब हम सामान्य करते हैं तो हम औसत को घटाते हैं और मानक विचलन द्वारा विभाजित करते हैं।
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
DIFFERENT आउटपुट मिल जाएगा!
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
क्या स्केलेर का बायस्ड अनुमान मशीन लर्निंग को कम शक्तिशाली बनाता है?
नहीं।
Sklearn.preprocessing.scale के आधिकारिक दस्तावेज में कहा गया है कि मशीन सीखने वाले एल्गोरिदम के प्रदर्शन को प्रभावित करने के लिए पक्षपाती आकलनकर्ता का उपयोग करना UNLIKELY है और हम सुरक्षित रूप से उनका उपयोग कर सकते हैं।
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 स्केलिंग के बारे में क्या?
मिनमैक्स स्केलिंग में कोई मानक विचलन गणना नहीं है। तो परिणाम पंडों और स्किटिट-लर्न दोनों में समान है।
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