from sklearn import datasets
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import random
data = datasets.load_iris()[:,:2].tolist()
data
为了后续可视化方便,故此处选择生成二维数据集,毕竟画二维散点图不怎么需要动脑子;
生成核心对象
MIN_PTS =3
E =.1
O =[]for i inrange(len(data)):
num =0for j inrange(len(data)):if distance(i,j)<= E:
num +=1if num >= MIN_PTS:
O.append(data[i])
O
对数据集可视化展示
plt.figure(figsize=(3,3),dpi=200)
plt.style.use('seaborn-dark')for i inrange(len(data)):
plt.scatter(data[i][0],data[i][1],color='red')for j inrange(len(O)):
plt.scatter(data[j][0],data[j][1],color='blue')
OBJ = O.copy() #拷贝核心对象
unflag = data.copy()#拷贝数据集,后续做标记
MIN_PTS =3#对象阈值
E =.1#半径
k =0#聚类簇数
colors =['yellow','green','pink','black']
markers =['1','2','*','+']while OBJ:
obj = OBJ[random.randint(0,len(OBJ)-1)]
C =[obj]#聚类簇
Q =[obj]#核心对象遍历,队列
unflag.remove(obj)while Q:
q = Q[0]del Q[0]
num =0
ts =[]for i inrange(len(unflag)):if distance(q,unflag[i])< E:
num +=1
ts.append(unflag(i))if num >= MIN_PTS:for s in ts:if s in unflag:
Q.append(s)
C.append(s)
unflag.remove(s)for j in C:if j in OBJ:
OBJ.remove(j)
plt.scatter(j[0],j[1],color=colors[k%4],marker = markers[k%4])
k +=1