Scikit_learn मॉडल में फिट और fit_transform के बीच अंतर?


110

मैं डेटा साइंस के लिए नौसिखिया हूं और मुझे स्किकिट-लर्न में अंतर fitऔर fit_transformतरीकों के बारे में समझ नहीं है । क्या कोई केवल यह बता सकता है कि हमें डेटा बदलने की आवश्यकता क्यों हो सकती है?

प्रशिक्षण डेटा पर फिटिंग मॉडल और परीक्षण डेटा को बदलने का क्या मतलब है? क्या उदाहरण के लिए ट्रेन में श्रेणीबद्ध चर को संख्या में परिवर्तित करना और डेटा का परीक्षण करने के लिए नई सुविधा सेट करना है?



@ एसडीएस उपरोक्त उत्तर इस प्रश्न का लिंक देता है।
कौशल्या 28

हम पर लागू fitकरते हैं training datasetऔर इस transformपद्धति का उपयोग करते हैं both- प्रशिक्षण डाटासेट और परीक्षण डेटासेट
प्रकाश कुमार

जवाबों:


117

डेटा को केंद्रित करने के लिए (इसे शून्य माध्य और इकाई मानक त्रुटि करें), आप माध्य को घटाते हैं और फिर परिणाम को मानक विचलन द्वारा विभाजित करते हैं।

x=xμσ

आप डेटा के प्रशिक्षण सेट पर ऐसा करते हैं। लेकिन फिर आपको अपने परीक्षण सेट (उदाहरण के लिए क्रॉस-वेलिडेशन) में, या पूर्वानुमान से पहले नए प्राप्त उदाहरणों पर उसी परिवर्तन को लागू करना होगा। लेकिन आपको प्रशिक्षण सेट को केंद्रित करने के लिए उन्हीं दो मापदंडों और (मान) का उपयोग करना होगा।σμσ

इसलिए, हर स्केलेर के ट्रांसफ़ॉर्म में fit()बस पैरामीटर की गणना की जाती है (जैसे कि StandardScaler के मामले में और ) और उन्हें आंतरिक ऑब्जेक्ट स्थिति के रूप में सहेजता है। बाद में, आप किसी विशेष समूह में परिवर्तन को लागू करने के लिए इसकी विधि कह सकते हैं।σμσtransform()

fit_transform()इन दो चरणों में शामिल होता है और प्रशिक्षण सेट पर मापदंडों की प्रारंभिक फिटिंग के लिए उपयोग किया जाता है , लेकिन यह एक परिवर्तित भी देता है । आंतरिक रूप से, यह केवल पहले और फिर उसी डेटा पर कॉल करता है।x xxfit()transform()


1
आपके उत्तर के लिए बहुत बहुत धन्यवाद। बस एक बात। मॉडल में इसके मापदंडों का मतलब यह नहीं है कि छूट के लिए ढलान और प्रतिगमन के लिए अवरोधन? जब आप फिट होते हैं तो उदाहरण के लिए एक रेखीय प्रतिगमन कहते हैं जो फिट विधि में मापदंडों को फिट किया गया है? ढलान और अवरोधन जैसे सामान्यीकरण पैरामीटर या मॉडल पैरामीटर?
कागल

1
मेरा मतलब है कि ट्रांसफ़ॉर्मर्स के लिए आंतरिक ( StandardScaler के मामले में और )। जो भी रूपांतर विधि लौटाता है। इस अध्याय को इंप्यूटेशन पर देखें, उदाहरण के लिए: scikit-learn.org/stable/modules/…σμσget_params()
K3 ---

2
मेरी पिछली टिप्पणी वास्तव में गलत है। रैखिक प्रतिगमन के मामले में, फिट किए गए पैरामीटर coef_(यानी ढलान और अवरोधन) होते हैं, न कि उन लोगों द्वारा लौटाए जाते हैं get_params()(जो, इसके बजाय, उनके संबंधित मूल्यों के साथ मॉडल निर्माता तर्क का सेट लौटाते हैं)।
K3 --- rnc

