apa perbedaan antara 'transform' dan 'fit_transform' di sklearn

116

Di kotak alat sklearn-python, ada dua fungsi transformdan fit_transformtentang sklearn.decomposition.RandomizedPCA. Penjelasan dari dua fungsi tersebut adalah sebagai berikut

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Namun apa perbedaan diantara keduanya?

tqjustc.dll
sumber
5
est.fit_transform(X)selalu setara dengan est.fit(X).transform(X), tetapi biasanya lebih cepat.
Fred Foo

Jawaban:

22

Di sini perbedaannya Anda dapat menggunakan pca.transform hanya jika Anda telah menghitung PCA pada matriks

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

jika Anda ingin menggunakan, .transformAnda perlu mengajarkan aturan transformasi ke pca Anda

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

Secara khusus transformasi PCA menerapkan perubahan basis yang diperoleh dengan dekomposisi PCA dari matriks X ke matriks Z.

Donbeo
sumber
Saya telah mengubah pertanyaan saya. Kedua fungsi tersebut mengembalikan jenis nilai yang sama.
tqjustc
2
maksud Anda itu fit_transformadalah kombinasi dari dua fungsi fitdan transform?
tqjustc
6
Jika Anda menggunakan fit and transform pada matriks yang sama ya. Tidak jika Anda menyesuaikan matriks x lalu mengubah matriks z
Donbeo
Line In [14] mengatakan "ftransform", apa itu?
Rajdeep Biswas
95

Dalam api estimator scikit-learn ,

fit() : digunakan untuk menghasilkan parameter model pembelajaran dari data pelatihan

transform(): parameter yang dihasilkan dari fit()metode, diterapkan pada model untuk menghasilkan kumpulan data yang diubah.

fit_transform(): kombinasi fit()dan transform()api pada kumpulan data yang sama

masukkan deskripsi gambar di sini

Lihat Bab-4 dari buku ini & jawaban dari stackexchange untuk lebih jelasnya

Ronak Poriya
sumber
54

Metode ini digunakan untuk memusatkan / menampilkan skala data tertentu. Ini pada dasarnya membantu menormalkan data dalam rentang tertentu

Untuk ini, kami menggunakan metode Z-score.

Z-Score

Kami melakukan ini pada set data pelatihan.

1. Fit (): Metode menghitung parameter μ dan σ dan menyimpannya sebagai objek internal.

2. Transform (): Metode menggunakan parameter yang dihitung ini menerapkan transformasi ke dataset tertentu.

3. Fit_transform (): menggabungkan metode fit () dan transform () untuk transformasi dataset.

Potongan kode untuk Feature Scaling / Standardization (setelah train_test_split).

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

Kami menerapkan transformasi parameter yang sama (set pelatihan sama dua parameter μ dan σ (nilai)) pada set pengujian kami.

shaurya uppal
sumber
1
Terima kasih atas penjelasannya. Saya ingin tahu apakah nilai 'fit' terbawa dan ini membantu!
Adib
2
1 untuk contoh kode. Saya bingung apakah Anda dapat menggunakan fit_transform di set kereta dan kemudian mengubah set pengujian, atau apakah Anda memerlukan penyesuaian terpisah di kereta
Vivek
2
fit_tranform (..) tidak dapat digunakan untuk X_test karena tes tes harus menggunakan μ dan σ yang dihitung dari kumpulan data X_train. fit_tranform (..) hanya dapat digunakan pada set data pelatihan. Harap perbaiki pemahaman saya.
daya
1
Ya kamu benar. Hanya transform (..) yang dapat digunakan pada pengujian karena ia menggunakan parameter yang dipelajari dari X_train untuk menstandarkan data
X_test
7

Perbedaan umum antara metode:

  • fit (raw_documents [, y]): Mempelajari kamus kosakata dari semua token dalam dokumen mentah.
  • fit_transform (raw_documents [, y]): Mempelajari kamus kosakata dan mengembalikan matriks dokumen istilah. Ini setara dengan fit yang diikuti dengan transformasi, tetapi diterapkan dengan lebih efisien.
  • transform (raw_documents): Mengubah dokumen menjadi matriks istilah dokumen. Ekstrak jumlah token dari dokumen teks mentah menggunakan kosakata yang sesuai atau yang disediakan untuk konstruktor.

Baik fit_transform dan transform mengembalikan matriks istilah dokumen yang sama.

Sumber

Nikita Jain
sumber
4

Di sini perbedaan mendasar antara .fit()& .fit_transform():

.cocok():

digunakan dalam Supervised learning yang memiliki dua objek / parameter (x, y) untuk menyesuaikan model dan membuat model untuk dijalankan, dimana kita tahu apa yang akan kita prediksi

.fit_transform ():

digunakan dalam Unsupervised Learning yang memiliki satu objek / parameter (x), dimana kita tidak tahu, apa yang akan kita prediksi.

sebuah zEnItH
sumber
Ini tidak terlalu tepat; fit () dapat digunakan dalam pembelajaran tanpa pengawasan juga. Tetapi jika Anda mencoba untuk menyederhanakan hanya agar singkat, maka ini adalah cara yang baik untuk menjelaskannya kepada pemula.
Rajdeep Biswas
3

Dalam istilah awam, fit_transform berarti melakukan beberapa perhitungan dan kemudian melakukan transformasi (misalnya menghitung sarana kolom dari beberapa data dan kemudian mengganti nilai yang hilang). Jadi untuk set pelatihan, Anda perlu menghitung dan melakukan transformasi.

Namun untuk set pengujian, Machine learning menerapkan prediksi berdasarkan apa yang telah dipelajari selama set pelatihan sehingga tidak perlu dihitung, mesin hanya melakukan transformasi.

DhruvStan7
sumber
1

Mengapa dan Kapan menggunakan masing-masing:

Semua tanggapannya cukup bagus, tetapi saya akan menekankan pada MENGAPA dan KAPAN menggunakan masing-masing metode.

fit (), transform (), fit_transform ()

Biasanya kami memiliki masalah pembelajaran yang diawasi dengan (X, y) sebagai kumpulan data, dan kami membaginya menjadi data pelatihan dan data pengujian:

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)

Bayangkan kita memasang tokenizer, jika kita memasukkan X kita memasukkan data pengujian ke dalam tokenizer, tetapi saya telah melihat kesalahan ini berkali-kali!

Yang benar adalah HANYA cocok dengan X_train , karena Anda tidak tahu "data masa depan Anda" sehingga Anda tidak dapat menggunakan data X_test untuk menyesuaikan apa pun!

Kemudian Anda dapat mengubah data pengujian Anda, tetapi secara terpisah, itulah sebabnya ada metode yang berbeda.

Tip terakhir: X_train_transformed = model.fit_transform(X_train)sama dengan:, X_train_transformed = model.fit(X_train).transform(X_train)tetapi yang pertama lebih cepat.

Perhatikan bahwa yang saya sebut "model" biasanya adalah scaler, trafo tfidf, vectorizer jenis lain, tokenizer ...

Rafa Nogales
sumber