

摘要:機器學習分為監督學習和無監督學習,無監督學習一個非常重要的用途就是對數據進行聚類。聚類算法則是在完全沒有標簽的情況下,算法“猜測”哪些數據應該聚為一類。K-means算法是被廣泛應用的一種聚類算法,K-means算法的關鍵是選擇合適的k值,文章通過鳶尾花聚類展示K-means算法應用。
關鍵詞:K-means算法;聚類;無監督學習;機器學習
一、何為聚類
聚類(Clustering)是一種典型的“無監督學習”。聚類算法是對大量未知標記的數據集,根據數據之間的距離或者說是相似性(親疏性)將數據集劃分為多個簇(Cluster),使簇內的數據相似度盡可能大,而簇間的數據相似度盡可能小。
聚類的目的是把數據分類,但是事先我們不知道如何劃分,即聚類的類別和數目沒有預先的定義,是根據數據點的相似性(即數據點之間的距離)來劃分的。
聚類與分類最大的區別是:聚類為無監督學習,待處理數據沒有任何先驗知識,而分類是有監督學習,即存在先驗知識的訓練數據集。
二、K-means聚類算法原理
K-means算法也稱為k均值算法,由于其簡潔和效率,成為所有聚類算法中應用最為廣泛的一種聚類算法。對于給定的樣本集,按照樣本之間距離的大小,將樣本集劃分成k個簇,讓簇內的數據點盡量緊密地連接,而簇與簇之間的距離盡量大。k是簇的個數,k由用戶指定,每個簇中所有點的中心稱為質心,k均值算法根據某個距離函數反復把數據分入k個簇中。
K-means聚類算法的工作原理是:先隨機選取k個點作為初始的聚類中心,然后針對每個數據點,計算每個點與各個聚類中心之間的距離,把每個點歸為距離它最近的聚類中心代表的簇類。一次迭代結束之后,重新計算每個簇類的中心點,然后針對每個點,重新尋找距離自己最近的中心點。如此循環,直到前后兩次迭代的簇類沒有變化。
終止條件可以是以下任何一個:
(1)沒有(或最小數目)對象被重新分配給不同的聚類。
(2)沒有(或最小數目)聚類中心再發生變化。
(3)誤差平方和局部最小。
三、K-means算法流程
K-means算法是一個反復迭代的過程,算法的基本步驟為:
步驟1:選定要聚類的類別數目k,隨機選擇k個中心點(質心)。
步驟2:針對每個樣本點,找到距離其最近的中心點(尋找組織),距離同一中心點最近的點為一個類,這樣完成了一次聚類。
步驟3:判斷聚類前后的樣本點的類別情況是否相同,如果相同,則算法終止,否則進入步驟4。
步驟4:針對每個類別中的樣本點,計算這些樣本點的中心點,當做該類的新的中心點(即將每個類別中所有對象所對應的均值作為該類別的聚類中心點),繼續步驟2。
上述步驟的關鍵兩點是:1. 找到距離自己最近的中心點。2. 更新中心點。
常用的距離度量標準是歐幾里得距離的平方:
四、K-means算法中K值的選擇
K-means算法中的k值需要預先確定,k值設為幾即聚幾類。在實際應用中k值是非常難以選擇的,通常的做法是多嘗試幾個k值,看聚成幾類的結果更好解釋,更符合分析目的等。
還可以采用“肘”方法(Elbow method)確定k值。該方法的原理就是最小化點到聚類中心的距離。
“肘”方法的步驟:
(1)對于n個點的數據集,迭代計算k from 1 to n,每次聚類完成后計算每個點到其所屬的簇中心的距離的平方和;
(2)平方和是會逐漸變小的,直到k==n時平方和為0,因為每個點都是它所在的簇中心本身;
(3)在這個平方和變化過程中,會出現一個拐點也即“肘”點,下降率突然變緩時即認為是最佳的k值。
一般來說,手肘圖都會展現出一個肘部輪廓,下降率突然變緩時即認為是最佳的k值。
隨著聚類數k的增大,樣本劃分會更加精細,每個簇的聚合程度會逐漸提高,那么簇內距離平方和自然會逐漸變小。并且,當k小于真實聚類數時,由于k的增大會大幅增加每個簇的聚合程度,故簇內距離平方和的下降幅度會很大,而當k到達真實聚類數時,再增加k所得到的聚合程度回報會迅速變小,所以簇內距離平方和的下降幅度會驟減,然后隨著k值的繼續增大而趨于平緩,也就是說簇內距離平方和和k的關系圖是一個手肘的形狀,而這個肘部對應的k值就是數據的真實聚類數。
五、K-means算法實現鳶尾花數據的聚類
任務目標:使用scikit-learn內置的鳶尾花數據集,該數據集每條記錄都有4個特征:花萼長度(calyx length)、花萼寬度(calyx width)、花瓣長度(petal length)、花瓣寬度(petal width),通過這4個特征可以預測鳶尾花屬于哪一品種。我們選取數據的后兩個特征,即花瓣長度和花瓣寬度作為訓練數據,首先根據繪制的鳶尾花數據分布圖查看數據分分布情況,然后繪制出手肘圖,進一步輔助確定合理的k值。
步驟一:選取鳶尾花數據集的后兩個特征即花瓣長度和寬度,繪制出鳶尾花數據分布圖,如圖1所示。
從鳶尾花數據分布圖可以大致看出鳶尾數據的分布情況。
步驟二:繪制出分類數1到7時,分類數(k)和簇內距離和inertia的對應關系圖,即手肘圖,如圖2所示。
觀察圖中各點的曲率可以看到,k=3之后,簇內距離平方和inertia的下降變得很緩慢了,因此最佳的k值為3。
步驟三:選擇最佳k值,k=3時繪制聚類效果圖,如圖3所示。
3個類別的鳶尾花數據分別用綠色的五角星、紅色的圓點和藍色的+號表示,可以看到k=3時的聚類效果很好。
六、總結
聚類用于數據集內種類屬性不明晰,希望通過數據挖掘或自動歸類出有相似特點的對象的場景。K-means算法可用于維數、數值都很小且連續的數據集,比如在市場營銷領域,建立合理的客戶價值評估模型,對客戶進行分群,分析不同客戶群的客戶價值,從而制定相應的營銷策略,對不同的客戶群提供個性化的服務等。
K-means算法原理比較簡單,實現也很容易,收斂速度快,聚類效果也比較好,算法的可解釋度比較強,主要需要調參的參數是簇數k。但k值的選取不好把握,本文采用繪制手肘圖的方法輔助選取最佳的k值。
參考文獻
[1] 鐘志峰,李明輝,張艷.機器學習中自適應k 值的k 均值算法改進[J].計算機工程與設計,2021,42(1):136-141.
[2] 李玥.機器學習的分類、聚類研究[J].電腦知識與技術,2020,16(4):161-162.
[3] 季杰,陳強仁,朱東.基于機器學習的航空客戶價值分析[J].電腦知識與技術,2020,16(14):238-239.
作者簡介:張松慧(1980-),女,湖北武漢人,武漢軟件工程職業學院副教授/信息系統項目管理師,碩士,研究方向人工智能技術應用。