बहुत बढ़िया जवाब! मैं इस विषय पर खोज करते हुए आपकी पोस्ट पर आया, लेकिन मुझे स्पष्ट करने की आवश्यकता है। क्या इसका मतलब यह है कि यदि हम बाद के उदाहरणों के प्रत्येक सेट को बदलना चाहते हैं, तो हमें कभी भी फोन नहीं करना चाहिए fit_transform()क्योंकि यह हमें आंतरिक वस्तुओं की स्थिति तक पहुंचने की अनुमति नहीं देगा, इसके बाद के उदाहरणों fit()को प्रारंभिक डेटासेट पर उपयोग करके प्राप्त किए गए समान मापदंडों के साथ बदल सकते हैं ? यह उदाहरण के लिए उठता है, जब आपके पास एक परीक्षण डेटासेट होता है और इसे अपने प्रशिक्षित क्लासिफायर के पास भेजने के लिए परीक्षण सेट को बदलना होता है।
AKKA

के बाद आप फोन t.fit_transform(train_data), t है फिट है, तो आप सुरक्षित रूप से उपयोग कर सकते हैं t.transform(test_data)
K3 --- rnc

10

निम्नलिखित विवरण पर आधारित है fit_transformके Imputerवर्ग है, लेकिन विचार के लिए एक ही है fit_transformके अन्य scikit_learn वर्गों की तरह MinMaxScaler


transformएक नंबर के साथ लापता मानों को बदलता है। डिफ़ॉल्ट रूप से यह संख्या आपके द्वारा चुने गए कुछ डेटा के कॉलम का साधन है। निम्नलिखित उदाहरण पर विचार करें:

imp = Imputer()
# calculating the means
imp.fit([[1, 3], [np.nan, 2], [8, 5.5]])

अब पहले कॉलम के लिए इंप्यूटर ने एक माध्य (1 + 8) / 2 = 4.5 का उपयोग करना सीख लिया है और दूसरे कॉलम के लिए माध्य (2 + 3 + 5.5) / 3 = 3.5 जब यह दो-स्तंभ डेटा पर लागू होता है:

X = [[np.nan, 11], 
     [4,      np.nan], 
     [8,      2],
     [np.nan, 1]]
print(imp.transform(X))

हमें मिला

[[4.5, 11], 
 [4, 3.5],
 [8, 2],
 [4.5, 1]]

तो द्वारा fitimputer कुछ आंकड़ों से स्तंभों के साधनों की गणना करता है, और इसके द्वारा transformउन साधनों को कुछ डेटा पर लागू करता है (जो कि अनुपस्थित मानों को प्रतिस्थापित कर रहा है)। यदि ये दोनों डेटा समान हैं (अर्थात साधनों की गणना के लिए डेटा और जो डेटा लागू होते हैं) आप उपयोग कर सकते हैं fit_transformजो मूल रूप से a का fitअनुसरण करता है transform

अब आपके प्रश्न:

हमें डेटा बदलने की आवश्यकता क्यों हो सकती है?

"विभिन्न कारणों से, कई वास्तविक विश्व डेटासेट में लापता मान होते हैं, जिन्हें अक्सर रिक्त स्थान, NaNs या अन्य प्लेसहोल्डर्स के रूप में एन्कोड किया जाता है। ऐसे डेटासेट, हालांकि, स्किटिट-लर्न अनुमानकों के साथ असंगत होते हैं, जो मानते हैं कि किसी सरणी में सभी मान संख्यात्मक ( स्रोत ) हैं

प्रशिक्षण डेटा पर फिटिंग मॉडल और परीक्षण डेटा को बदलने का क्या मतलब है?

fitएक imputer के साथ कोई संबंध नहीं है fitफिटिंग मॉडल में इस्तेमाल किया। इसलिए fitप्रशिक्षण डेटा पर imputer का उपयोग करना प्रशिक्षण डेटा के प्रत्येक स्तंभ के साधनों की गणना करता है। transformपरीक्षण डेटा का उपयोग करना, फिर परीक्षण डेटा के लापता मानों को ऐसे साधनों से प्रतिस्थापित करता है जिनकी गणना प्रशिक्षण डेटा से की गई थी।


3

