KNN算法
KNN即K-邻近算法。主要是用于分类。
它的原理比较简单,就是说首先拿出已经分好类的样本集,并且样本集的每个数据都存在标签,然后将没有标签的数据的每个特征与样本集进行对比,选择样本数据集中前 K个最相似的数据。
简单来说就是比如说一个二维坐标,x轴代表大小,y轴代表颜色,然后我们把样本集里的水果按特征放在这个坐标里,,然后一个个计算这个未知水果距离每个已知水果的距离,当它和K个最近距离中哪个水果多,那么就判断这个水果是什么水果。针对不同的任务也有所不同,像上面这种就类似投票法,对于回归任务用平均值法。
算法流程:
计算出已知数据集中的点与未知点的距离、按照距离递增排序、选出距离最小的k个点、确定前k个点所在类别的频率、频率最高的类别就是当前点的预测分类。如果有需要要做数据归一化,因为可能每个特征值取值范围不同。
距离一般使用欧氏距离或曼哈顿距离:
在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法来选择最优的K值。经验规则:k一般低于训练样本数的平方根。
缺点:
算法复杂度比较高,需要比较所有已知实例和要分类的实例。样本分布不均匀,如果其中一个样本过大就会成为主导,很容易被误判成该类别。
改进:
根据距离加上权重等
应用场景:
文本分类、用户推荐、回归问题(例如出租房,找和我的房子长得最相似的k个房子的价格,然后预测我的房子价格,均方根误差作为误差评估指标)、字符识别等