因為一直在做的是聚類演算法的研究,算是總結了一些心得,這裡總結些知識性與思路性的東西,我想在其他地方也是很容易的找到類似的內容的。畢竟,世界就是那麼小。
宣告:本文比較不適合沒有dm基礎的人來閱讀。我只是胡亂的塗鴉而已
在dm裡的聚類演算法裡,有基於劃分的演算法,基於層次的演算法,基於密度的演算法,基於網格的演算法,基於約束的演算法。
其中每一種基於的演算法都會衍生出一至幾種演算法,對應的每一種演算法不管在學術界還是工業界都存在著許多的改進的演算法
這裡想介紹的是基於基於劃分的演算法裡的k均值演算法
在基於劃分的演算法裡,最典型的是k均值演算法,這個比較簡單,也是很容易理解的。
原理:
演算法的輸入:資料集合,k值
輸出:經過聚類的k個中心點
1、在待聚類的資料集合裡隨機的選取k個資料樣本點作為初始的聚類中心
2、計算剩餘的每乙個樣本點距離k個聚類中心點的距離,分配樣本點到最最近的聚類中心簇裡
3、重新計算聚類簇的均值
4、判斷聚類中心點是否會存在變化或者平方誤差函式基本上不在變化(這個可以人為的設定,比如通過設定平方誤差函式與上次相比滿足一定的關係變停止演算法等等),否則重複步驟2,3
演算法優點很明顯的是演算法很容易,很簡單,相對來說很快啊,僅限於小資料量。
演算法的缺點
這個也是很明顯的,根據演算法原理,k值的人為性,主觀性,要是有乙個演算法或者什麼方式能夠精確地確定k值變化給此演算法帶來突破;另外,初始聚類中心的隨機性;還有資料集合肯定存在孤立點的影響以及大資料量的解決方案等等
針對k均值的缺點,前仆後繼,中外的scholars和experts都在做出了很大的貢獻。我這裡根據自己能夠想到的總結下(肯定是不全的)
每一種的引入都會對應著一篇或數篇*****s,數學的引入,演算法的引入,形式多樣,不拘一格
這也許正是對應了導師曾經說過的那句話,科學就是要小步慢跑
看*****實現*****s,改進*****s,優化*****s,上線系統的測試等,在看*****s,實現*****s,改進*****s,優化*****s,上線測試,迴圈的更迭。
我想在這一系列的過程中,會有幾個好幫手,google,wiki,乙個好的ide,乙個足夠靈活的大腦,要是有足夠的硬體條件來滿足你就更棒了
K 均值演算法
動態聚類方法是模式識別中一種普遍採用的方法,它具有以下3個要點 1 選定某種距離度量作為樣本間的相似性度量 2 確定某個評價聚類結果質量的準則函式 3 給定某個初始分類,然後用迭代演算法找出使準則函式取極值的最好的聚類結果 k means演算法 輸入 聚類個數k,以及包含 n個資料物件的資料庫。輸出...
K均值演算法
假設需要聚成k個類 演算法先會隨機從資料集中選取k個點,把他們當做k個聚類的中心點 依次計算資料集中的每乙個點與各個中心點的距離,離哪個中心點近,就劃分到那個中心點對應的聚類下 計算分到同一類簇下,所有點的均值,更新中心點,重複 直至達到迭代結束條件 import numpy as np impor...
k均值演算法
1 撲克牌手動演練k均值聚類過程 30張牌,3類 實驗總牌數為30,分三類進行三輪迭代。第一輪 抽取聚類中心為 3 4 7.聚類結果為 第二輪 經過求平均後,重新確定聚類中心為 2 4 10 第三輪 對上類再進行求平均,選定聚類中心為2 5 10 最終聚類中心穩定在2 5 10,以此為小中大劃分。2...