Di kotak alat sklearn-python, ada dua fungsi transform
dan fit_transform
tentang sklearn.decomposition.RandomizedPCA
. Penjelasan dari dua fungsi tersebut adalah sebagai berikut
Namun apa perbedaan diantara keduanya?
Di kotak alat sklearn-python, ada dua fungsi transform
dan fit_transform
tentang sklearn.decomposition.RandomizedPCA
. Penjelasan dari dua fungsi tersebut adalah sebagai berikut
Namun apa perbedaan diantara keduanya?
Jawaban:
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, .transform
Anda 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.
fit_transform
adalah kombinasi dari dua fungsi fit
dan transform
?
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
Lihat Bab-4 dari buku ini & jawaban dari stackexchange untuk lebih jelasnya
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.
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.
Perbedaan umum antara metode:
Baik fit_transform dan transform mengembalikan matriks istilah dokumen yang sama.
Di sini perbedaan mendasar antara .fit()
& .fit_transform()
:
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
digunakan dalam Unsupervised Learning yang memiliki satu objek / parameter (x), dimana kita tidak tahu, apa yang akan kita prediksi.
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.
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 ...
est.fit_transform(X)
selalu setara denganest.fit(X).transform(X)
, tetapi biasanya lebih cepat.