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

首頁(yè) > 編程 > Python > 正文

Python聚類算法之基本K均值實(shí)例詳解

2019-11-25 17:01:39
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Python聚類算法之基本K均值運(yùn)算技巧。分享給大家供大家參考,具體如下:

基本K均值 :選擇 K 個(gè)初始質(zhì)心,其中 K 是用戶指定的參數(shù),即所期望的簇的個(gè)數(shù)。每次循環(huán)中,每個(gè)點(diǎn)被指派到最近的質(zhì)心,指派到同一個(gè)質(zhì)心的點(diǎn)集構(gòu)成一個(gè)。然后,根據(jù)指派到簇的點(diǎn),更新每個(gè)簇的質(zhì)心。重復(fù)指派和更新操作,直到質(zhì)心不發(fā)生明顯的變化。

# scoding=utf-8import pylab as plpoints = [[int(eachpoint.split("#")[0]), int(eachpoint.split("#")[1])] for eachpoint in open("points","r")]# 指定三個(gè)初始質(zhì)心currentCenter1 = [20,190]; currentCenter2 = [120,90]; currentCenter3 = [170,140]pl.plot([currentCenter1[0]], [currentCenter1[1]],'ok')pl.plot([currentCenter2[0]], [currentCenter2[1]],'ok')pl.plot([currentCenter3[0]], [currentCenter3[1]],'ok')# 記錄每次迭代后每個(gè)簇的質(zhì)心的更新軌跡center1 = [currentCenter1]; center2 = [currentCenter2]; center3 = [currentCenter3]# 三個(gè)簇group1 = []; group2 = []; group3 = []for runtime in range(50):  group1 = []; group2 = []; group3 = []  for eachpoint in points:    # 計(jì)算每個(gè)點(diǎn)到三個(gè)質(zhì)心的距離    distance1 = pow(abs(eachpoint[0]-currentCenter1[0]),2) + pow(abs(eachpoint[1]-currentCenter1[1]),2)    distance2 = pow(abs(eachpoint[0]-currentCenter2[0]),2) + pow(abs(eachpoint[1]-currentCenter2[1]),2)    distance3 = pow(abs(eachpoint[0]-currentCenter3[0]),2) + pow(abs(eachpoint[1]-currentCenter3[1]),2)    # 將該點(diǎn)指派到離它最近的質(zhì)心所在的簇    mindis = min(distance1,distance2,distance3)    if(mindis == distance1):      group1.append(eachpoint)    elif(mindis == distance2):      group2.append(eachpoint)    else:      group3.append(eachpoint)  # 指派完所有的點(diǎn)后,更新每個(gè)簇的質(zhì)心  currentCenter1 = [sum([eachpoint[0] for eachpoint in group1])/len(group1),sum([eachpoint[1] for eachpoint in group1])/len(group1)]  currentCenter2 = [sum([eachpoint[0] for eachpoint in group2])/len(group2),sum([eachpoint[1] for eachpoint in group2])/len(group2)]  currentCenter3 = [sum([eachpoint[0] for eachpoint in group3])/len(group3),sum([eachpoint[1] for eachpoint in group3])/len(group3)]  # 記錄該次對(duì)質(zhì)心的更新  center1.append(currentCenter1)  center2.append(currentCenter2)  center3.append(currentCenter3)# 打印所有的點(diǎn),用顏色標(biāo)識(shí)該點(diǎn)所屬的簇pl.plot([eachpoint[0] for eachpoint in group1], [eachpoint[1] for eachpoint in group1], 'or')pl.plot([eachpoint[0] for eachpoint in group2], [eachpoint[1] for eachpoint in group2], 'oy')pl.plot([eachpoint[0] for eachpoint in group3], [eachpoint[1] for eachpoint in group3], 'og')# 打印每個(gè)簇的質(zhì)心的更新軌跡for center in [center1,center2,center3]:  pl.plot([eachcenter[0] for eachcenter in center], [eachcenter[1] for eachcenter in center],'k')pl.show()

運(yùn)行效果截圖如下:

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵寿县| 宁津县| 左权县| 黑河市| 皋兰县| 鸡西市| 福贡县| 凤冈县| 新闻| 康定县| 信阳市| 隆安县| 崇阳县| 慈溪市| 商洛市| 嘉禾县| 连江县| 云浮市| 吴桥县| 青浦区| 长乐市| 武城县| 林州市| 同心县| 牙克石市| 清镇市| 礼泉县| 潜江市| 宝应县| 涿州市| 织金县| 永春县| 锡林浩特市| 南召县| 多伦县| 尚志市| 五河县| 藁城市| 温泉县| 融水| 赤峰市|