繁体   English   中英

在 Python 中使用 scikit 学习进行线性判别分析

[英]Linear Discriminant Analysis with scikit learn in Python

我正在学习机器学习,最近我研究了使用线性判别分析对线性可分离数据进行分类。 为此,我使用了 scikit-learn 包和函数

.discriminant_analysis.LinearDiscriminantAnalysis

来自手写数字 MNIST 数据库的数据。 我已经使用数据库来拟合模型并通过这样做对测试数据进行预测:

LDA(n_components=2)
LDA_fit(data,labels)
LDA_predict(testdata)

哪个工作得很好。 我得到了 95% 的准确率。 然而,预测函数使用来自所有 784 个维度的数据(对应于 28x28 像素的图像)。 我不明白为什么所有维度都用于预测?

我虽然线性判别分析的目的是找到低维空间上的投影,允许最大化类分离允许,这样理想情况下数据是线性可分的并且分类很容易。

如果所有 784 个维度都用于预测,LDA 和确定投影矩阵有什么意义?

从文档:

discriminant_analysis.LinearDiscriminantAnalysis可用于执行监督降维,方法是将输入数据投影到线性子空间,该子空间由最大化类之间分离的方向组成(在下面的数学部分中讨论的精确意义上)。 输出的维数必然小于类的数量,所以一般来说,这是一个相当强的降维,并且只在多类设置中才有意义。

这是在discriminant_analysis.LinearDiscriminantAnalysis.transform中实现的。 可以使用n_components构造函数参数设置所需的维度。 此参数对discriminant_analysis.LinearDiscriminantAnalysis.fitdiscriminant_analysis.LinearDiscriminantAnalysis.predict没有影响

意思是n_components仅用于transformfit_transform 您可以使用降维来消除数据中的噪音或进行可视化。

你提到的低维实际上是分类方面的n_classes

如果您将此用于降维技术,则可以选择n_components维度,如果您已指定它(它必须是 < n_classes )。 这对文档中提到的预测没有影响。

因此,一旦你给出输入数据,它就会将数据转换到n_classes维空间,然后使用这个空间进行训练/预测。 参考- _decision_function()用于预测。

您可以使用 Transform(X) 查看模型学习的新低维空间。

将 LDA 应用于降维的 mnist 数据:

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
X_r2 = lda.fit(data_1000, labels_1000).transform(data_1000)

# LDA before tsne
plt.figure()
colors = ['brown','black','deepskyblue','red','yellow','darkslategrey','navy','darkorange','deeppink', 'lawngreen']
target_names  = ['0','1','2','3','4','5','6','7','8','9']
lw = 2
y = labels_1000

plt.figure()
for color, i, target_name in zip(colors, [0, 1, 2,3,4,5,6,7,8,9], target_names):
plt.scatter(X_r2[y == i, 0], X_r2[y == i, 1], alpha=.8, color=color,
            label=target_name)
plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.title('LDA of MNIST dataset before TSNE')

plt.show()

暂无
暂无

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

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