KNN python
2019-06-12 14:55
1121 查看
整体思路:
1、随机选择k个聚合点 A B
2、计算各点到聚合点的距离,选择最近的聚合点为一组, 如AC > BC 则 BC一组
3、根据没一组数据,计算平均值,作为该组的新的聚合点
4、重复2,3直到所有的聚合点不再发生变化。
缺点:
聚合结果与初始的聚合点相关,具体看图1,根据y=x直线进行的分类聚合,但是也可以像图2一样分类聚合成为两个圆;
# -*- encoding: utf-8 -*- from matplotlib import pyplot as plt import numpy as np def cal_distance(dot1: list or tuple, dot2: list or tuple): distance = 0 for i in range(len(dot1)): distance += (dot1[i] - dot2[i]) ** 2 return distance ** 0.5 def cal_center(res: list): x, y = 0, 0 for i in res: x += i[0] y += i[1] return [x/len(res), y/len(res)] def circle(x, y, r, color='r', count=100): cicle_x=[] cicle_y=[] for i in range(count): j = float(i)/count * 2 * np.pi cicle_x.append(x+r*np.cos(j)) cicle_y.append(y+r*np.sin(j)) plt.plot(cicle_x, cicle_y, c=color) def main(dots: list, k: int, kind: 1) -> list: if kind == 1: centers_new = dots[0: k] else: n = len(dots) centers_new = dots[(n-k)//2: (n+k)//2] centers = [[0, 0] for i in range(k)] while centers_new != centers: centers = centers_new res = [[] for i in range(k)] for dot in dots: distances = [cal_distance(dot, center) for center in centers] center_id = distances.index(min(distances)) res[center_id].append(dot) centers_new = [cal_center(i) for i in res] print(centers_new) x = [dot[0] for dot in dots] y = [dot[1] for dot in dots] plt.plot(x, y, "ob") r = [max([cal_distance(res[i][j], centers_new[i]) for j in range(len(res[i]))])for i in range(len(centers_new))] for i in range(k): circle(centers_new[i][0], centers_new[i][1], r[i]) plt.show() return centers_new if __name__ == "__main__": s = [[0, 1], [1, 0], [0, -1], [-1, 0], [5, 4], [5, 6], [4, 5], [6, 5]] res = main(s, 2, 1) print(res) s = [[0, 1], [1, 0], [0, -1], [-1, 0], [5, 4], [5, 6], [4, 5], [6, 5]] res = main(s, 2, 2) print(res)
相关文章推荐
- 在python中利用KNN实现对iris进行分类的方法
- 机器学习python之KNN
- 机器学习算法与Python实践之(一)k近邻(KNN)
- 机器学习算法之KNN算法,python实现
- Python实现knn算法手写数字识别
- 真香警告!用 Python 实现 KNN 算法也太简单了吧!
- 机器学习之KNN算法python实现
- 机器学习 Python kNN算法
- KNN算法Python实现(代码来自机器学习实战)及注释
- KNN分类算法及python代码实现
- K-近邻算法(kNN)python实现
- 使用python实现knn
- 22行代码(python)快速实现KNN及可视化(附数据下载链接)
- KNN、k-近邻算法,python
- 机器学习算法与Python实践之 k近邻(KNN)
- Python实现kNN(k邻近算法)
- python之实战----KNN之手写数字位图
- python3与机器学习实践---1、最简单的K-邻近算法(k-Nearest Neighbor,KNN)
- 机器学习01-KNN算法的python实现及手写体数字的识别
- 机器学习实战笔记(Python实现)-02-k近邻算法(kNN)