QDA与LDA在AT&T数据集上进行人脸识别

时间:2018-08-08 17:14:45

标签: python numpy scipy scikit-learn

使用lda和qda拟合模型时,我为AT&T人脸数据库获得了两个非常不同的准确性。

基本上,对于另一个项目(人脸识别),我在自己的数据集上使用lda(我从头开始实现了lda),并且在此之后,我使用了KNN分类器来表示欧几里得距离度量。但是我的老师对这种简单的KNN分类器不满意,他希望我考虑“面部空间”(使用lda降低维数后的特征空间)中不同类别的数据的分布。所以他要我实现模糊逻辑(我最近发现了scikit-fuzzy(skfuzzy))。我也在考虑实现最近的质心分类器(NCC),但是我不知道这是一个好主意。我还在看我可以使用的距离度量标准(曼哈顿,欧几里得,马哈拉诺比斯...)。

我最近开始研究scikit-learn,我发现qda的决策边界对我的项目可能很有趣,所以我也在对此进行研究。

您可能已经注意到,我不确定应该寻找什么方向来提高项目分类的准确性和可伸缩性。

代码段

dataset = fetch_olivetti_faces(shuffle=True, random_state=None)
X = dataset.data
y = dataset.target

-

qda = QuadraticDiscriminantAnalysis(store_covariances=False)
qda.fit(X,y)
scores_qda = cross_val_score(qda, X, y, cv=5)
print "scores qda: \n"
print(scores_qda)
print("\nAccuracy: %0.2f (+/- %0.2f)" % (scores_qda.mean(), scores_qda.std() * 2))

输出:0.08(+/- 0.06)

lda = LinearDiscriminantAnalysis(priors=None, shrinkage=None,
              solver='svd', store_covariance=False, tol=0.0001)
lda.fit(X,y)
scores_lda = cross_val_score(lda,X,y, cv=5)
print("scores lda:\n")
print (scores_lda)
print("\nAccuracy: %0.2f (+/- %0.2f)" % (scores_lda.mean(), scores_lda.std() * 2))

输出:0.98(+/- 0.04)

我想要答案或更好理解的东西;

  1. 为什么qda在此数据集上的表现如此差?
  2. 在scikit-learn中,lda和qda的预测功能如何工作? (具有高斯证明或具有距离度量?[欧几里得?])
  3. 我应该在项目中使用qda吗?
  4. 我该如何实施模糊逻辑?
  5. 实施NCC会很有趣吗?

编辑11/08; 在阅读了scikit-learns的LDA之后,我了解到它是根据Baye规则进行预测的,基本上是根据高斯分布对每个类​​进行建模,并且当有新样本,您查看它属于每个类别的概率,然后选择最高的概率?

1 个答案:

答案 0 :(得分:0)

问题已被重新制定,我最终在Cross Validated

回答了自己