### K-Means (AgglomerativeClustering 为层次聚类使用,相应两行被替换) 向量距离聚类 #coding=utf-8 import numpy as np import matplotlib.pyplot as plt #from sklearn.cluster import KMeans from sklearn.cluster import AgglomerativeClustering #读取城市经纬度数据 X = [] f = open('files\\city.csv') for v in f: X.append([float(v.split(',')[2]),float(v.split(',')[3])]) #转换成numpy array X = np.array(X) #类簇的数量 - kmeans算法的参数 n_clusters = 5 #进行聚类 cls = KMeans(n_clusters).fit(X) #cls = AgglomerativeClustering(linkage='ward',n_clusters=n_clusters).fit(X) #聚类结果列表 cls.labels_ #画图 markers = ['^','x','o','*','+'] for i in range(n_clusters): members = cls.labels_ == i plt.scatter(X[members,0],X[members,1], s=60, marker=markers[i],c='b',alpha=0.5) #print(members) #print(X[members,1]) plt.title('') plt.show() ### DBScan算法 密度聚类 #coding = utf-8 import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN X = [ [9670250,1392358258], #中国 [2980000,1247923065], #印度 [9629091,317408015], #美国 [8514877,201032714], #巴西 [377873,127270000], #日本 [7692024,23540517], #澳大利亚 [9984670,34591000], #加拿大 [17075400,143551289], #俄罗斯 [513115,67041000], #泰国 [181035,14805358], #柬埔寨 [99600,50400000], #韩国 [120538,24052231] #朝鲜 ] #转换成numpy array X = np.array(X) #做归一化 # 以下两行参考http://blog.csdn.net/csj664103736/article/details/72828584 a = X[:,:1] / 17075400.0 * 10000 b = X[:,1:] / 1392358258.0 * 10000 X = np.concatenate((a,b),axis=1) # 以上concatenate的用法参考http://blog.csdn.net/zyl1042635242/article/details/43162031 #进行数据训练(两参数:扫描半径,最小包含点数) cls = DBSCAN(eps=2000,min_samples=1).fit(X) #类簇的数量 n_clusters = len(set(cls.labels_)) #X中每项所属分类的一个列表 cls.labels_ #画图 markers = ['^','x','o','*','+'] for i in range(n_clusters): my_members = cls.labels_==i plt.scatter(X[my_members,0],X[my_members,1],s=60,marker=markers[i],c='b',alpha=0.5) plt.title('dbscan') plt.show()
机器学习K-Means及DBSCAN聚类算法的python代码
猜你喜欢
转载自blog.csdn.net/ebzxw/article/details/80304718
今日推荐
周排行