2016-10-28 3 views

答えて

0

私はLDAによって潜在的なディリクレの割り当てを意味すると思いますが、線形判別分析を意味するならば、単純にsklearn.discriminant_analysis.LinearDiscriminantAnalysisを分類子として使用し、精度や精度を比較して何かを呼び出すことができます。

トピック表現をSVMに送る前に、潜在的なディリクレ割り当てをトランスフォーマーとして使用する必要があります。例えば、次のコードはそれだけです(パイプラインとクロスバリデーションを使用できますが、これは単なる例です)。

import numpy as np 
from sklearn.datasets import fetch_olivetti_faces 
from sklearn.decomposition import LatentDirichletAllocation 
from sklearn.linear_svm import LinearSVC 

# get the dataset 
faces = fetch_olivetti_faces() 
X = (faces.data*255).astype(int) 
y = faces.target 

# create a test set and a training set 
idx = np.arange(len(X)) 
np.random.shuffle(idx) 
train = idx[:2*len(X)/3] 
test = idx[2*len(X)/3:] 

# create the models 
lda = LatentDirichletAllocation(n_topics=10) 
svm = LinearSVC(C=10) 

# evaluate everything 
lda.fit(X[train]) 
T = lda.transform(X) 
print svm.fit(T[train], y[train]).score(T[test], y[test]) 

LDAは特にwell suited for classificationではありませんので、かなりの数のバリエーションが開発されています。私たちは、今年ACM Multimediaで発表した分類のために、そのような監視されたバリエーションの1つを作成しました。あなたは私たちの論文Fast Supervised LDAを読んで、http://ldapluplus.com/からコードと文書を入手することができます。最後にexample of using Olivetti Faces with LDA++が表示されます。

関連する問題