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函數
-
將pdf轉換成word後文檔全是圖片怎麼辦
MicrosoftWord是微軟公司的一個文字處理器應用程序。它最初是由RichardBrodie爲了執行DOS的IBM計算機而在1983年編寫的,很多人不知道將pdf轉換成word後文檔全是圖片怎麼辦,下面讓我們一起來學習一下吧操作方法(01)首先開啟捷速OCR文字識別軟件(02)將PDF放入捷速OCR文...
-
怎樣製作電子版的賀卡?
在這個互聯網如此發達的時代,每逢親朋好友過生日,各種節日的到來之際,我們總想借助互聯網送去自己的祝福。往往想給親朋好友郵寄一張賀卡,然而網絡搜尋到的賀卡有時不盡人意,或沒有創意,或沒法表達自己的感情。那麼,爲什麼不嘗試親手製作一張賀卡呢?步驟/方法(01)設定賀...
-
在Word文檔中怎麼樣進行簡繁體轉換?
字型有繁體和簡體之分,而Word文檔主要的功能是記錄儲存文字文字,可能由於區域不一樣,有的喜歡用簡體有的喜歡用繁體,爲了方便檢視,就需要用到簡繁體的相互轉換了。操作方法(01)方法一:比較常用的,就是用Word文檔自帶的簡繁體轉換功能,找到審閱——簡轉繁——便可將選擇的...
-
塞爾達傳說 支線消失的咕咕雞 任務攻略
很多小夥伴可能不瞭解塞爾達咕咕雞任務,非常好奇想要知道,那麼我就來解答一下這個問題吧,具體內容請看下文:塞爾達咕咕雞任務一共7只雞分佈在村莊裏,但是在地圖上並沒有任何的提示,尋找起來頗費一番功夫。操作方法(01)在地圖上找到卡卡利科村,點進去;(02)跟丟雞的老爺爺對...