क्या कोई मुझे StandardScaler समझा सकता है?


जवाबों:


106

इसके पीछे विचार StandardScalerयह है कि यह आपके डेटा को इस तरह बदल देगा कि इसके वितरण का औसत मान 0 और मानक विचलन होगा। 1.
बहुभिन्नरूपी डेटा के मामले में, यह फीचर-वार (डेटा के प्रत्येक कॉलम के लिए स्वतंत्र रूप से दूसरे शब्दों में) किया जाता है। ।
डेटा के वितरण को देखते हुए, डेटासेट में प्रत्येक मूल्य का औसत मूल्य घटाया जाएगा, और फिर पूरे डेटासेट के मानक विचलन (या मल्टीवेरेट मामले में सुविधा) से विभाजित किया जाएगा।


3
मुझे लगता है कि यह उत्तर सही नहीं है। each value in the dataset will have the sample mean value subtracted-- यह सच नहीं है। EACH फीचर / कॉलम का मतलब विशिष्ट कॉलम के मानों से घटाया जाएगा। यह कॉलम-वार किया जाता है। sample mean value subtractedनीचे कोई नहीं है - नीचे मेरा जवाब देखें
नागालोक

@makis मैंने आपके द्वारा सुझाए गए स्पष्टीकरण के बाद अपना जवाब संपादित किया।
user6903745

103

परिचय: मैं मानता हूं कि आपके पास एक मैट्रिक्स है Xजहां प्रत्येक पंक्ति / पंक्ति एक नमूना / अवलोकन है और प्रत्येक स्तंभ एक चर / विशेषता है (यह किसी भी sklearnएमएल फ़ंक्शन के लिए अपेक्षित इनपुट है - वैसे X.shapeहोना चाहिए [number_of_samples, number_of_features])।


विधि की कोर : मुख्य विचार है करने के लिए सामान्य / मानकीकरण यानी μ = 0और σ = 1अपने सुविधाओं / चर / के स्तंभों X, व्यक्तिगत रूप से , पहले किसी भी मशीन सीखने मॉडल को लागू करने।

StandardScaler()सुविधाओं को सामान्य करेगा अर्थात X का प्रत्येक स्तंभ, INDIVIDUALLY , ताकि प्रत्येक कॉलम / फीचर / वैरिएबल μ = 0और होगा σ = 1


पुनश्च: मुझे इस पृष्ठ पर सबसे गलत उत्तर मिला, गलत। मैं उद्धृत कर रहा हूं "डेटासेट में प्रत्येक मूल्य का नमूना औसत मूल्य घटाया जाएगा" - यह न तो सही है और न ही सही है।


यह भी देखें: अपने डेटा को कैसे और क्यों मानकीकृत करें: एक अजगर ट्यूटोरियल


उदाहरण:

from sklearn.preprocessing import StandardScaler
import numpy as np

