![](/img/trans.png)
[英]SVD calculation error from lapack function when using scikit-learn's Linear Discriminant Analysis class
[英]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.fit
或discriminant_analysis.LinearDiscriminantAnalysis.predict
没有影响。
意思是n_components
仅用于transform
或fit_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.