Sklearn में 'ट्रांसफॉर्म' और 'फिट_ट्रांसफॉर्म' के बीच क्या अंतर है


115

Sklearn-python टूलबॉक्स में, दो कार्य transformऔर fit_transformहैं sklearn.decomposition.RandomizedPCA। दो कार्यों का वर्णन इस प्रकार है

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

लेकिन उनमें क्या अंतर है?


5
est.fit_transform(X)हमेशा के बराबर है est.fit(X).transform(X), लेकिन आमतौर पर तेजी से।
फ्रेड फू

जवाबों:


22

यहां अंतर आप pca.transform का उपयोग कर सकते हैं केवल यदि आपने पहले से ही मैट्रिक्स पर पीसीए की गणना की है

   In [12]: pc2 = RandomizedPCA(n_components=3)

    In [13]: pc2.transform(X) # can't transform because it does not know how to do it.
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-13-e3b6b8ea2aff> in <module>()
    ----> 1 pc2.transform(X)

    /usr/local/lib/python3.4/dist-packages/sklearn/decomposition/pca.py in transform(self, X, y)
        714         # XXX remove scipy.sparse support here in 0.16
        715         X = atleast2d_or_csr(X)
    --> 716         if self.mean_ is not None:
        717             X = X - self.mean_
        718 

    AttributeError: 'RandomizedPCA' object has no attribute 'mean_'

    In [14]: pc2.ftransform(X) 
    pc2.fit            pc2.fit_transform  

    In [14]: pc2.fit_transform(X)
    Out[14]: 
    array([[-1.38340578, -0.2935787 ],
           [-2.22189802,  0.25133484],
           [-3.6053038 , -0.04224385],
           [ 1.38340578,  0.2935787 ],
           [ 2.22189802, -0.25133484],
           [ 3.6053038 ,  0.04224385]])

यदि आप उपयोग करना चाहते हैं तो आपको .transformअपने pca में परिवर्तन नियम सिखाने की आवश्यकता है

In [20]: pca = RandomizedPCA(n_components=3)

In [21]: pca.fit(X)
Out[21]: 
RandomizedPCA(copy=True, iterated_power=3, n_components=3, random_state=None,
       whiten=False)

In [22]: pca.transform(z)
Out[22]: 
array([[ 2.76681156,  0.58715739],
       [ 1.92831932,  1.13207093],
       [ 0.54491354,  0.83849224],
       [ 5.53362311,  1.17431479],
       [ 6.37211535,  0.62940125],
       [ 7.75552113,  0.92297994]])

In [23]: 

विशेष रूप से PCA ट्रांसफ़ॉर्मेशन में मैट्रिक्स Z के मैट्रिक्स X के PCA अपघटन के साथ प्राप्त आधार का परिवर्तन लागू होता है।


मैंने अपना प्रश्न संशोधित कर दिया है। दोनों फ़ंक्शन समान प्रकार के मान लौटाते हैं।
tqjustc

2
क्या आपका मतलब है कि fit_transformदो कार्यों का संयोजन fitऔर transform?
tqjustc

6
यदि आप एक ही मैट्रिक्स पर फिट और ट्रांसफॉर्म का उपयोग करते हैं। नहीं अगर आप मैट्रिक्स x फिट करते हैं और फिर मैट्रिक्स जेड को बदल देते हैं
Donbeo

लाइन में [14] कहते हैं "ftransform", वह क्या है?
राजदीप विश्वास 3

92

में scikit सीखने आकलनकर्ता एपीआई ,

fit() : प्रशिक्षण डेटा से सीखने के मॉडल पैरामीटर उत्पन्न करने के लिए उपयोग किया जाता है

transform(): fit()विधि से उत्पन्न पैरामीटर , तब्दील डेटा सेट उत्पन्न करने के लिए मॉडल पर लागू होते हैं।

fit_transform(): एक ही डेटा सेट पर fit()और transform()एपीआई का संयोजन

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

इस किताब से चैकआउट चैप्टर -4 और अधिक स्पष्टता के लिए स्टैकएक्सचेंज से उत्तर


54

इन विधियों का उपयोग किसी दिए गए डेटा के केंद्र / सुविधा के पैमाने के लिए किया जाता है। यह मूल रूप से किसी विशेष सीमा के भीतर डेटा को सामान्य करने में मदद करता है

इसके लिए, हम Z- स्कोर पद्धति का उपयोग करते हैं।

जेड स्कोर

हम डेटा के प्रशिक्षण सेट पर ऐसा करते हैं।

1. फ़िट (): विधि मापदंडों μ और saves की गणना करती है और उन्हें आंतरिक वस्तुओं के रूप में सहेजती है।

2. ट्रांसफ़ॉर्म (): इन परिकलित मापदंडों का उपयोग करने वाला तरीका किसी विशेष डेटासेट में परिवर्तन लागू करता है।

3. Fit_transform (): डेटासेट के रूपांतरण के लिए फिट () और ट्रांसफ़ॉर्म () पद्धति से जुड़ता है।

फ़ीचर स्केलिंग / मानकीकरण के लिए कोड स्निपेट (train_test_split के बाद)।

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_transform(X_train)
sc.transform(X_test)

