sklearn'de 'transform' ve 'fit_transform' arasındaki fark nedir


117

Sklearn-python araç kutusunda, iki işlev vardır transformve fit_transformhakkında sklearn.decomposition.RandomizedPCA. İki işlevin açıklaması aşağıdaki gibidir

görüntü açıklamasını buraya girin görüntü açıklamasını buraya girin

Ama aralarındaki fark nedir?


5
est.fit_transform(X)her zaman eşdeğerdir est.fit(X).transform(X), ancak genellikle daha hızlıdır.
Fred Foo

Yanıtlar:


22

Burada, pca.transform'u yalnızca bir matriste PCA'yı zaten hesapladıysanız kullanabilirsiniz.

   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]])

kullanmak .transformistiyorsanız, dönüşüm kuralını PC'nize öğretmeniz gerekir.

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]: 

Özellikle PCA dönüşümü, X matrisinin PCA ayrışması ile elde edilen temel değişikliğini Z matrisine uygular.


Sorumu değiştirdim. İki işlev aynı tür değerleri döndürür.
tqjustc

2
Ne demek istiyorsun fit_transformiki fonksiyonların birleşimidir fitve transform?
tqjustc

6
Aynı matris üzerinde fit ve dönüşüm kullanırsanız, evet. X matrisini
sığdırıp

Satır [14] "ftransform" diyor, bu nedir?
Rajdeep Biswas

97

Gelen tahmincisi api scikit-öğrenme ,

fit() : eğitim verilerinden öğrenme modeli parametreleri oluşturmak için kullanılır

transform(): fit()yöntemden üretilen, dönüştürülmüş veri kümesi oluşturmak için modele uygulanan parametreler .

fit_transform(): Kombinasyonu fit()ve transform()aynı veri kümesi üzerinde API

görüntü açıklamasını buraya girin

Ödeme Bölüm-4 bundan kitaptan gelen ve cevap Stack Exchange fazla netlik için


56

Bu yöntemler, belirli bir verinin ölçeğini ortalamak / özellik ölçeğini oluşturmak için kullanılır. Temel olarak, belirli bir aralıktaki verileri normalleştirmeye yardımcı olur

Bunun için Z-skor yöntemini kullanıyoruz.

Z Puanı

Bunu eğitim veri setinde yapıyoruz.

1. Fit (): Yöntem, μ ve σ parametrelerini hesaplar ve bunları dahili nesneler olarak kaydeder.

2. Dönüştür (): Bu hesaplanan parametreleri kullanan yöntem, dönüşümü belirli bir veri kümesine uygular.

3. Fit_transform (): veri kümesinin dönüşümü için fit () ve transform () yöntemini birleştirir.

Özellik Ölçeklendirme / Standardizasyon için kod pasajı (train_test_split'ten sonra).

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

Test setimize aynı (eğitim seti aynı iki parametre μ ve σ (değerler)) parametre dönüşümünü uygularız.


1
Bu açıklama için teşekkür ederim. 'Uyum' değerlerinin devam edip etmediğini merak ettim ve bu yardımcı oldu!
Adib

2
Kod örneği için +1. Fit_transform'u tren setinde kullanıp sonra test setini dönüştürüp dönüştüremeyeceğiniz veya trende ayrı bir uyum ihtiyacınız olup olmadığı konusunda kafa karışıklığı yaşadım
Vivek

2
fit_tranform (..) X_test için kullanılamaz çünkü test testi X_train veri setinden hesaplanan μ ve σ'yu kullanmalıdır. fit_tranform (..) yalnızca eğitim veri setinde kullanılabilir. Lütfen anlayışımı düzeltin.
daya

1
Evet haklısın. X_test verilerini standartlaştırmak için X_train'den öğrenilen parametreleri kullandığı için testte yalnızca dönüşüm (..) kullanılabilir
shaurya uppal

7

Yöntemler arasındaki genel fark:

  • fit (raw_documents [, y]): Ham belgelerdeki tüm belirteçlerin bir kelime sözlüğünü öğrenin.
  • fit_transform (raw_documents [, y]): Kelime sözlüğünü öğrenin ve terim-belge matrisini döndürün. Bu, dönüşümün izlediği uyumla eşdeğerdir, ancak daha verimli bir şekilde uygulanır.
  • transform (raw_documents): Belgeleri belge dönem matrisine dönüştürür. Çıkarma jetonu, uygun veya oluşturucuya sağlanan kelime dağarcığını kullanarak ham metin belgelerini sayar.

Hem fit_transform hem de transform, aynı Belge terimli matrisi döndürür.

Kaynak


4

İşte .fit()& arasındaki temel fark .fit_transform():

.Uygun():

Modele uyacak iki nesne / parametreye (x, y) sahip olan ve neyi tahmin edeceğimizi bildiğimiz yerde çalıştırmak için model yapmaktır.

.fit_transform ():

Denetimsiz Öğrenmede, neyi tahmin edeceğimizi bilmediğimiz bir yerde tek bir nesneye / parametreye (x) sahip olmaktır.


Çok kesin değil; fit () denetimsiz öğrenmede de kullanılabilir. Ancak sadece kısalık uğruna aşırı basitleştirmeye çalışıyorsanız, yeni başlayanlara açıklamanın iyi bir yoludur.
Rajdeep Biswas

3

Layman'ın terimleriyle, fit_transform, bir miktar hesaplama yapmak ve sonra dönüştürme yapmak anlamına gelir (örneğin, bazı verilerden sütunların araçlarını hesaplamak ve ardından eksik değerleri değiştirmek). Yani eğitim seti için hem hesaplamanız hem de dönüşüm yapmanız gerekir.

Ancak test seti için Makine öğrenimi, eğitim seti sırasında öğrenilenlere dayalı olarak tahmin uygular ve bu nedenle hesaplamaya gerek kalmaz, yalnızca dönüşümü gerçekleştirir.


1

Neden ve Ne Zaman Kullanılır:

Tüm yanıtlar oldukça iyi, ancak her yöntemi NEDEN ve NE ZAMAN kullandığına vurgu yapacağım.

fit (), dönüştür (), fit_transform ()

Genellikle veri kümesi olarak (X, y) ile denetlenen bir öğrenme sorunumuz vardır ve bunu eğitim verilerine ve test verilerine böleriz:

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)

Bir jetonlaştırıcı yerleştirdiğimizi hayal edin, eğer X'i sığdırırsak, test verilerini jetonlaştırıcıya dahil ediyoruz, ancak bu hatayı birçok kez gördüm!

Doğru olan YALNIZCA X_train'e uymaktır , çünkü "gelecekteki verilerinizi" bilmediğiniz için X_test verilerini hiçbir şeyi sığdırmak için kullanamazsınız!

Daha sonra test verilerinizi dönüştürebilirsiniz, ancak ayrı ayrı, bu yüzden farklı yöntemler vardır.

Son ipucu: X_train_transformed = model.fit_transform(X_train)eşdeğerdir: X_train_transformed = model.fit(X_train).transform(X_train)ancak ilki daha hızlıdır.

"Model" dediğim şeyin genellikle bir ölçekleyici, bir tfidf transformatörü, başka tür bir vektörleştirici, bir jetonlaştırıcı olacağını unutmayın ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.