python實現K-means演算法
k-means 演算法接受引數 k ;然後將事先輸入的n個數據物件劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的物件相似度較高;而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得一個“中心物件”(引力中心)來進行計算的。通過隨機選取幾個聚類中心,並計算所有點到中心的距離,選取最近的一類,在以這個簇為中心,求簇中點的均值形成新的類。
操作方法
(01)第一步計算歐氏距離並取樣,k代表分類的總個數import numpy as np#calculate the O distancedef calculate_distance(vector1,vector2):import numpy as npreturn ((re(vector1-vector2)))#initialize centroidsdef initialize_centroids(data,k):import randomreturn le(data,k)
(02)產生新的簇類並求出最短距離#find the minimun diastance from individual to centroidsdef minimun_distance(data,centroidlist):clusterdictionary=cd=dict()for i in data:vector1=imarker=0min_dist=float(inf)for j in range(len(centroidlist)):vector2=centroidlist[j]distance=calculate_distance(vector1,vector2)if distance<min_dist:min_dist=distancemarker=jif marker not in ():clusterdictionary[marker]=list()clusterdictionary[marker]nd(i)return clusterdictionary#get centroidsdef getcentroids(clusterdictionary):import numpy as npcentroidlist=list()for key in ():centroid=(y(clusterdictionary[key]),axis=0)nd(centroid)return y(centroidlist)
(03)匯入資料並計算,當簇中心變化小於一定閾值跳出迴圈#get mean squared deviationdef getmsd(clusterdictionary,centroidlist):sum=0.0for key in ():vector1=centroidlist[key]distance=0.0for i in clusterdictionary[key]:vector2=idistance+=calculate_distance(vector1,vector2)sum+=distancereturn sum#show resultdef showresult(clusterdictionary,centroidlist):import ot as pltcolormark=[x27;or','ob','og','ok']centroidmark=['dr','db','dg','dk']for key in ():(centroidlist[key][0],centroidlist[key][1],centroidmark[key],markersize=12)for i in clusterdictionary[key]:(i[0],i[1],colormark[key])path='C:UsersjyjhDesktop'data=open(path,'r')lines()temp=list()import refor i in data:numlist=list()for j in p()t('t'):num=float(j)nd(num)nd(numlist)data=y(temp)centroidlist=initialize_centroids(data,4)clusterdictionary=minimun_distance(data,centroidlist)new_msd=getmsd(clusterdictionary,centroidlist)old_msd=-0.000001k=2while(abs(new_msd-old_msd)>=0.00001):centroidlist=getcentroids(clusterdictionary)clusterdictionary=minimun_distance(data,centroidlist)old_msd=new_msdnew_msd=getmsd(clusterdictionary,centroidlist)k+=1print new_msd-old_msdshowresult(clusterdictionary,centroidlist)
特別提示
對Kmeans瞭解
matlab有kmeans函式
-
塞爾達傳說 支線消失的咕咕雞 任務攻略
很多小夥伴可能不瞭解塞爾達咕咕雞任務,非常好奇想要知道,那麼我就來解答一下這個問題吧,具體內容請看下文:塞爾達咕咕雞任務一共7只雞分佈在村莊裡,但是在地圖上並沒有任何的提示,尋找起來頗費一番功夫。操作方法(01)在地圖上找到卡卡利科村,點進去;(02)跟丟雞的老爺爺對...
-
表格excel全空白沒有線條邊框網格線怎麼辦
Excel表格開啟時,正常情況下都是有線條邊框網格線的,但如果出現如圖Excel表格全空白沒有線條邊框風格線的時候怎麼辦呢?接下來我就以Excel2010版本為例給大家提供幾個解決方法。操作方法(01)方法一:開啟Excel表格,單擊選項,然後再把選項中的前的空格單擊打上即可顯示所...
-
MATLAB使用importdata讀取字元資料檔案並繪圖
本文首先使用importdata()讀取(匯入)含有字元和資料的文字格式資料檔案,然後介紹通過“.”+資料名的方式讀取結構陣列中的資料,最後使用plot()繪製折線圖。操作方法(01)第一,首先準備資料,下圖txt資料檔案是某年12個月的月收入情況,既包含數字又包含字元。(02)第二,將該數...
-
郵箱快速註冊,不用手機號
如何快速註冊郵箱?如何不用手機號註冊郵箱?僅以TOM郵箱為例。操作方法(01)點選連線進入TOM郵箱註冊頁面輸入郵箱賬號等資訊(02)選擇微信註冊,拿出手機掃一掃即可完成註冊特別提示使用微信掃一掃,不用手機號和驗證碼...