1

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

.discriminant_analysis.LinearDiscriminantAnalysis

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

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

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

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

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

4

3 回答 3

1

从文档:

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

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

含义n_components仅用于transformor fit_transform。您可以使用降维来消除数据中的噪音或进行可视化。

于 2018-12-21T12:32:39.960 回答
0

你说的低维度其实n_classes是分类方面的。

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

因此,一旦您提供输入数据,它会将数据转换为n_classes维度空间,然后使用该空间进行训练/预测。参考-_decision_function()用于预测。

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

于 2018-12-21T12:23:18.513 回答
-1

将 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()
于 2020-05-28T11:37:31.243 回答