яка різниця між "перетворенням" та "fit_transform" у sklearn


115

У панелі інструментів sklearn-python є дві функції transformта fit_transformпро sklearn.decomposition.RandomizedPCA. Опис двох функцій полягає в наступному

введіть тут опис зображення введіть тут опис зображення

Але в чому різниця між ними?


5
est.fit_transform(X)завжди рівнозначний est.fit(X).transform(X), але зазвичай швидший.
Фред Фоо

Відповіді:


22

Тут різницю ви можете використовувати pca.transform, лише якщо ви вже обчислили PCA на матриці

   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вам потрібно навчити правилу трансформації вашої ПК

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 застосовують зміну бази, отриману при розкладі PCA матриці X на матрицю Z.


Я змінив своє запитання. Дві функції повертають однакові значення.
tqjustc

2
ти маєш на увазі, що fit_transformце поєднання двох функцій fitі transform?
tqjustc

6
Якщо ви використовуєте fit і перетворюєте на одній матриці так. Якщо ви не підходите до матриці x, а потім перетворите матрицю z
Donbeo

У рядку [14] сказано "ftransform", що це?
Rajdeep Biswas

92

У програмі оцінки оцінювача api ,

fit() : використовується для генерації параметрів моделі навчання з навчальних даних

transform(): параметри, згенеровані з fit()методу, застосованого за моделлю для генерації трансформованого набору даних

fit_transform(): комбінація fit()та transform()api для одного набору даних

введіть тут опис зображення

Оформити замовлення Розділ 4 цієї книги та відповідь з stackexchange для більшої ясності


54

Ці методи використовуються для центрування / масштабу функції даних. Це в основному допомагає нормалізувати дані в певному діапазоні

Для цього ми використовуємо метод Z-оцінка.

Z-оцінка

Ми робимо це на навчальному наборі даних.

1. Fit (): метод обчислює параметри μ і σ і зберігає їх як внутрішні об'єкти.

2. Transform (): метод, що використовує ці обчислені параметри, застосовує перетворення до певного набору даних.

3. Fit_transform (): приєднується до методу fit () та transform () для перетворення набору даних.

Фрагмент коду для масштабування / стандартизації функцій (після train_test_split).

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

Застосовуємо те саме (навчальний набір однакових двох параметрів μ та σ (значення)) перетворення параметрів на нашому тестовому наборі.


1
Дякую за це пояснення. Мені було цікаво, якщо значення "придатності" переносяться, і це допомогло!
Адіб

2
+1 для прикладу коду. У мене виникло розгубленість, чи можете ви використовувати fit_transform на наборі поїздів, а потім трансформувати тестовий набір, чи вам потрібна окрема посадка у поїзді
Вівек

2
fit_tranform (..) не може бути використаний для X_test, оскільки тестовий тест повинен використовувати μ і σ, обчислені з набору даних X_train. fit_tranform (..) може використовуватися лише у наборі даних про навчання. Будь ласка, виправте моє розуміння.
день

1
Так, ви праві. Тільки перетворення (..) можна використовувати на тесті, оскільки він використовує вивчені парами з X_train для стандартизації даних
X_test

7

Загальна різниця між методами:

  • fit (raw_documents [, y]): вивчіть словник словника всіх лексем у сирих документах.
  • fit_transform (raw_documents [, y]): вивчити словник словника та повернути матрицю терміна-документа. Це еквівалентно придатності з подальшим перетворенням, але більш ефективно реалізованим.
  • трансформація (raw_documents): перетворення документів у матрицю документа-терміна. Маркер вилучення відлічується від неочищених текстових документів, використовуючи словник, приталений як fit, або той, що надається конструктору.

І fit_transform, і перетворення повертають ту саму, матрицю документа.

Джерело


4

Тут основна різниця між .fit()& .fit_transform():

.fit ():

- це використання в контрольованому навчанні з двома об'єктами / параметрами (x, y) для підгонки моделі та змушування моделі до запуску, де ми знаємо, що те, що ми будемо передбачати

.fit_transform ():

це використання в навчанні без нагляду, що має один об'єкт / параметр (х), де ми не знаємо, що ми будемо передбачати.


Це не дуже точно; fit () може бути використаний і в навчанні без нагляду. Але якщо ви намагаєтесь спростити лише заради стислості, то це хороший спосіб пояснити початківцю.
Rajdeep Biswas

1

Чому і коли використовувати кожен:

Усі відповіді досить хороші, але я би наголошу на ЧОМУ та КОГО використовую кожен метод.

fit (), перетворити (), fit_transform ()

Зазвичай у нас є контрольована проблема навчання з (X, 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)але перша швидша.

Зауважте, що те, що я називаю "моделлю", як правило, буде скалером, трансформатором tfidf, іншим видом векторизатора, токенізатором ...


1

Зрозуміло, це означає, що fit_transform означає зробити деякий обчислення, а потім зробити перетворення (скажімо, обчислити засоби стовпців з деяких даних, а потім замінити пропущені значення). Тож для навчального набору потрібно як обчислити, так і зробити трансформацію.

Але для набору тестування Машинне навчання застосовує прогнозування, виходячи з того, що було вивчено під час навчального набору, і тому його не потрібно обчислювати, воно просто виконує перетворення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.