# 4 samples/observations and 2 variables/features
data = np.array([[0, 0], [1, 0], [0, 1], [1, 1]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

print(data)
[[0, 0],
 [1, 0],
 [0, 1],
 [1, 1]])

print(scaled_data)
[[-1. -1.]
 [ 1. -1.]
 [-1.  1.]
 [ 1.  1.]]

सत्यापित करें कि प्रत्येक सुविधा (स्तंभ) का मतलब 0 है:

scaled_data.mean(axis = 0)
array([0., 0.])

सत्यापित करें कि प्रत्येक सुविधा (स्तंभ) का std 1 है:

scaled_data.std(axis = 0)
array([1., 1.])

गणित:

यहां छवि विवरण दर्ज करें


अद्यतन 08/2019 : इनपुट मापदंडों with_meanऔर / with_stdसे मिलकर , मैंने यहां एक उत्तर दिया है: "with_std = गलत या सही" और "with_mean = गलत या सत्य" के बीच मानक अंतरFalseTrue


क्या आपके पास कोई विचार है कि [1.15, 1.15]जब मैं पंडों के डीएफ के रूप में गणना करता हूं तो मुझे क्यों मिलता है pd.DataFrame(scaled_data).std(0):?
Sos

जब मैं दौड़ता pd.DataFrame(scaled_data)[0]हूं तो मुझे एक श्रृंखला मिलती है Name: 0, dtype: float64और मूल्यों के साथ [-1.0, 1.0, -1.0, 1.0]। फ़ॉर्मेटिंग के लिए क्षमा करें
एसओएस

@seralouk मुझे आपका उत्तर पसंद आया, हालांकि मैं अभी भी सोच रहा हूं कि इनपुट डेटा को बदलने के पीछे क्या इरादा है StandardScaler, क्या यह मशीन लर्निंग एल्गोरिदम को तेजी से आगे बढ़ाता है, या अधिक सटीक निर्णय लेने में मदद करता है, या कुछ और?
सीपिसोड

डेटासेट के मानकीकरण की आवश्यकता कई मशीन सीखने के अनुमानकों के लिए एक सामान्य आवश्यकता है: वे बुरी तरह से व्यवहार कर सकते हैं यदि व्यक्तिगत विशेषताएं सामान्य रूप से वितरित डेटा की तरह कम या ज्यादा नहीं दिखती हैं (जैसे 0 माध्य और इकाई विचरण के साथ गाऊसी)। उदाहरण के लिए, लर्निंग एल्गोरिथम के उद्देश्य फ़ंक्शन में उपयोग किए जाने वाले कई तत्व (जैसे कि SVM के RBF कर्नेल या रैखिक मॉडल के L1 और L2 नियमितकर्ता) मान लेते हैं कि सभी सुविधाएँ 0 के आसपास केंद्रित हैं और एक ही क्रम में विचरण करती हैं।
सेरलौक

तो, एक करने के लिए मानकीकरण होता है) और अधिक स्थिर ख) कम चर ग की सीमा से प्रभावित) तेजी से घ फिटिंग) और अधिक स्थिर प्रदर्शन
seralouk


23

StandardScaler का कार्य करता है मानकीकरण । आमतौर पर डेटासेट में वैरिएबल होते हैं जो स्केल में अलग होते हैं। उदाहरण के लिए एक एम्प्लॉयी डेटासेट में स्केल 20-70 पर वैल्यू के साथ AGE कॉलम और 10000-80000 स्केल पर वैल्यू के साथ SALARY कॉलम होगा
चूंकि ये दोनों कॉलम स्केल में अलग-अलग हैं, इसलिए मशीन लर्निंग मॉडल बनाते समय इनका कॉमन स्केल होना मानकीकृत है।


10

यह उपयोगी है जब आप विभिन्न इकाइयों के अनुरूप डेटा की तुलना करना चाहते हैं। उस स्थिति में, आप इकाइयों को निकालना चाहते हैं। सभी डेटा के सुसंगत तरीके से ऐसा करने के लिए, आप डेटा को इस तरह से रूपांतरित करते हैं कि विचरण एकात्मक हो और श्रृंखला का मतलब 0 हो।


1
क्या u pls एक उदाहरण के साथ समझा सकता है..जैसा कि यह कैसे मदद करता है? .. कि वास्तव में मददगार हो सकता है..धन
Lakshay

6

ऊपर दिए गए जवाब बहुत अच्छे हैं, लेकिन मुझे अतीत में आई कुछ चिंताओं को दूर करने के लिए एक सरल उदाहरण की आवश्यकता थी। मैं यह सुनिश्चित करना चाहता था कि यह वास्तव में प्रत्येक स्तंभ का अलग-अलग व्यवहार कर रहा था। मैं अब आश्वस्त हूं और यह नहीं जान सकता कि किस उदाहरण ने मुझे चिंतित किया। सभी स्तंभ रहे हैं , जैसा कि ऊपर उन द्वारा वर्णित अलग से बढ़ाए गए हैं।

कोड

import pandas as pd
import scipy.stats as ss
from sklearn.preprocessing import StandardScaler


