В наборе инструментов sklearn-python есть две функции transform
и fit_transform
about sklearn.decomposition.RandomizedPCA
. Описание двух функций следующее
Но в чем разница между ними?
В наборе инструментов sklearn-python есть две функции transform
и fit_transform
about 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 оценки scikit-learn ,
fit()
: используется для создания параметров модели обучения из данных обучения
transform()
: параметры, созданные из fit()
метода, применяемые к модели для создания преобразованного набора данных.
fit_transform()
: комбинация fit()
и transform()
api в одном наборе данных
Ознакомьтесь с главой 4 из этой книги и ответом от stackexchange для большей ясности.
Эти методы используются для центрирования / масштабирования заданных данных. Это в основном помогает нормализовать данные в определенном диапазоне.
Для этого мы используем метод Z-score.
Мы делаем это на обучающем наборе данных.
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, так и transform возвращают одну и ту же матрицу Document-term.
Вот основная разница между .fit()
&.fit_transform()
:
используется в контролируемом обучении с двумя объектами / параметрами (x, y) для соответствия модели и запуска модели, где мы знаем, что мы собираемся предсказать
используется в неконтролируемом обучении с одним объектом / параметром (x), где мы не знаем, что мы собираемся предсказать.
С точки зрения непрофессионала, fit_transform означает выполнение некоторых вычислений, а затем преобразование (скажем, вычисление средних значений столбцов на основе некоторых данных с последующей заменой отсутствующих значений). Итак, для обучающего набора вам нужно как рассчитать, так и выполнить преобразование.
Но для набора для тестирования машинное обучение применяет прогнозирование на основе того, что было изучено во время набора для обучения, поэтому ему не нужно вычислять, оно просто выполняет преобразование.
Все ответы довольно хороши, но я бы сделал акцент на том, ПОЧЕМУ и КОГДА использовать каждый метод.
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, векторизатором другого типа, токенизатором ...
est.fit_transform(X)
всегда эквивалентноest.fit(X).transform(X)
, но обычно быстрее.