繁体   English   中英

如何在scikit-learn中使用LDA(线性判别式)执行预测?

[英]How to perform prediction with LDA (linear discriminant) in scikit-learn?

我一直在测试PCA和LDA在分类要自动识别的3种不同类型的图像标签方面表现如何。 在我的代码中,X是我的数据矩阵,其中每一行是图像中的像素,而y是一维数组,说明每一行的分类。

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个明显可区分的集群,它们之间只有很小的重叠。 现在,如果我有一个要分类的新图像,将其转换为一维数组后,如何预测应该落入哪个簇,如果它离中心的距离太远,我怎么能说分类是“不确定的” “? 我也很好奇,一旦适应了“ .transform(X)”函数对我的数据的处理。

用一些数据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

请注意,“拟合”用于拟合模型,而不是拟合数据

因此,使用transform来构建表示(在这种情况下为投影),并使用predict预测每个样本的标签。 (这用于从BaseEstimator中的BaseEstimator继承的所有类。

您可以阅读文档了解更多选项和属性。

此外,sklearn的API允许您执行pca.fit_transform(X)而不是pca.fit(X).transform(X) 在此之后,如果您对模型本身不感兴趣,请使用此版本。

几点评论:由于PCA是一种无监督的方法 ,因此LDA是用于执行当前正在执行的“可视”分类的更好方法。

此外,如果您对分类感兴趣,则可以考虑使用不同类型的分类器,不一定要使用LDA,尽管这是一种很好的可视化方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM