Python聚類算法之基本K均值實(shí)例詳解
本文實(shí)例講述了Python聚類算法之基本K均值運(yùn)算技巧。分享給大家供大家參考,具體如下:
基本K均值 :選擇 K 個初始質(zhì)心,其中 K 是用戶指定的參數(shù),即所期望的簇的個數(shù)。每次循環(huán)中,每個點(diǎn)被指派到最近的質(zhì)心,指派到同一個質(zhì)心的點(diǎn)集構(gòu)成一個。然后,根據(jù)指派到簇的點(diǎn),更新每個簇的質(zhì)心。重復(fù)指派和更新操作,直到質(zhì)心不發(fā)生明顯的變化。
# scoding=utf-8
import pylab as pl
points = [[int(eachpoint.split("#")[0]), int(eachpoint.split("#")[1])] for eachpoint in open("points","r")]
# 指定三個初始質(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')
# 記錄每次迭代后每個簇的質(zhì)心的更新軌跡
center1 = [currentCenter1]; center2 = [currentCenter2]; center3 = [currentCenter3]
# 三個簇
group1 = []; group2 = []; group3 = []
for runtime in range(50):
group1 = []; group2 = []; group3 = []
for eachpoint in points:
# 計(jì)算每個點(diǎn)到三個質(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)后,更新每個簇的質(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)]
# 記錄該次對質(zhì)心的更新
center1.append(currentCenter1)
center2.append(currentCenter2)
center3.append(currentCenter3)
# 打印所有的點(diǎn),用顏色標(biāo)識該點(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')
# 打印每個簇的質(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)行效果截圖如下:

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
如何將yolo格式轉(zhuǎn)化為voc格式:txt轉(zhuǎn)xml(親測有效)
這篇文章主要介紹了如何將yolo格式轉(zhuǎn)化為voc格式:txt轉(zhuǎn)xml,親測有效,可以使用,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友參考下吧2023-12-12
pytorch中nn.Sequential和nn.Module的區(qū)別與選擇方案
在 PyTorch 中,構(gòu)建神經(jīng)網(wǎng)絡(luò)模型有兩種主要方式:nn.Sequential 和 nn.Module,它們各有優(yōu)缺點(diǎn),適用于不同的場景,下面通過示例給大家講解pytorch中nn.Sequential和nn.Module的區(qū)別與選擇方案,感興趣的朋友一起看看吧2024-06-06
對dataframe進(jìn)行列相加,行相加的實(shí)例
今天小編就為大家分享一篇對dataframe進(jìn)行列相加,行相加的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
使用python進(jìn)行圖片的文字識別詳細(xì)代碼
Tesseract OCR是一款由Google團(tuán)隊(duì)開發(fā)的開源OCR引擎,用于將圖片、PDF 等格式中的文本轉(zhuǎn)換為可編輯的文本格式,本文主要介紹了Python進(jìn)行圖片的文字識別功能OCR的相關(guān)知識,需要的朋友可以參考下2023-05-05
在python中實(shí)現(xiàn)求輸出1-3+5-7+9-......101的和
這篇文章主要介紹了在python中實(shí)現(xiàn)求輸出1-3+5-7+9-......101的和,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04

