2

自動的に識別したい 3 つの異なるタイプの画像タグを分類するために、PCA と LDA がどの程度うまく機能するかをテストしてきました。私のコードでは、X はデータ マトリックスで、各行は画像のピクセルであり、y は各行の分類を示す 1D 配列です。

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.lda import LDA

pca = PCA(n_components=2)
X_r = pca.fit(X).transform(X)

plt.figure(figsize = (35, 20))
plt.scatter(X_r[:, 0], X_r[:, 1], c=y, s=200)

lda = LDA(n_components=2)
X_lda = lda.fit(X, y).transform(X)
plt.figure(figsize = (35, 20))
plt.scatter(X_lda[:, 0], X_lda[:, 1], c=y, s=200)

LDA を使用すると、最終的に 3 つの明確に区別できるクラスターが得られますが、それらはわずかに重なり合うだけです。分類したい新しい画像がある場合、それを 1D 配列に変換したら、それがどのクラスターに分類されるかを予測するにはどうすればよいでしょうか。 "? また、「.transform(X)」関数が自分のデータに適合するとどうなるかにも興味がありました。

4

1 に答える 1

8

いくつかのデータXで LDA モデルをトレーニングした後、他のデータを射影したい場合がありますZ。この場合、あなたがすべきことは次のとおりです。

lda = LDA(n_components=2) #creating a LDA object
lda = lda.fit(X, y) #learning the projection matrix
X_lda = lda.transform(X) #using the model to project X 
# .... getting Z as test data....
Z = lda.transform(Z) #using the model to project Z
z_labels = lda.predict(Z) #gives you the predicted label for each sample
z_prob = lda.predict_proba(Z) #the probability of each sample to belong to each class

'fit' は、データのフィッティングではなく、モデルのフィッティングに使用されることに注意してください

Sotransformは、表現 (この場合は射影) を構築するために使用されpredict、各サンプルのラベルを予測するために使用されます。(これはBaseEstimator、sklearn から継承するすべてのクラスに使用されます。

その他のオプションとプロパティについては、ドキュメントを参照してください。

また、sklearn の API を使用するとpca.fit_transform(X)pca.fit(X).transform(X). コードのこの時点以降のモデル自体に関心がない場合は、このバージョンを使用してください。

いくつかのコメント: PCA は教師なしアプローチであるため、LDA は、現在行っているこの「視覚的」分類を行うためのより良いアプローチです。

さらに、分類に興味がある場合は、視覚化のための優れたアプローチですが、必ずしも LDA ではなく、さまざまなタイプの分類子の使用を検討できます。

于 2015-06-29T06:31:42.607 に答える