मैं समझता हूँ करने में असमर्थ हूँ पेज के StandardScaler
के दस्तावेज में sklearn
।
क्या कोई मुझे यह सरल शब्दों में समझा सकता है?
मैं समझता हूँ करने में असमर्थ हूँ पेज के StandardScaler
के दस्तावेज में sklearn
।
क्या कोई मुझे यह सरल शब्दों में समझा सकता है?
जवाबों:
इसके पीछे विचार StandardScaler
यह है कि यह आपके डेटा को इस तरह बदल देगा कि इसके वितरण का औसत मान 0 और मानक विचलन होगा। 1.
बहुभिन्नरूपी डेटा के मामले में, यह फीचर-वार (डेटा के प्रत्येक कॉलम के लिए स्वतंत्र रूप से दूसरे शब्दों में) किया जाता है। ।
डेटा के वितरण को देखते हुए, डेटासेट में प्रत्येक मूल्य का औसत मूल्य घटाया जाएगा, और फिर पूरे डेटासेट के मानक विचलन (या मल्टीवेरेट मामले में सुविधा) से विभाजित किया जाएगा।
परिचय: मैं मानता हूं कि आपके पास एक मैट्रिक्स है 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 = गलत या सत्य" के बीच मानक अंतरFalse
True
[1.15, 1.15]
जब मैं पंडों के डीएफ के रूप में गणना करता हूं तो मुझे क्यों मिलता है pd.DataFrame(scaled_data).std(0)
:?
pd.DataFrame(scaled_data)[0]
हूं तो मुझे एक श्रृंखला मिलती है Name: 0, dtype: float64
और मूल्यों के साथ [-1.0, 1.0, -1.0, 1.0]
। फ़ॉर्मेटिंग के लिए क्षमा करें
StandardScaler
, क्या यह मशीन लर्निंग एल्गोरिदम को तेजी से आगे बढ़ाता है, या अधिक सटीक निर्णय लेने में मदद करता है, या कुछ और?
इसकी गणना कैसे करें:
आप यहां और अधिक पढ़ सकते हैं:
StandardScaler का कार्य करता है मानकीकरण । आमतौर पर डेटासेट में वैरिएबल होते हैं जो स्केल में अलग होते हैं। उदाहरण के लिए एक एम्प्लॉयी डेटासेट में स्केल 20-70 पर वैल्यू के साथ AGE कॉलम और 10000-80000 स्केल पर वैल्यू के साथ SALARY कॉलम होगा ।
चूंकि ये दोनों कॉलम स्केल में अलग-अलग हैं, इसलिए मशीन लर्निंग मॉडल बनाते समय इनका कॉमन स्केल होना मानकीकृत है।
यह उपयोगी है जब आप विभिन्न इकाइयों के अनुरूप डेटा की तुलना करना चाहते हैं। उस स्थिति में, आप इकाइयों को निकालना चाहते हैं। सभी डेटा के सुसंगत तरीके से ऐसा करने के लिए, आप डेटा को इस तरह से रूपांतरित करते हैं कि विचरण एकात्मक हो और श्रृंखला का मतलब 0 हो।
ऊपर दिए गए जवाब बहुत अच्छे हैं, लेकिन मुझे अतीत में आई कुछ चिंताओं को दूर करने के लिए एक सरल उदाहरण की आवश्यकता थी। मैं यह सुनिश्चित करना चाहता था कि यह वास्तव में प्रत्येक स्तंभ का अलग-अलग व्यवहार कर रहा था। मैं अब आश्वस्त हूं और यह नहीं जान सकता कि किस उदाहरण ने मुझे चिंतित किया। सभी स्तंभ रहे हैं , जैसा कि ऊपर उन द्वारा वर्णित अलग से बढ़ाए गए हैं।
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)
स्टैंडराइजेशन गणना कैसे काम करती है, यह समझाने के लिए एक सरल कार्य उदाहरण निम्नलिखित है। सिद्धांत का हिस्सा पहले से ही अन्य उत्तरों में अच्छी तरह से समझाया गया है।
>>>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 के बहुत करीब है।
संदर्भ
आवेदन करने के बाद StandardScaler()
, X के प्रत्येक कॉलम में 0 का मतलब और 1 का मानक विचलन होगा।
सूत्र इस पृष्ठ पर अन्य लोगों द्वारा सूचीबद्ध हैं।
Rationale: कुछ एल्गोरिदम को इस तरह दिखने के लिए डेटा की आवश्यकता होती है ( sklearn डॉक्स देखें )।
each value in the dataset will have the sample mean value subtracted
-- यह सच नहीं है। EACH फीचर / कॉलम का मतलब विशिष्ट कॉलम के मानों से घटाया जाएगा। यह कॉलम-वार किया जाता है।sample mean value subtracted
नीचे कोई नहीं है - नीचे मेरा जवाब देखें