91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 556KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2022-11-27
  • 語言: Python
  • 標(biāo)簽: k-means??

資源簡介

K-means算法是很典型的基于距離的聚類算法,采用距離作為相似性的評價指標(biāo),即認(rèn)為兩個對象的距離越近,其相似度就越大。該算法認(rèn)為簇是由距離靠近的對象組成的,因此把得到緊湊且獨(dú)立的簇作為最終目標(biāo)。 本代碼提供了k-means算法的python實(shí)現(xiàn),并使用matlibplot可視化算法結(jié)果

資源截圖

代碼片段和文件信息

#?coding:utf-8
import?numpy?as?np
import?pylab?as?pl
import?random?as?rd
import?imageio
#計(jì)算平面兩點(diǎn)的歐氏距離
step=0
color=[‘.r‘‘.g‘‘.b‘‘.y‘]#顏色種類
dcolor=[‘*r‘‘*g‘‘*b‘‘*y‘]#顏色種類
frames?=?[]
def?distance(a?b):
????return?(a[0]-?b[0])?**?2?+?(a[1]?-?b[1])?**?2
#K均值算法
def?k_means(x?y?k_count):
????count?=?len(x)??????#點(diǎn)的個數(shù)
????#隨機(jī)選擇K個點(diǎn)
????k?=?rd.sample(range(count)?k_count)
????k_point?=?[[x[i]?[y[i]]]?for?i?in?k]???#保證有序
????k_point.sort()
????global?frames
????global?step
????while?True:
????????km?=?[[]?for?i?in?range(k_count)]??????#存儲每個簇的索引
????????#遍歷所有點(diǎn)
????????for?i?in?range(count):
????????????cp?=?[x[i]?y[i]]???????????????????#當(dāng)前點(diǎn)
????????????#計(jì)算cp點(diǎn)到所有質(zhì)心的距離
????????????_sse?=?[distance(k_point[j]?cp)?for?j?in?range(k_count)]
????????????#cp點(diǎn)到那個質(zhì)心最近
????????????min_index?=?_sse.index(min(_sse))???
????????????#把cp點(diǎn)并入第i簇
????????????km[min_index].append(i)
????????#更換質(zhì)心
????????step+=1
????????k_new?=?[]
????????for?i?in?range(k_count):
????????????_x?=?sum([x[j]?for?j?in?km[i]])?/?len(km[i])
????????????_y?=?sum([y[j]?for?j?in?km[i]])?/?len(km[i])
????????????k_new.append([_x?_y])
????????k_new.sort()????????#排序

????????#使用Matplotlab畫圖
????????pl.figure()
????????pl.title(“N=%dk=%d??iteration:%d“%(countk_countstep))
????????for?j?in?range(k_count):
????????????pl.plot([x[i]?for?i?in?km[j]]?[y[i]?for?i?in?km[j]]?color[j%4])
????????????pl.plot(k_point[j][0]?k_point[j][1]?dcolor[j%4])
????????pl.savefig(“1.jpg“)
????????frames.append(imageio.imread(‘1.jpg‘))
????????if?(k_new?!=?k_point):#一直循環(huán)直到聚類中心沒有變化
????????????k_point?=?k_new
????????else:
????????????return?km

#計(jì)算SSE
#?def?calc_sse(x?y?k_count):
#?????count?=?len(x)??????????????????????????????#點(diǎn)的個數(shù)
#?????k?=?rd.sample(range(count)?k_count)????????#隨機(jī)選擇K個點(diǎn)
#?????k_point?=?[[x[i]?[y[i]]]?for?i?in?k]
#?????k_point.sort()??????????????????????????????#保證有序
#?????#centroid
#?????sse?=?[[]?for?i?in?range(k_count)]
#?????while?True:
#?????????ka?=?[[]?for?i?in?range(k_count)]??????#存儲每個簇的索引
#?????????sse?=?[[]?for?i?in?range(k_count)]
#?????????#遍歷所有點(diǎn)
#?????????for?i?in?range(count):
#?????????????cp?=?[x[i]?y[i]]???????????????????#當(dāng)前點(diǎn)
#?????????????#計(jì)算cp點(diǎn)到所有質(zhì)心的距離
#?????????????_sse?=?[distance(k_point[j]?cp)?for?j?in?range(k_count)]
#?????????????#cp點(diǎn)到那個質(zhì)心最近
#?????????????min_index?=?_sse.index(min(_sse))
#?????????????#把cp點(diǎn)并入第i簇
#?????????????ka[min_index].append(i)
#?????????????sse[min_index].append(min(_sse))
#?????????#更換質(zhì)心
#?????????k_new?=?[]
#?????????for?i?in?range(k_count):
#?????????????_x?=?sum([x[j]?for?j?in?ka[i]])?/?len(ka[i])
#?????????????_y?=?sum([y[j]?for?j?in?ka[i]])?/?len(ka[i])
#?????????????k_new.append([_x?_y])
#?????????k_new.sort()????????#排序
#?????????#更換質(zhì)心
#?????????if?(k_new?!=?k_point):
#?????????????k_point?=?k_new
#?????????else:
#?????????????break
#?????s?=0
#?????for?i?in?range(k_count):
#?????????s?+=?sum(sse[i])
#?????return?s
x?y?=?np.load

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????46896??2017-12-12?11:16??K-means\1.jpg

?????文件????????937??2014-03-18?10:03??K-means\2.csv

?????文件?????933746??2017-12-12?11:16??K-means\k-means.gif

?????文件???????3504??2017-12-12?10:48??K-means\K-means.py

?????目錄??????????0??2017-12-12?10:48??K-means

-----------?---------??----------?-----??----

???????????????985083????????????????????5


評論

共有 條評論