Python聚類演算法之基本K均值例項詳解

2022-08-26 11:54:13 字數 2257 閱讀 8225

python聚類演算法之基本k均值例項詳解

是使用者指定的引數,即所期望的簇的個數。每次迴圈中,每個點被指派到最近的質心,指派到同乙個質心的點集構成乙個。然後,根據指派到簇的點,更新每個簇的質心。重複指派和更新操作,直到質心不發生明顯的變化。 

# scoding=utf-8

import pylab as pl

points = [[int(eachpoint.split("#")[0]),

int(eachpoint.split("#")[1])] for eachpoint in

open("points","r")]

# 指定三個初始質心

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')

# 記錄每次迭代後每個簇的質心的更新軌跡

center1 = [currentcenter1]; center2 = [currentcenter2]; center3 =

[currentcenter3]

# 三個簇

group1 = ; group2 = ; group3 =

for runtime in range(50):

group1 = ; group2 = ; group3 =

for eachpoint in points:

#計算每個點到三個質心的距離

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)

#將該點指派到離它最近的質心所在的簇

mindis =

min(distance1,distance2,distance3)

if(mindis ==

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

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')

# 列印每個簇的質心的更新軌跡

for center in [center1,center2,center3]:

pl.plot([eachcenter[0] for eachcenter in

center], [eachcenter[1] for eachcenter in center],'k')

pl.show()

執行效果截圖如下:

希望本文所述對大家python程式設計有所幫助。

聚類演算法之K均值聚類

k means聚類方法 1.介紹 k均值聚類是基於樣本集合劃分的聚類演算法。由於每個樣本在劃分的過程中只能屬於乙個類別,所以k means演算法屬於硬聚類。2.演算法過程 k均值聚類演算法是乙個迭代的過程,每次迭代包括兩個步驟 3.複雜度 k均值聚類演算法的複雜度o mnk 其中k表示類別數,m表示...

Python聚類演算法之基本K均值例項詳解

python聚類演算法之基本k均值例項詳解 是使用者指定的引數,即所期望的簇的個數。每次迴圈中,每個點被指派到最近的質心,指派到同乙個質心的點集構成乙個。然後,根據指派到簇的點,更新每個簇的質心。重複指派和更新操作,直到質心不發生明顯的變化。scoding utf 8 import pylab as...

R語言聚類演算法之k中心聚類 K medoids

1.原理解析 針對k 均值演算法易受極值影響這一缺點的改進演算法.在原理上的差異在於選擇個類別中心點時不採樣本均值點,而在類別內選取到其餘樣本距離之和最小的樣本為中心。2.在r語言中的應用 k中心聚類 k medoids 主要運用到了r語言中cluster包 r語言內建包 中的pam函式。pam x...