在 Python 的 sklearn 工具包中有 KNN 算法。KNN 既可以做分类器,也可以做回归。
如果是做分类,你需要引用:
from sklearn.neighbors import KNeighborsClassifier
如果是做回归,你需要引用:
from sklearn.neighbors import KNeighborsRegressor
如何在 sklearn 中创建 KNN 分类器:
我们使用构造函数 KNeighborsClassifier(n_neighbors=5, weights=‘uniform’,algorithm=‘auto’, leaf_size=30),这里有几个比较主要的参数:
n_neighbors | 即 KNN 中的 K 值,代表的是邻居的数量。 k小过拟合,k大欠拟合;一般默认使用5 |
|
weights | weights=uniform
|
代表所有邻居的权重相同 |
weights=distance
|
代表权重是距离的倒数,即与距离成反比 | |
自定义函数 | 你可以自定义不同距离所对应的权重。 | |
algorithm
|
algorithm=auto
|
根据数据的情况自动选择适合的算法,默认情况选择 auto |
algorithm=kd_tree
|
也叫作 KD 树,是多维空间的数据结构,方便对关键数据进行检索;不过 KD 树适用于维度少的情况,一般维数不超过 20,如果维数大于 20 之后,效率反而会下降; | |
algorithm=ball_tree
|
也叫作球树,它和 KD 树一样都是多维空间的数据结果,不同于 KD 树,球树更适用于维度大的情况; | |
algorithm=brute
|
也叫作暴力搜索,它和 KD 树不同的地方是在于采用的是线性扫描 |