sklearn-pythonツールボックスには、2つの関数transform
とfit_transform
aboutがありsklearn.decomposition.RandomizedPCA
ます。2つの機能の説明は次のとおりです。
しかし、それらの違いは何ですか?
sklearn-pythonツールボックスには、2つの関数transform
とfit_transform
aboutがありsklearn.decomposition.RandomizedPCA
ます。2つの機能の説明は次のとおりです。
しかし、それらの違いは何ですか?
回答:
ここでは、行列でPCAをすでに計算している場合にのみ、pca.transformを使用できるという違いがあります。
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
場合は、変換ルールをPCAに教える必要があります
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変換は、行列XのPCA分解で得られた基底の変化を行列Zに適用します。
fit_transform
2つの関数の組み合わせですfit
とtransform
?
で推定APIをscikit-学び、
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)
テストセットに同じ(トレーニングセットと同じ2つのパラメーターμおよびσ(値))パラメーター変換を適用します。
メソッド間の一般的な違い:
fit_transformとtransformはどちらも同じDocument-term行列を返します。
.fit()
&の基本的な違いは.fit_transform()
次のとおりです。
モデルを適合させ、実行するモデルを作成するための2つのオブジェクト/パラメーター(x、y)を持つ教師あり学習での使用であり、予測対象がわかっている場合
教師なし学習で1つのオブジェクト/パラメーター(x)を使用している場合、何を予測するかわからない。
素人の言葉で言えば、fit_transformは何らかの計算を行ってから変換を行うことを意味します(たとえば、いくつかのデータから列の平均を計算してから、欠損値を置き換える)。したがって、トレーニングセットでは、計算と変換の両方を行う必要があります。
ただし、テストセットの場合、機械学習はトレーニングセットで学習された内容に基づいて予測を適用するため、計算する必要はなく、変換を実行するだけです。
すべての応答は非常に良好ですが、私はなぜ、そしてそれぞれの方法を使用するのかを強調します。
fit()、transform()、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)
、通常はより高速です。