हम अपने परीक्षण सेट पर एक ही (दो समान प्रशिक्षण सेट μ और values ​​(मान)) पैरामीटर परिवर्तन लागू करते हैं।


1
इस स्पष्टीकरण के लिए धन्यवाद। मैं उत्सुक था अगर 'फिट' मूल्यों को ले जाने और यह मदद की!
अदीब

2
कोड उदाहरण के लिए +1। मुझे भ्रम था कि क्या आप ट्रेन सेट पर फिट_ट्रांसफॉर्म का उपयोग कर सकते हैं और फिर टेस्ट सेट को बदल सकते हैं, या क्या आपको ट्रेन में अलग से फिट होने की जरूरत है
विवेक

2
fit_tranform (..) का उपयोग X_test के लिए नहीं किया जा सकता क्योंकि परीक्षण परीक्षण में X_train डेटा सेट से μ और (की गणना की जानी चाहिए। fit_tranform (..) का उपयोग केवल प्रशिक्षण डेटा सेट पर किया जा सकता है। कृपया मेरी समझ को सही करें।
दिन

1
हाँ आप सही हैं। केवल ट्रांसफ़ॉर्म (..) का उपयोग परीक्षण पर किया जा सकता है क्योंकि यह X_train से सीखे हुए पैरामेट्स का उपयोग करता है X_test डेटा को मानकीकृत करने के लिए
shaurya uppal

7

तरीकों के बीच सामान्य अंतर:

  • fit (raw_documents [, y]): कच्चे दस्तावेज़ों में सभी टोकन की शब्दावली शब्दकोश सीखें।
  • fit_transform (raw_documents [, y]): शब्दावली शब्दकोश सीखें और टर्म-डॉक्यूमेंट मैट्रिक्स लौटाएं। यह परिवर्तन के बाद फिट होने के बराबर है, लेकिन अधिक कुशलता से लागू किया गया है।
  • ट्रांस्फ़ॉर्म (raw_documents): दस्तावेज़ों को दस्तावेज़-टर्म मैट्रिक्स में परिवर्तित करें। फिट या निर्माणकर्ता को प्रदान की गई शब्दावली के साथ कच्चे पाठ दस्तावेजों के टोकन टोकन निकालें।

Fit_transform और ट्रांस्फ़ॉर्म दोनों समान, दस्तावेज़-टर्म मैट्रिक्स लौटाता है।

स्रोत


4

यहाँ मूल अंतर .fit()और के बीच .fit_transform():

फ़िट ():

मॉडल को फिट करने और मॉडल को चलाने के लिए दो ऑब्जेक्ट / पैरामीटर (x, y) वाले सुपरवाइज्ड लर्निंग में उपयोग किया जाता है, जहां हम जानते हैं कि हम क्या भविष्यवाणी करने जा रहे हैं

.fit_transform ():

एक वस्तु / पैरामीटर (x) वाले अनसुपरवाइज्ड लर्निंग में उपयोग किया जाता है, जहां हमें पता नहीं होता है कि हम क्या भविष्यवाणी करने जा रहे हैं।


यह बहुत सटीक नहीं है; फिट () का उपयोग बिना पढ़े हुए शिक्षण में भी किया जा सकता है। लेकिन अगर आप केवल संक्षिप्तता के लिए देखरेख करने की कोशिश कर रहे हैं, तो यह एक शुरुआती को समझाने का एक अच्छा तरीका है।
राजदीप विश्वास

1

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

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


0

क्यों और कब प्रत्येक का उपयोग करें:

सभी प्रतिक्रियाएं काफी अच्छी हैं, लेकिन मैं WHY और WHEN में प्रत्येक विधि का उपयोग करने पर जोर दूंगा।

फिट (), रूपांतर (), fit_transform ()

आमतौर पर हमें डेटासेट के रूप में एक्स (y) के साथ एक पर्यवेक्षित शिक्षण समस्या होती है, और हम इसे प्रशिक्षण डेटा और परीक्षण डेटा में विभाजित करते हैं:

import numpy as np
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y)

X_train_vectorized = model.fit_transform(X_train)
X_test_vectorized = model.transform(X_test)

कल्पना करें कि हम एक टोकन फिटिंग कर रहे हैं, अगर हम X फिट करते हैं तो हम टोकन में डेटा का परीक्षण कर रहे हैं, लेकिन मैंने इस त्रुटि को कई बार देखा है!

सही केवल X_train के साथ फिट होने के लिए है , क्योंकि आप "अपने भविष्य के डेटा" को नहीं जानते हैं, इसलिए आप कुछ भी फिटिंग के लिए X_test डेटा का उपयोग नहीं कर सकते हैं!

फिर आप अपना परीक्षण डेटा बदल सकते हैं, लेकिन अलग-अलग, इसीलिए अलग-अलग तरीके हैं।

अंतिम टिप: X_train_transformed = model.fit_transform(X_train)इसके बराबर है X_train_transformed = model.fit(X_train).transform(X_train), लेकिन पहले वाला तेज है।

ध्यान दें कि मैं जिसे "मॉडल" कहता हूं, वह आमतौर पर एक स्केलर, एक टीएफडीएफ ट्रांसफार्मर, अन्य प्रकार के वेक्टराइज़र, एक टोकन प्रकार होगा ...

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