机器学习K-Means及DBSCAN聚类算法的python代码

### 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()


猜你喜欢

转载自blog.csdn.net/ebzxw/article/details/80304718
今日推荐