前面讲了线性回归和逻辑回归,这期咱们讲knn
----------------------------------------------------------寒江孤影 江湖故人 相逢何必曾相识---------------------------------------------
1:什么是knn
1.2官话:
任何样本点的特性和该的邻近点的特性类似,所以我们可以认为使用某个点的多个邻近的点的特性就可以表示当前点的特性
1.2通俗
knn也叫k最近邻,就是k个最近的邻居,每个样本都可以用它最接近的k个邻居来代表
例如,上图中,绿色圆要被决定赋予哪个类,是红色三角形还 是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类
如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
knn主要解决分类问题当然也可以解决回归问题
KNN分类算法:就是邻居点中类别最多的那个类别作为当前点的类别
KNN回归算法:使用所有邻近点的均值作为当前点的回归预测值
2:KD_tree
这里有主要有两种计算方式,brute就是上文讲的这种,这种方式适用在数据量小的情况下,在大量数据的时候就要做优化,使用kd_tree算法。
KD Tree是密度聚类(DBSCAN)算法中计算样本和核心对象之间距离来获取最近邻以及KNN算法中用于计算最近邻的快速、便捷构建方式。
举一个例子
二维样本: {(2,3), (5,4), (9,6), (4,7), (8,1), (7,2)}
当我们生成KD树以后,就可以去预测测试集里面的样本目标点了。对于一个目标点,我们首先在KD树里面找到包含目标点的叶子节点。以目标点为圆心,以目标点到叶子节点样本实例的距离为半径,得到一个超球体,最近邻的点一定在这个超球体内部然后返回叶子节点的父节点,检查另一个子节点包含的超矩形体是否和超球体相交,如果相交就到这个子节点寻找是否有更加近的近邻,有的话就更新最近邻。如果不相交那就简单了,我们直接返回父节点的父节点,在另一个子树继续搜索最近邻。当回溯到根节点时,算法结束,此时保存的最近邻节点就是最终的最近邻。
knn算法大致就这些,难点在KD Tree拓展上,之前两期有反馈代码提供的不太好,我会尽快修改,让代码更轻松易懂,让新手尽快入门,让老手有所提升,下期见