Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 用于分类的kNN中的理想k值_Machine Learning_Classification_Knn - Fatal编程技术网

Machine learning 用于分类的kNN中的理想k值

Machine learning 用于分类的kNN中的理想k值,machine-learning,classification,knn,Machine Learning,Classification,Knn,我在做分类(不是聚类)。我可以用kNN算法来做这个吗?要测试的理想k值是多少?在一些stackflow回答中,我看到他们建议使用特征数量的平方根。但这些规则从何而来?有人能帮我吗:)最好的K是在给定数据集及其如何推广到看不见的数据的情况下为您提供最佳性能的K K-NN的工作方式是基于样本之间的特征相似性在样本之间构建一个图。每个样本连接到K个最相似的样本。对于给定样本K个邻域的预测,选择在K个邻域中拥有多数投票权且在邻域中最常见的标签作为预测标签 K肯定应该低于(#samples-1),因为在这

我在做分类(不是聚类)。我可以用kNN算法来做这个吗?要测试的理想k值是多少?在一些stackflow回答中,我看到他们建议使用特征数量的平方根。但这些规则从何而来?有人能帮我吗:)

最好的K是在给定数据集及其如何推广到看不见的数据的情况下为您提供最佳性能的K

K-NN的工作方式是基于样本之间的特征相似性在样本之间构建一个图。每个样本连接到K个最相似的样本。对于给定样本K个邻域的预测,选择在K个邻域中拥有多数投票权且在邻域中最常见的标签作为预测标签

K肯定应该低于(#samples-1),因为在这种情况下,所有样本都是连接的,然后将为所有未标记样本预测具有最高训练样本的标签

如果k等于1,我们是说未标记样品(测试/未看到样品)的标签应等于与其最相似样品的标签

如果您非常确定自己的特性,并且知道最相似的训练样本足以用于预测,那么您应该选择一个非常低的K(比如1)

如果您对自己的功能不确定,并且希望有更多的样本投票支持,则应该选择高K

这就像你喜欢少数专家投某个票,或者所有人都投某个票

如何为你的问题选择合适的K? 您应该为开发集保留部分数据。循环不同的K值(例如从1到#samples-1),看看哪一个能给出最好的结果

然而,经验法则是,如果样本数量足够高(例如,特征数量的10倍),那么特征数量的平方根应该是一个很好的初始猜测,但您需要循环不同的K值,看看哪一个最适合您

要检查结果,您需要知道许多样本的标签,但假设您没有标签。您尝试通过循环不同的K值来预测这些样本的标签。您将预测的标签与已知的标签进行比较,并测量精度(或F度量),然后选择能够提供最佳性能的最佳K(例如,最高F度量)

请记住缩放要素值,使它们都在0和1之间(标准化)

并检查每个功能的性能,看看哪些功能在预测任务中起到了实际的帮助作用


我建议使用scikit learn的k近邻实现

一般来说,k被选择为sqrt(n),其中n是数据点的数量,而不是特征。 但是验证模型的唯一方法是通过测试数据上的错误


我通常做的是,从数据集中选择几个随机数据点,然后为它们找到k最近的邻居。从所选点计算不同类别的邻居数量。如果不同类别的邻居数量太多,则更改k的值

@NominSim我从你的答案中找到了“特征数的平方根:)因此请帮助我在你的答案中找到最佳k值,开始时是特征数的平方根或训练数据集中的点数:)我有93个1000个用户的功能。你能告诉我得到平方根的价值是什么吗?)PS:我用10倍交叉验证,我会说,尝试2 ^ 0, 2 ^ ^ 1, 2 ^ 2, 2 ^ 3, 2 ^ 4, 2 ^ 5和2 ^ 6,检查每一个性能,然后选择表现最好的一个。他们说用一个奇数代表K,这样每个街区都可以有多数票。如果你的图不是二元图(当你使用样本特征的余弦相似性时,边权重不是0和1),那么你不需要选择奇数个邻居。我使用的是10倍交叉验证。我有93个1000个用户的功能。根据我的场景n的值是多少?1000个用户意味着数据集中有1000行,ryt?那么n是1000。顺便说一句,这对k来说不是什么硬性规定。你应该试试我在回答中提到的,从值sqrt(n)开始,并相应地更改值。n不是=训练数据中的数据点数量吗?如果情况不是n=900(因为我使用10倍交叉验证)是的,我错过了交叉验证部分。谢谢:)顺便提一个问题。在我的问题中,我有两门课。我听说在2类问题中k值应该是奇数。因此,当取900的平方根时,它是30(这是一个偶数)。解决这个问题的办法是什么。我应该使用29还是31?:)