Machine learning 为什么在knn分类器中使用置换?

Machine learning 为什么在knn分类器中使用置换?,machine-learning,scipy,classification,Machine Learning,Scipy,Classification,我是ML新手,我不明白为什么KNN使用随机排列。我指的是k-最近邻分类器部分。提供了以下代码: >>> 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])

我是ML新手,我不明白为什么KNN使用随机排列。我指的是k-最近邻分类器部分。提供了以下代码:

>>> 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...
有人问了这个问题:
奖金问题:我们为什么使用随机排列?


有人能解释一下为什么排列会影响结果吗?

Iris是默认排序的,前50个实例来自类1,下一个类2,最后一个类3。因此,他们只会在1类和2类上进行训练,并尝试预测3类的标签,如果它们没有排列的话。一般来说,从排列数据开始是一个很好的做法,因为由于数据集创建者所采取的方法,这些数据总是可能涉及某种结构。

Iris默认排序,前50个实例来自类1,下一个类2,最后一个类3。因此,他们只会在1类和2类上进行训练,并尝试预测3类的标签,如果它们没有排列的话。一般来说,从排列数据开始是一个很好的做法,因为由于数据集创建者所采取的方法,它们可能总是涉及某种结构。

很可能数据集有您不知道的排序或分组。通常在培训、测试和验证中分离模型。乍一看,knn中没有明确要求,因为该算法在纯在线。让我们看看它是如何工作的

A1。给出了一个数据集

A2。给出了一个候选点

A3。候选点用k个最近邻类的多数投票进行分类

然而,当数据集包含所有必需的知识,即它是基本事实时,情况就是这样


如果数据集不是这样,我们在训练和验证中进行随机和分离,那么我们根据训练进行分类,并对照验证进行检查,以查看训练是否成功。这是一个随机化和测试的迭代过程,直到我们得到一个在验证集上进行良好评估的序列集。此过程完成后,将使用测试集评估过程的泛化能力。

很可能您的数据集具有您不知道的排序或分组。通常在培训、测试和验证中分离模型。乍一看,knn中没有明确要求,因为该算法在纯在线。让我们看看它是如何工作的

A1。给出了一个数据集

A2。给出了一个候选点

A3。候选点用k个最近邻类的多数投票进行分类

然而,当数据集包含所有必需的知识,即它是基本事实时,情况就是这样


如果数据集不是这样,我们在训练和验证中进行随机和分离,那么我们根据训练进行分类,并对照验证进行检查,以查看训练是否成功。这是一个随机化和测试的迭代过程,直到我们得到一个在验证集上进行良好评估的序列集。此过程完成后,测试集将用于评估过程的泛化能力。

请注意-您会混淆“验证”和“测试”的名称,测试集用于检查最终的泛化能力,而不是验证。此外,OP问题(以及相关链接)与估计训练集空间上的期望值无关-您所指的是,OP实际问题在您回答的第一句话中完全(正确)解决了。请注意-您混淆了“验证”和“测试”的名称,测试集用于检查最终的泛化能力,而不是验证。此外,OP问题(以及相关链接)与估计训练集空间上的期望值无关——您所指的是,OP实际问题在您答案的第一句话中完全(正确)得到了解决。