आम आदमी की शर्तों में, fit_transform का मतलब कुछ गणना करना है और फिर परिवर्तन करना है (कुछ आंकड़ों से स्तंभों के साधनों की गणना करना और फिर लापता मानों को बदलना)। तो प्रशिक्षण सेट के लिए, आपको दोनों की गणना करने और परिवर्तन करने की आवश्यकता है।

लेकिन परीक्षण सेट के लिए, मशीन लर्निंग प्रशिक्षण सेट के दौरान जो सीखा गया था, उसके आधार पर भविष्यवाणी लागू होती है और इसलिए इसे गणना करने की आवश्यकता नहीं है, यह सिर्फ परिवर्तन करता है।


3

ये तरीके scikit-learn में डेटासेट ट्रांसफॉर्मेशन के लिए उपयोग किए जाते हैं:

एक डेटासेट में स्केलिंग मानों के लिए एक उदाहरण लेते हैं:

यहां फिट विधि, जब प्रशिक्षण डाटासेट में लागू किया जाता है, तो मॉडल पैरामीटर (उदाहरण के लिए, माध्य और मानक विचलन) सीखता है। फिर हमें ट्रांसफ़ॉर्म किए गए (स्केल किए गए) ट्रेनिंग डेटासेट प्राप्त करने के लिए प्रशिक्षण डेटासेट पर ट्रांसफ़ॉर्म विधि लागू करने की आवश्यकता है । हम प्रशिक्षण डेटासेट पर fit_transform लागू करके एक चरण में यह दोनों चरण भी कर सकते हैं ।

फिर हमें 2 अलग-अलग तरीकों की आवश्यकता क्यों है - फिट और ट्रांसफ़ॉर्म ?

व्यवहार में हमें एक अलग प्रशिक्षण और परीक्षण डेटासेट की आवश्यकता होती है और वह एक अलग फिट और ट्रांसफ़ॉर्म विधि में मदद करता है। हम प्रशिक्षण डेटासेट पर फिट होते हैं और प्रशिक्षण डेटासेट और परीक्षण डेटासेट - दोनों पर ट्रांसफ़ॉर्म विधि का उपयोग करते हैं । इस प्रकार प्रशिक्षण के साथ-साथ परीक्षण डेटासेट तब बदल दिए जाते हैं (स्केल किए गए) जो मॉडल मापदंडों का उपयोग करते हैं, जो प्रशिक्षण डेटासेट को फिट करने की विधि के बारे में सीखा गया था ।

उदाहरण कोड:

scaler = preprocessing.StandardScaler().fit(X_train)
scaler.transform(X_train) 
scaler.transform(X_test) 

2

यह एक तकनीकी जवाब नहीं है, लेकिन उम्मीद है, यह हमारे अंतर्ज्ञान का निर्माण करने में सहायक है:

सबसे पहले, सभी आकलनकर्ताओं को कुछ प्रशिक्षण डेटा पर प्रशिक्षित (या "फिट") किया जाता है। वह हिस्सा काफी सीधा है।

दूसरी बात, सभी स्किटिट-लर्न एस्टेक्टर्स का उपयोग पाइप लाइन में किया जा सकता है और पाइपलाइन के साथ विचार यह है कि डेटा पाइपलाइन से बहता है । एक बार पाइपलाइन में एक विशेष स्तर पर फिट होने के बाद, डेटा को पाइपलाइन में अगले चरण पर पारित किया जाता है, लेकिन जाहिर है कि डेटा को किसी तरह से बदलना (बदलना) है; अन्यथा, आपको पाइपलाइन में उस चरण की आवश्यकता नहीं होगी। इसलिए, परिवर्तन पाइपलाइन में अगले चरण की जरूरतों को पूरा करने के लिए डेटा को बदलने का एक तरीका है।

यदि आप एक पाइपलाइन का उपयोग नहीं कर रहे हैं, तो मुझे अभी भी लगता है कि इन मशीन लर्निंग टूल्स के बारे में इस तरह से सोचना मददगार है क्योंकि, यहां तक ​​कि सबसे सरल क्लासिफायरफायर अभी भी एक वर्गीकरण फ़ंक्शन कर रहा है। यह कुछ डेटा को इनपुट के रूप में लेता है और आउटपुट उत्पन्न करता है। यह एक पाइपलाइन भी है; बस एक बहुत ही सरल।

