国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現k-means算法

2020-02-22 23:16:49
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Python實現k-means算法的具體代碼,供大家參考,具體內容如下

這也是周志華《機器學習》的習題9.4。

數據集是西瓜數據集4.0,如下

編號,密度,含糖率
1,0.697,0.46
2,0.774,0.376
3,0.634,0.264
4,0.608,0.318
5,0.556,0.215
6,0.403,0.237
7,0.481,0.149
8,0.437,0.211
9,0.666,0.091
10,0.243,0.267
11,0.245,0.057
12,0.343,0.099
13,0.639,0.161
14,0.657,0.198
15,0.36,0.37
16,0.593,0.042
17,0.719,0.103
18,0.359,0.188
19,0.339,0.241
20,0.282,0.257
21,0.784,0.232
22,0.714,0.346
23,0.483,0.312
24,0.478,0.437
25,0.525,0.369
26,0.751,0.489
27,0.532,0.472
28,0.473,0.376
29,0.725,0.445
30,0.446,0.459

算法很簡單,就不解釋了,代碼也不復雜,直接放上來:

# -*- coding: utf-8 -*- """Excercise 9.4"""import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport sysimport randomdata = pd.read_csv(filepath_or_buffer = '../dataset/watermelon4.0.csv', sep = ',')[["密度","含糖率"]].values########################################## K-means ####################################### k = int(sys.argv[1])#Randomly choose k samples from data as mean vectorsmean_vectors = random.sample(data,k)def dist(p1,p2):  return np.sqrt(sum((p1-p2)*(p1-p2)))while True:  print mean_vectors  clusters = map ((lambda x:[x]), mean_vectors)   for sample in data:    distances = map((lambda m: dist(sample,m)), mean_vectors)     min_index = distances.index(min(distances))    clusters[min_index].append(sample)  new_mean_vectors = []  for c,v in zip(clusters,mean_vectors):    new_mean_vector = sum(c)/len(c)    #If the difference betweenthe new mean vector and the old mean vector is less than 0.0001    #then do not updata the mean vector    if all(np.divide((new_mean_vector-v),v) < np.array([0.0001,0.0001]) ):      new_mean_vectors.append(v)      else:      new_mean_vectors.append(new_mean_vector)    if np.array_equal(mean_vectors,new_mean_vectors):    break  else:    mean_vectors = new_mean_vectors #Show the clustering resulttotal_colors = ['r','y','g','b','c','m','k']colors = random.sample(total_colors,k)for cluster,color in zip(clusters,colors):  density = map(lambda arr:arr[0],cluster)  sugar_content = map(lambda arr:arr[1],cluster)  plt.scatter(density,sugar_content,c = color)plt.show()

運行方式:在命令行輸入 python k_means.py 4。其中4就是k。
下面是k分別等于3,4,5的運行結果,因為一開始的均值向量是隨機的,所以每次運行結果會有不同。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汪清县| 四会市| 高雄市| 元阳县| 静乐县| 临安市| 财经| 镇平县| 静乐县| 浦江县| 贵南县| 罗田县| 黔东| 梅州市| 和硕县| 曲松县| 黑河市| 开鲁县| 海门市| 西华县| 望谟县| 潜山县| 仲巴县| 恩施市| 博野县| 土默特右旗| 四子王旗| 宜兰县| 清远市| 松潘县| 施秉县| 吉林省| 峨边| 界首市| 张家口市| 淮阳县| 黔西县| 开远市| 洪江市| 襄汾县| 象州县|