K-means算法,也稱為K-平均或者K-均值,一般用在機器學習中,作為掌握聚類算法的第一個算法。
- k-means歷史
雖然其思想能夠追溯到1957年Hugo Steinhaus ,“k-均值”術語于1967年才被James MacQueen 首次使用。標準算法則是在1957年被Stuart Lloyd作為一種脈沖碼調制的技術所提出,但直到1982年才被貝爾實驗室公開出版 。在1965年,E.W.Forgy發表了本質上相同的方法,所以這一算法有時被稱為Lloyd-Forgy方法。更高效的版本則被Hartigan and Wong提出(1975/1979)。
- k-means定義
給定數據集 D={x1,x2,…,xm},k–means算法將整個數據集劃分為若干簇C={c1,c2,…ck} ,選定k值,即簇個數。
初始化:隨機選擇k個數據點,作為每個簇的中心。
重新分配:對于數據集中的每一個數據點,計算其到k個中心點的距離,并將其分配到距離最近的中心點所在簇
重新計算:所有數據點都被分配后, 更新每個簇的中心點,設置為該簇所有數據點的
重復以上過程直到收斂每個簇的中心點不再變化
- 歐氏距離
在n維歐式空間中,每個點是一個n維實數向量。給定點x:(x1,x2…,xn)和點y(y1,y2,…yn)
- 舉例
隨機選4個初始點,聚成4類,每種顏色一類
重新計算每個點到簇中心的距離
將點從新分配到離它最近的簇中
更新每個簇的中心點
重復以上過程,直至簇中心不再變化為止
- K-means算法思考
K值選擇
k 值對最終結果的影響至關重要,而它卻必須要預先給定。給定合適的 k 值,需要先驗知識,憑空估計很困難,或者可能導致效果很差。
異常點的存在
K-means算法在迭代的過程中使用所有點的均值作為新的質點(中心點),如果簇中存在異常點,將導致均值偏差比較嚴重。比如一個簇中有2、4、6、8、100五個數據,那么新的質點為24,顯然這個質點離絕大多數點都比較遠;在當前情況下,使用中位數6可能比使用均值的想法更好,使用中位數的聚類方式叫做K-Mediods聚類(K中值聚類)。
初始值敏感
K-means算法是初值敏感的,選擇不同的初始值可能導致不同的簇劃分規則。為了避免這種敏感性導致的最終結果異常性,可以采用初始化多套初始節點構造不同的分類規則,然后選擇最優的構造規則。針對這點后面因此衍生了:二分K-Means算法、K-Means++算法、K-Means||算法、Canopy算法等。
基因組分析 微信公眾號推出 《50個經典算法講解》系列文章, 第一篇文章 《K-means算法》,爭取每周更新一篇高質量帖子。
關注微信公眾號 ,**轉發 ** 給同學和同事,您的認可,是對我最大的支持 ,任何問題,后臺可以留言。