У панелі інструментів sklearn-python є дві функції transform
та fit_transform
про sklearn.decomposition.RandomizedPCA
. Опис двох функцій полягає в наступному
Але в чому різниця між ними?
У панелі інструментів sklearn-python є дві функції transform
та fit_transform
про sklearn.decomposition.RandomizedPCA
. Опис двох функцій полягає в наступному
Але в чому різниця між ними?
Відповіді:
Тут різницю ви можете використовувати 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.
fit_transform
це поєднання двох функцій fit
і transform
?
У програмі оцінки оцінювача api ,
fit()
: використовується для генерації параметрів моделі навчання з навчальних даних
transform()
: параметри, згенеровані з fit()
методу, застосованого за моделлю для генерації трансформованого набору даних
fit_transform()
: комбінація fit()
та transform()
api для одного набору даних
Оформити замовлення Розділ 4 цієї книги та відповідь з stackexchange для більшої ясності
Ці методи використовуються для центрування / масштабу функції даних. Це в основному допомагає нормалізувати дані в певному діапазоні
Для цього ми використовуємо метод 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)
Застосовуємо те саме (навчальний набір однакових двох параметрів μ та σ (значення)) перетворення параметрів на нашому тестовому наборі.
Загальна різниця між методами:
І fit_transform, і перетворення повертають ту саму, матрицю документа.
Тут основна різниця між .fit()
& .fit_transform()
:
- це використання в контрольованому навчанні з двома об'єктами / параметрами (x, y) для підгонки моделі та змушування моделі до запуску, де ми знаємо, що те, що ми будемо передбачати
це використання в навчанні без нагляду, що має один об'єкт / параметр (х), де ми не знаємо, що ми будемо передбачати.
Усі відповіді досить хороші, але я би наголошу на ЧОМУ та КОГО використовую кожен метод.
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, іншим видом векторизатора, токенізатором ...
Зрозуміло, це означає, що fit_transform означає зробити деякий обчислення, а потім зробити перетворення (скажімо, обчислити засоби стовпців з деяких даних, а потім замінити пропущені значення). Тож для навчального набору потрібно як обчислити, так і зробити трансформацію.
Але для набору тестування Машинне навчання застосовує прогнозування, виходячи з того, що було вивчено під час навчального набору, і тому його не потрібно обчислювати, воно просто виконує перетворення.
est.fit_transform(X)
завжди рівнозначнийest.fit(X).transform(X)
, але зазвичай швидший.