सारांश में, फिट प्रशिक्षण करता है, को बदलने , परिवर्तन आदेश पाइप लाइन में अगले चरण के लिए उस पर पारित करने के लिए पाइप लाइन में डेटा और fit_transform दोनों फिटिंग और एक संभवतः अनुकूलित चरण में रूपांतरित होने वाले है।


"" हम प्रशिक्षण डेटासेट पर फिट होते हैं और दोनों पर ट्रांसफॉर्मेशन विधि का उपयोग करते हैं - प्रशिक्षण डेटासेट और टेस्ट डेटासेट "" :) अच्छा
प्रकाश कुमार

2
मुझे लगता है कि आप नीचे टिप्पणी करना चाहते थे। मैं इसे प्रसाद नागेशकर को भेजूंगा। (अच्छा ... अगर मेरे पास प्रतिष्ठा होती तो मैं भी होता।)
एरिक मैकलचैन

1

V1V2V1V2

अन्य प्रश्न के लिए आप पहले प्रशिक्षण सेट में मॉडल का निर्माण करते हैं (वह मॉडल प्रशिक्षण सेट से आपके डेटा के पैटर्न या व्यवहार को सीखता है) और जब आप परीक्षण सेट में एक ही मॉडल चलाते हैं तो यह समान पैटर्न या व्यवहार की पहचान करने की कोशिश करता है एक बार जब यह पहचान लेता है तो यह अपने निष्कर्ष बनाता है और प्रशिक्षण डेटा के अनुसार परिणाम देता है


0

ऐसे कार्य पर विचार करें, जिससे हमें डेटा को सामान्य करने की आवश्यकता हो। उदाहरण के लिए, हम न्यूनतम-अधिकतम सामान्यीकरण या z- स्कोर सामान्यीकरण का उपयोग कर सकते हैं। मॉडल में कुछ अंतर्निहित पैरामीटर हैं। न्यूनतम-अधिकतम मान में न्यूनतम और अधिकतम मान और z- स्कोर सामान्यीकरण में माध्य और मानक विचलन। फिट () फ़ंक्शन इन मापदंडों के मूल्यों की गणना करता है।

फिट का प्रभाव ()

ट्रांसफॉर्म फ़ंक्शन वास्तविक डेटा पर मापदंडों के मूल्यों को लागू करता है और सामान्यीकृत मूल्य देता है।

परिवर्तन का प्रभाव ()

Fit_transform () फ़ंक्शन एक ही चरण में दोनों करता है।

Fit_transform का प्रभाव ()

ध्यान दें कि एक ही मान प्राप्त होता है चाहे हम 2 चरणों में प्रदर्शन करते हैं या एक ही चरण में।


0

"फिट" बाद में स्केलिंग के लिए उपयोग किए जाने वाले माध्य और एसटीडी की गणना करता है । (jsut a computation), आपको कुछ भी नहीं दिया जाता है।

"ट्रांसफॉर्म" डेटा को ऑटोस्केल करने के लिए पहले से गणना किए गए माध्य और एसटीडी का उपयोग करता है (सभी मूल्यों से घटाना और फिर इसे डीडी से विभाजित करता है)।

"fit_transform" एक ही समय में दोनों करता है। तो आप इसे 2 के बजाय 1 लाइन के कोड के साथ कर सकते हैं।

अब आइए इसे व्यवहार में देखें:

के लिए एक्स प्रशिक्षण सेट , हम करते हैं "fit_transform" क्योंकि हम मतलब और एसटीडी की गणना, और फिर इसका इस्तेमाल डेटा लपेटकर करने के लिए की जरूरत है। के लिए एक्स परीक्षण सेट , ठीक है, हम पहले से ही मतलब और एसटीडी हिस्सा है, इसलिए हम केवल "परिणत" है।

यह सुपर सरल है। आप बहुत अच्छा कर रहे हैं। अपना अच्छा काम जारी रखो मेरे दोस्त :-)

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