KNN归一化的精度差异

Jib*_*hew 5 python machine-learning knn scikit-learn

我已经在KNN分类算法上训练了模型,并且获得了约97%的准确度。但是,后来我发现我错过了对数据进行归一化的工作,对数据进行了归一化并重新训练了模型,现在我的准确率仅为87%。可能是什么原因?我应该坚持使用未规范化的数据,还是应该切换到规范化版本。

use*_*572 7

要回答您的问题,您首先需要了解 KNN 的工作原理。这是一个简单的图表:

在此处输入图片说明

假设 ? 是您尝试将其分类为红色或蓝色的点。对于这种情况,假设您尚未标准化任何数据。如您所见,? 比蓝色机器人更接近红点。因此,该点将被假定为红色。我们还假设正确的标签是红色的,因此这是一个正确的匹配!

现在,讨论规范化。归一化是一种获取略有不同的数据但赋予其共同状态的方法(在您的情况下,可以将其视为使特征更相似)。假设在上面的例子中,你归一化了 ? 的特征,因此输出 y 值变小了。这会将问号置于其当前位置下方并被更多蓝点包围。因此,您的算法会将其标记为蓝色,这是不正确的。哎哟!

现在回答你的问题。对不起,但没有答案!有时标准化数据会消除重要的特征差异,从而导致准确性下降。其他时候,它有助于消除特征中导致错误分类的噪声。此外,仅仅因为您当前使用的数据集的准确性提高,并不意味着您将使用不同的数据集获得相同的结果。

长话短说,与其试图将归一化标记为好/坏,不如考虑您用于分类的特征输入,确定哪些特征对您的模型很重要,并确保这些特征的差异在您的分类模型中准确反映。祝你好运!


Geo*_*son 5

这是一个很好的问题,乍一看是出乎意料的,因为通常标准化会帮助 KNN 分类器做得更好。通常,良好的 KNN 性能通常需要对数据进行预处理,以使所有变量的缩放和居中都相似。否则 KNN 将经常被缩放因子不恰当地支配。

在这种情况下,看到了相反的效果:KNN 看起来随着缩放变得更糟。

但是,您可能看到的情况可能是过度拟合的。KNN 可能过拟合,也就是说它很好地记住了数据,但在新数据上根本不起作用。由于数据的某些特征,第一个模型可能记住了更多的数据,但这不是一件好事。您需要在与训练数据不同的一组数据上检查您的预测准确性,即所谓的验证集或测试集。

然后你就会知道KNN的准确率是否OK。

在机器学习的背景下研究学习曲线分析。请去了解偏差和方差。这是一个比这里可以详细描述的更深入的主题。关于这个主题的最好、最便宜和最快的教学资源是网络上的视频,由以下教师提供:

  • Andrew Ng,在在线课程机器学习中

  • Tibshirani 和 Hastie,在斯坦福在线课程统计学习中。