KNN
1、算法思想:K-近邻算法采用测量不同特征值之间的距离方法进行分类,K通常是不大于20的整数,k值过小(过拟合)导致对局部数据敏感,抗噪能力差;k值过大,会因为数据集中实例不均衡导致分类出错
2、算法描述:
1)计算测试数据与各个训练数据之间的距离;
2)按照距离的递增关系进行排序;
3)选取距离最小的K个点;
4)确定前K个点所在类别的出现频率;
5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。
3、算法优缺点:
优点:
1)原理简单,易于理解
2)精度高
3)对异常值不敏感
4)无数据输入假定
5)适合多分类问题
缺点:
1)计算复杂度高
2)空间复杂度高
3)针对那些分类不均匀的分类训练样本可能误差较大
4)可理解性差:无法知晓实例样本和典型实例样本具有什么特征,无法给出任何数据的基础结构信息
适用数据范围:数值型和标称型
4、数据处理要求:
1)若是数据特征中存在非数值的类型,先其量化为数值,再做归一化处理
5、KNN算法各参数
neighbors.KNeighborsClassifier(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30, p=2, metric=’minkowski’, metric_params=None, n-jobs=1)
1、n_neighbors —— kNN 里的 k,就是在做分类时,我们选取问题点最近的多少个最近邻
2、weights ——在进行分类判断时给最近邻附上的加权
1)默认的 'uniform' 是等权加权
2) 'distance' 选项是按照距离的倒数进行加权,也可以使用用户自己设置的其他加权方法。
3)algorithm ——分类时采取的算法,有 'brute'、'kd_tree' 和 'ball_tree'。默认的 'auto' 选项会在学习时自动选择最合适的算法,所以一般来讲选择 auto 就可以。
4)leaf_size ——kd_tree 或 ball_tree 生成的树的树叶(树叶就是二叉树中没有分枝的节点)的大小。对于很多使用场景来说,叶子的大小并不是很重要,设 leaf_size=1 就好。
5)metric 和 p,是我们在 kNN 入门文章中介绍过的距离函数的选项,如果 metric ='minkowski' 并且 p=p 的话,计算两点之间的距离就是
一般来讲,默认的 metric='minkowski'(默认)和 p=2(默认)就可以满足大部分需求。
6)metric_params 是一些特殊 metric 选项需要的特定参数,默认是 None。
7)n_jobs 是并行计算的线程数量,默认是 1,输入 -1 则设为 CPU 的内核数。