使用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)
我想要答案或更好理解的东西;
编辑11/08; 在阅读了scikit-learns的LDA之后,我了解到它是根据Baye规则进行预测的,基本上是根据高斯分布对每个类进行建模,并且当有新样本,您查看它属于每个类别的概率,然后选择最高的概率?