2016-10-28 1 views

ответ

0

Я полагаю, что по LDA вы подразумеваете выделение скрытого распределения Дирихле, если вы имеете в виду линейный дискриминантный анализ, вы можете просто использовать sklearn.discriminant_analysis.LinearDiscriminantAnalysis в качестве классификатора и сравнить точность или точность и отзыв или что-то еще ,

Вы должны использовать Латентное распределение Дирихле в качестве трансформатора перед подачей представления тем в SVM. Например, следующий код делает именно это (вы, конечно, можете использовать Pipelines и перекрестную проверку, но это всего лишь пример).

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 в этом году. Вы можете прочитать нашу статью Fast Supervised LDA и получить код и документацию от http://ldapluplus.com/. Наконец вы можете увидеть example of using Olivetti Faces with LDA++.

Смежные вопросы