最近機器學習、人工智能很火熱,今天向大家介紹一個聚類分析中的經(jīng)典算法——K-means算法(K均值算法)。
01 聚類分析簡介
所謂的聚類分析,就是發(fā)現(xiàn)數(shù)據(jù)對象之間的關系,將數(shù)據(jù)進行分組(目的),組內(nèi)的相似性越大,組間的差別越大,則聚類效果越好(評價標準)。

同樣是分組,那聚類和分類有什么區(qū)別呢?聚類是無監(jiān)督的學習算法,分類是有監(jiān)督的學習算法。
所謂有監(jiān)督就是有已知標簽的訓練集(也就是說提前知道訓練集里的數(shù)據(jù)屬于哪個類別),機器學習算法在訓練集上學習到相應的參數(shù),構建模型,然后應用到測試集上。而聚類算法是沒有標簽的,聚類的時候,我們并不關心某一類是什么,我們需要實現(xiàn)的目標只是把相似的東西聚到一起。

聚類分析能夠應用在哪些場景下呢?在我熟悉的金融領域,聚類分析主要應用在客戶細分,信貸風控和反欺詐中。
以“客戶細分”為例,銀行一般都有CRM系統(tǒng)(客戶關系管理系統(tǒng)),CRM中一般根據(jù)客戶資產(chǎn)或者貢獻度把客戶分成私行客戶、鉆石客戶、白金客戶和普通客戶。但是這種根據(jù)單一維度細分客戶的方法并不能全面反映出客戶的特點,有時候我們需要根據(jù)多個維度(基本信息、產(chǎn)品配置情況、風險偏好、征信情況等)細分客戶,比如可以把客戶分成高價值客戶、成長型客戶和普通客戶。
然后針對不同類型的客戶指定個性化營銷方案:針對高價值客戶,做好流失預警;針對成長型客戶,深入挖掘客戶需求;針對普通客戶,由外呼團隊批量營銷。
剛才提到聚類分析的概念是將“相似度”接近的樣本放入一個簇中,那么如何衡量“相似度”呢?在聚類分析中,一般用聚類表示“相似度”。常用的距離計算公式是閔可夫斯基距離:

考慮一種特殊情況,當P=2時,閔式距離就是我們常說的“歐幾里得距離”,也就是后面要介紹的K-means算法中用到的距離計算公式。
02 K-means算法簡介
K-means算法,是一種典型的基于距離的聚類算法。為什么叫K-means呢?
K值:簇的個數(shù),需提前指定。
均值向量:迭代時,選擇簇內(nèi)樣本的均值向量作為簇的中心。
評價K-means算法性能的方式有很多種,下面介紹一種簡單的、基于平法誤差的計算公式:x為簇內(nèi)樣本,u為簇的中心,E值越小,說明簇內(nèi)樣本距離越小,相似度越高。

K-means算法的流程如下:

首先,給定樣本集D和預先指定的簇數(shù)K(也就是分類的個數(shù)),從D中隨機選取K個樣本作為初始向量。
然后進入迭代,第一步循環(huán),計算每個樣本屬于哪個簇;第二部循環(huán),更新均值向量。
迭代結束的條件有兩種:可以設置迭代次數(shù),比如5次、10次,也可以判斷均值向量是否還更新,如不再更新(每次更新之間的差距小于一個足夠小的數(shù)),則終止迭代。


K-means算法優(yōu)點:簡單,易于理解和實現(xiàn);收斂快,一般僅需5-10次迭代即可;高效,時間復雜度為O(T*K*N)。
當然K-means算法也有很多缺點:K值需預先給定,而很多情況下K值得估計是很困難的;對初始點的選取敏感,不同的隨機初始點得到的聚類結果可能完全不同;對噪點過于敏感,因為算法是基于均值的,均值有些時候是不靠譜的;對球形簇的分組效果較好,對非球型簇、不同尺寸、不同密度的簇分組效果不好。
舉個例子,還是上面的案例,如果初始點選擇不合適,最終的分組效果較上面有很大的差異。


03 如何改進K-means算法
針對K值需事先給定的問題,在沒有先驗經(jīng)驗的情況下,我們不妨多嘗試幾種不同的K值,然后分別計算E值(平方誤差),找到“拐點”。如下圖這種情況,當K=5時,聚類性能基本達到最優(yōu)效果,當K繼續(xù)增加,性能并沒有明顯的提升,那么最終的聚類算法K值即可選擇為5。

針對算法對初始點敏感的問題,我們可以選擇距離盡可能遠的點作為初始點。
針對算法對初始點敏感的問題,我們在預處理階段,對數(shù)據(jù)進行歸一化處理時可考慮剔除噪點。如果99%的客戶收入為10-20萬,只有1%的客戶收入為200萬以上,那么我們在做歸一化處理時,不妨選取99%客戶收入的最大值為最大值,那1%的收入直接置為1即可。
針對近期對K-means算法的學習,簡單總結,后續(xù)繼續(xù)完善~