k means演算法總結

2022-03-14 16:03:15 字數 1612 閱讀 7310

1.原理

聚類是一種無監督學習的方法,其實質是依據某種距離度量,使得同一聚簇之間的相似性最大化,不同聚簇之間的相似性最小化,即把相似的物件放入同一聚簇中,把不相似的物件放到不同的聚簇中。聚類與分類不同,聚類的輸入物件不需要帶有類別標籤,最後組成的分類是由使用的演算法決定的。

在聚類中,k-means由於其簡單、易實現的優點,被廣泛使用。

假設集合

是d維向量空間中的集合,其中

表示集合

中的第i個物件(或稱為"資料點"),設矩陣

表示k個聚簇中心的集合,其中,

表示第j個聚簇標識,向量

用於表示每個資料點所屬的聚簇。

k-means演算法是一種迭代的貪婪下降求解演算法,其目標函式是非凸的,這也是造成只能得到區域性最優解的原因,目標函式表示式如下:

演算法的流程主要包括,首先我們隨機選擇集合

中的k個點作為初始的聚簇中心,接著根據將集合

中的每個點分配到距離它最近的聚簇中,最後根據每個聚簇中的資料點更新聚簇中心,如此反覆地執行後兩個步驟直到演算法收斂。k-means演算法就是通過迭代的方式,將集合

中的資料點聚成k個類,其核心步驟主要有:

1)將資料點分配到距離它最近的聚簇中心

2)更新聚簇中心(取聚簇中每個資料點座標的均值)

演算法的詳細步驟如表1所示,

表1 k-means演算法的具體步驟

2.缺陷

k-means演算法存在不少的缺陷,表2列出了k-means演算法常見的缺陷以及解決的方法。

表2 k-means演算法缺陷

3.擴充套件

3.1核方法

為了能處理形狀複雜的聚簇,我們可以通過核方法提高k-means演算法對於複雜資料的處理能力。我們知道聚簇邊界在原空間中是非線性的,但是,如果是在核函式所隱含的高維空間中卻可以線性的。

3.2加速的k-means

k-means演算法在處理超大資料時,存在時間過長的缺陷,所以針對這個缺點,提出了不少的改進演算法。例如可以通過使用kd-樹或者利用三角不等式,減少在重新劃分聚簇這個步驟的計算量。

3.3柔性k-means

柔性k-means是與剛性k-means相對的,剛性的k-means即基本的k-means演算法,將每個資料點劃分到唯一乙個聚簇中。而在柔性的k-means演算法中,將每個資料點依據概率賦給每個聚簇,即柔性k-means中,每個資料點都有乙個權重(概率)向量,用來描述每個資料點屬於每個聚簇的可能性。

4.小結

k-means演算法使用簡單的迭代將資料集聚成k個類,迭代的核心步驟有:(1)更新聚簇中心;(2)更新聚簇標識。儘管它有不少缺陷,但是其實現簡單、移動、伸縮性良好等優點使得它成為聚類中最常用的演算法之一。

參考文獻

[1]xindong wu,vipin kumar.資料探勘十大演算法[m].北京:清華大學出版社.2014:19-30.

k means演算法不足

a.k 不確定 對於初始條件和聚類的個數 k 並沒有乙個標準的方法來給定。初始條件不同會對結果產生比較大的影響,因為有時演算法會跳入區域性最優。所以解決方法之一,就是多次執行演算法,隨機分割,比較結果之間的差異。b.區域性最優 如果要達到全域性最優,需要用到其他一些技術,比如模擬退火或者遺傳演算法等...

Kmeans演算法實現

include opencv2 highgui highgui.hpp include opencv2 core core.hpp include using namespace cv using namespace std static void help int main int argc ch...

K means演算法上

在資料探勘中,k means演算法是一種cluster analysis的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種子點最近均值的演算法。問題k means演算法主要解決的問題如下圖所示。我們可以看到,在圖的左邊有一些點,我們用肉眼可以看出來有四個點群,但是我們怎麼通過電腦程式找出...