data= [[1, 1, 1, 1, 1],[2, 5, 10, 50, 100],[3, 10, 20, 150, 200],[4, 15, 40, 200, 300]]

df = pd.DataFrame(data, columns=['N0', 'N1', 'N2', 'N3', 'N4']).astype('float64')

sc_X = StandardScaler()
df = sc_X.fit_transform(df)

num_cols = len(df[0,:])
for i in range(num_cols):
    col = df[:,i]
    col_stats = ss.describe(col)
    print(col_stats)

आउटपुट

DescribeResult(nobs=4, minmax=(-1.3416407864998738, 1.3416407864998738), mean=0.0, variance=1.3333333333333333, skewness=0.0, kurtosis=-1.3599999999999999)
DescribeResult(nobs=4, minmax=(-1.2828087129930659, 1.3778315806221817), mean=-5.551115123125783e-17, variance=1.3333333333333337, skewness=0.11003776770595125, kurtosis=-1.394993095506219)
DescribeResult(nobs=4, minmax=(-1.155344148338584, 1.53471088361394), mean=0.0, variance=1.3333333333333333, skewness=0.48089217736510326, kurtosis=-1.1471008824318165)
DescribeResult(nobs=4, minmax=(-1.2604572012883055, 1.2668071116222517), mean=-5.551115123125783e-17, variance=1.3333333333333333, skewness=0.0056842140599118185, kurtosis=-1.6438177182479734)
DescribeResult(nobs=4, minmax=(-1.338945389819976, 1.3434309690153527), mean=5.551115123125783e-17, variance=1.3333333333333333, skewness=0.005374558840039456, kurtosis=-1.3619131970819205)

1
कृपया विचरण 1 क्यों नहीं है?
मैक्स

6

स्टैंडराइजेशन गणना कैसे काम करती है, यह समझाने के लिए एक सरल कार्य उदाहरण निम्नलिखित है। सिद्धांत का हिस्सा पहले से ही अन्य उत्तरों में अच्छी तरह से समझाया गया है।

>>>import numpy as np
>>>data = [[6, 2], [4, 2], [6, 4], [8, 2]]
>>>a = np.array(data)

>>>np.std(a, axis=0)
array([1.41421356, 0.8660254 ])

>>>np.mean(a, axis=0)
array([6. , 2.5])

>>>from sklearn.preprocessing import StandardScaler
>>>scaler = StandardScaler()
>>>scaler.fit(data)
>>>print(scaler.mean_)

#Xchanged = (X−μ)/σ  WHERE σ is Standard Deviation and μ is mean
>>>z=scaler.transform(data)
>>>z

गणना

जैसा कि आप आउटपुट में देख सकते हैं, मतलब है [6]। , 2.5] और एसटीडी विचलन [1.41421356, 0.8660254] है

डेटा (0,1) स्थिति 2 मानकीकरण = (2 - 2.5) / 0.8660254 = -0.57735027 है

(1,0) स्थिति में डेटा 4 मानकीकरण = (4-6) / 1.41421356 = -1.414 है

मानकीकरण के बाद परिणाम

यहां छवि विवरण दर्ज करें

मानकीकरण के बाद माध्य और एसटीडी विचलन की जाँच करें

यहां छवि विवरण दर्ज करें

नोट: -2.77555756e-17 0 के बहुत करीब है।

संदर्भ

  1. आउटलेर के साथ डेटा पर विभिन्न स्केलर के प्रभाव की तुलना करें

  2. सामान्यीकरण और मानकीकरण के बीच क्या अंतर है?

  3. Sklearn StandardScaler के साथ स्केल किए गए डेटा का मतलब शून्य नहीं है


3

आवेदन करने के बाद StandardScaler(), X के प्रत्येक कॉलम में 0 का मतलब और 1 का मानक विचलन होगा।

सूत्र इस पृष्ठ पर अन्य लोगों द्वारा सूचीबद्ध हैं।

Rationale: कुछ एल्गोरिदम को इस तरह दिखने के लिए डेटा की आवश्यकता होती है ( sklearn डॉक्स देखें )।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.