KNN工作原理
“近朱者赤,近墨者黑”可以说是KNN的工作原理。整个计算过程分为三步:1:计算待分类物体与其他物体之间的距离;2:统计距离最近的K个邻居;3:对于K个最近的邻居,它们属于哪个分类最多,待分类物体就属于哪一类。K-最近邻算法(K-Nearest Neighbor, KNN)中的K值是一个重要的超参数,不同的K值会影响模型的性能。常见的选择K值的方法包括以下几种
- 网格搜索(Grid Search):指定一组候选的K值,对每个K值进行交叉验证,选取平均交叉验证误差最小的K值作为最佳K值。缺点是需要进行大量的计算,时间开销较大。
- K折交叉验证(K-fold Cross Validation):将训练集分成K个子集,每次使用其中K-1个子集作为训练集,剩下的1个子集作为验证集,重复K次。对于每个K值,计算K次的平均交叉验证误差,选取平均交叉验证误差最小的K值作为最佳K值。这种方法的优点是可以减少模型的方差,但是计算时间仍然比较长。
- 自助法(Bootstrap):从训练集中有放回地随机抽取样本,构建新的训练集。对于每个K值,计算自助样本的平均误差,选取平均误差最小的K值作为最佳K值。这种方法的优点是计算速度快,但是对于小数据集来说,可能会出现较大的方差。
网格搜索(Grid Search)
接下来先看看如何通过网格搜索(Grid Search)获取K值。GridSearchCV
是Scikit-Learn库中用于网格搜索的函数,其主要作用是在指定的超参数范围内进行穷举搜索,并使用交叉验证来评估每种超参数组合的性能,以找到最优的超参数组合。该函数包含多个参数,具体参数以及每个参数含义如下所示:
estimator:通常是一个Scikit-Learn模型对象,例如KNeighborsClassifier()、RandomForestClassifier()等,用于表示要使用的模型。
param_grid:需要遍历的超参数空间,是一个字典,其中每个键是一个超参数名称,对应的值是超参数的取值列表。例如,对于KNN模型,可以指定param_grid = {'n_nei