Python實現簡單的K Means演算法,視覺化

2021-09-09 07:50:08 字數 1978 閱讀 5806

執行效果:

#隨機生成大致是k個類別的點,用均勻分布生成中心點的位置,用高斯分布生成中心點周圍的點

def generatorn(k):

center=[[np.random.rand(1)*20,np.random.rand(1)*20] for _ in range(k)]

_data=

for x, y in center:

return _data

#得到隨機的初始點

def get_random_starts(_data,k_classes):

_starts=np.random.randint(0,499,k_classes)

_results={}

for idx,start in enumerate( _starts):

_results[idx]=_data[start,:]

return _results

#每個點聚類到最近的中心點

def group_by_means(_data,_means):

_groups=

for x,y in _data:

min_distance=10000000

min_x = none

min_y = none

for center_x,center_y in _means.values():

distance=(x-center_x)**2+(y-center_y)**2

if distance

min_distance=distance

min_x,min_y=center_x,center_y

return _groups

#計算每個簇的中心位置----累加每個點座標,再除以點個數

def cal_new_means(_groups):

new_means=

for idx,key in enumerate(_groups):

len_value=len(_groups[key])

sum_x,sum_y=0,0

for x,y in _groups[key]:

sum_x+=x

sum_y+=y

new_means[idx]=[sum_x/len_value,sum_y/len_value]

return new_means

#判斷終止的情況(沒有實現)

def if_stop():

pass

#畫圖def draw_data(_groups):

#fig=plt.figure(dpi=180)

plt.title("畫圖")

for xys in _groups.values():

xs=[xy[0] for xy in xys]

ys=[xy[1] for xy in xys]

plt.scatter(xs,ys)

plt.show()

classes_num=5

raw_data=generatorn(classes_num)#k,2,num

raw_data=np.transpose(raw_data,(0,2,1)).reshape(-1,2)#num*k,2

starts=get_random_starts(raw_data,classes_num)#k,2

means=starts#迭代用

while true :

groups=group_by_means(raw_data,means)

draw_data(groups)

means=cal_new_means(groups)

python實現簡單爬蟲 Python實現簡單爬蟲

簡介 爬蟲架構 1 url管理器 3 網頁分析器 4 爬蟲呼叫器 5 價值資料使用 爬蟲實現 1 排程器實現 coding utf 8 import url manager import html import html parser import html outputer import url ...

python 排序的簡單實現

獲取最小的引數 獲取第乙個引數,並且使用分片去掉第乙個,留下剩下的引數。def min1 arg res args 0 for arg in arg 1 if arg res res arg return res 讓python自動獲取第乙個引數以及其他的引數。def min2 fist,rest ...

Python實現簡單的爬蟲

import urllib import re defgethtml url page urllib.urlopen url html page.read return htmlimport re import urllib defgethtml url page urllib.urlopen ur...