PCA 和 KNN 算法

Posted

技术标签:

【中文标题】PCA 和 KNN 算法【英文标题】:PCA and KNN algorithm 【发布时间】:2012-04-28 07:23:15 【问题描述】:

我正在使用 KNN 对手写数字进行分类。我现在也实施了 PCA 来降低维度。从 256 到 200。但我只注意到大约 0.10% 的信息丢失。我删除了 56 维。损失不应该更大吗?只有当我下降到 5 个维度时,我才会损失约 20%。这正常吗?

【问题讨论】:

这种事情在许多类型的应用程序中都很常见。这被称为收益递减点。 【参考方案1】:

您是说在删除 56 个维度后,您几乎没有丢失任何信息?当然,这就是 PCA 的重点! Principal Component Analysis,顾名思义,帮助您确定哪些维度承载信息。您可以删除其余部分,这是其中最大的一部分。

我想要一些例子,在基因分析中,我已经阅读了使用 PCA 将维度从 40'000 减少到 100 的论文,然后他们做了一些神奇的事情,并拥有一个具有 19 个维度的出色分类器。这隐含地告诉您,当他们删除 39,900 个维度时,他们几乎没有丢失任何信息!

【讨论】:

在使用 KNN 时,我们需要计算两点之间的距离。如果我们的维度超过 3-d,我们唯一的选择是使用 PCA 到 2-d 并计算欧几里德或曼哈顿距离?【参考方案2】:

这很正常,是的(就像 Fezvez 所说的你所做的事情的重点)。你的案例实际上是一个很好的例子,你可以看到这是怎么可能的。

查看您的数据(这在机器学习中始终很重要,了解您的数据)。如果您在白色上有黑色手写数字的图像,则很可能所有样本的某些角落的像素都是白色的(当我对手写数字进行机器学习时,我在一个角落有这种情况)。因此,该像素中实际上没有任何信息。如果你把它作为你的 KNN 或 ANN 或其他任何东西的输入,你将得到相同的结果。

【讨论】:

以上是关于PCA 和 KNN 算法的主要内容,如果未能解决你的问题,请参考以下文章

Python实验--手写KNN+PCA实现药品聚类和手写字识别

Kiggle:Digit Recognizer

2. KNN和KdTree算法实现

深入浅出KNN算法 介绍篇

01 KNN算法 - 概述

Knn算法原理