我是ML的新手,我不明白为什么随机排列被用于KNN。我指的是k-Nearest neighbors classifier部分中的http://www.scipy-lectures.org/advanced/scikit-learn/。提供了以下代码:
>>> perm = np.random.permutation(iris.target.size)
>>> iris.data = iris.data[perm]
>>> iris.target = iris.target[perm]
>>> knn.fit(iris.data[:100], iris.target[:100])
KNeighborsClassifier(...)
>>> knn.score(iris.data[100:], iris.target[100:])
0.95999...
这个问题被问到:Bonus question: why did we use a random permutation?
有人可以帮助解释为什么排列会影响结果吗?
答案 0 :(得分:3)
默认情况下,Iris排序,前50个实例组成1级,下组2,最后3级。因此,他们只会在1级和2级训练并尝试预测3级标签,如果他们不进行排列。一般来说,从置换数据开始是一个好习惯,因为数据集创建者采用的方法可能总是涉及某种结构。
答案 1 :(得分:1)
您的数据集很可能包含您不知道的排序或分组。通常,您在训练,测试和验证中将模型分开。乍一看knn没有明确要求,因为算法纯粹是在线的。让我们看看它是如何工作的,
A1。给出了一个数据集。
A2。给出候选点
A3。候选点通过k个最近邻居类别的多数表决进行分类。
然而,当数据集包含所有必需的知识时就是这种情况,即这是基本事实。
如果数据集不是我们在训练和验证中随机化和分离的情况,那么我们将对列车进行分类并检查验证以确定培训是否成功。这是一个随机化和测试的迭代过程,直到我们得到一个很好地评估验证集的训练集。完成此过程后,将使用测试集来评估过程的泛化能力。