一、KNN参数n_neighbors
KNN算法在中通过下面这个类来实现:
class sklearn.neighbors.KNeighborsClassifier
(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30, p=2, metric=’minkowski’, metric_params=None, n_jobs=None, **kwargs)
其中参数n_neighbors就是超参数k:最近的k个点。
二、参数k回顾
KNN中的k是一个超参数,所谓 "超参数",就是需要人为输入,算法不能通过直接计算得出的参数。
KNN中的k代表的是距离需要分类的测试点 最近的 k 个样本点,如果不输入这个值,那么算法中重要部分 "选出 个最近邻" 就无法实现。从 KNN的原理中可见,是否能够确认合适的k 值对算法有极大的影响。
三、KNN中超参数 的选定问题
(1) 值较小,就相当于较小的邻域中的训练实例进行预测,这时候只有与输入实例较近的(相似的)训练实例才会对预测结果起作用,但缺点是预测结果会对近邻的实例点非常敏感。如果邻近的实例点恰好是噪声,预测就会出错。
(2) 值较大,就相当于较大的邻域中的训练实例进行预测。这时与输入实例较远的
(不相似的)训练实例也会对预测起作用,使预测发生错误。因此,超参数 k 的选定是 KNN 的头号问题。
(3)在应用中,值一般取一个比较小的值,通常采用交叉验证法来来选取最优的值。对于二分类问题,可以把k设置成一个奇数,避免出现平局的情况。