我正在学习机器学习,最近我使用线性判别分析研究了线性可分离数据的分类。为此,我使用了scikit-learn包和函数
.discriminant_analysis.LinearDiscriminantAnalysis
来自MNIST手写数字数据库的数据。我已经使用数据库来拟合模型,并通过以下方式对测试数据进行预测:
LDA(n_components=2)
LDA_fit(data,labels)
LDA_predict(testdata)
哪个工作正常。我得到了95%的准确率。但是,预测函数使用所有784个维度的数据(对应于28x28像素的图像)。我不明白为什么所有尺寸都用于预测?
尽管线性判别分析的目的是在低维空间上找到一个投影,该投影可以最大程度地允许类分离,从而使数据在理想情况下是线性可分离的,并且分类很容易。如果将全部784个维都用于预测,那么LDA的意义何在并确定投影矩阵?
答案 0 :(得分:1)
摘自文档:
discriminant_analysis.LinearDiscriminantAnalysis
可用于通过将输入数据投影到一个线性子空间来执行有监督的降维,该线性子空间由使类之间的距离最大化的方向组成(在下面的数学部分中精确地讨论)。输出的维数必须小于类数,因此,通常这是一个相当强的维数缩减,并且仅在多类设置中才有意义。
这在discriminant_analysis.LinearDiscriminantAnalysis.transform
中实现。可以使用n_components
构造函数参数来设置所需的尺寸。该参数对discriminant_analysis.LinearDiscriminantAnalysis.fit
或discriminant_analysis.LinearDiscriminantAnalysis.predict
没有影响。
含义n_components
仅用于transform
或fit_transform
。您可以使用降维来消除数据中的噪声或进行可视化。
答案 1 :(得分:0)
就分类而言,您提到的低维度实际上是n_classes
。
如果将此用于尺寸缩减技术,则可以选择n_components
尺寸(如果已指定)(必须为<n_classes
)。如文档中所述,这对预测没有影响。
因此,一旦提供输入数据,它将把数据转换成n_classes
维空间,然后使用该空间进行训练/预测。 Reference-_decision_function()
用于预测。
您可以使用Transform(X)来查看模型学习到的新的低维空间。
答案 2 :(得分:-1)
在维数较小的数据上应用LDA:
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()