1. 程式人生 > >機器學習——K-means演算法(聚類演算法)

機器學習——K-means演算法(聚類演算法)

聚類

在說K-means聚類演算法之前必須要先理解聚類和分類的區別。

分類其實是從特定的資料中挖掘模式,作出判斷的過程。比如Gmail郵箱裡有垃圾郵件分類器,一開始的時候可能什麼都不過濾,在日常使用過程中,我人工對於每一封郵件點選“垃圾”或“不是垃圾”,過一段時間,Gmail就體現出一定的智慧,能夠自動過濾掉一些垃圾郵件了。這是因為在點選的過程中,其實是給每一條郵件打了一個“標籤”,這個標籤只有兩個值,要麼是“垃圾”,要麼“不是垃圾”,Gmail就會不斷研究哪些特點的郵件是垃圾,哪些特點的不是垃圾,形成一些判別的模式,這樣當一封信的郵件到來,就可以自動把郵件分到“垃圾”和“不是垃圾”這兩個我們人工設定的分類的其中一個。

聚類的的目的也是把資料分類,但是事先是不知道如何去分的,完全是演算法自己來判斷各條資料之間的相似性,相似的就放在一起。在聚類的結論出來之前,我完全不知道每一類有什麼特點,一定要根據聚類的結果通過人的經驗來分析,看看聚成的這一類大概有什麼特點。

1、概述

K-means演算法是典型的基於距離的非層次聚類演算法,在最小化誤差函式的基礎上將資料劃分為預定的K類別,採用距離作為相似性的評級指標,即認為兩個物件的距離越近,其相似度越大。

2、核心思想

通過迭代尋找k個類簇的一種劃分方案,使得用這k個類簇的均值來代表相應各類樣本時所得的總體誤差最小。

k個聚類具有以下特點:各聚類本身儘可能的緊湊,而各聚類之間儘可能的分開。k-means演算法的基礎是最小誤差平方和準則,其代價函式是:
在這裡插入圖片描述


式中,μc(i)表示第i個聚類的均值。

各類簇內的樣本越相似,其與該類均值間的誤差平方越小,對所有類所得到的誤差平方求和,即可驗證分為k類時,各聚類是否是最優的。
上式的代價函式無法用解析的方法最小化,只能有迭代的方法。

3、演算法過程

1、從N個樣本資料中隨機選取K個物件作為初始的聚類質心。
2、分別計算每個樣本到各個聚類中心的距離,將物件分配到距離最近的聚類中。
3、所有物件分配完成之後,重新計算K個聚類的質心。
4、與前一次的K個聚類中心比較,如果發生變化,重複過程2,否則轉過程5.
5、當質心不再發生變化時,停止聚類過程,並輸出聚類結果。

【情景問題的模型建立】

根據航空公司目前積累的大量客戶會員資訊和其乘坐的航班記錄,可以得到包括姓名、乘坐次數、價格等十幾條屬性資訊。

本情景案例是想要獲取客戶價值,識別客戶價值應用的最廣泛的模型是RFM模型,三個字母分別代表recency(最近消費時間間隔)、frequency(消費頻率)、消費金額(monetary)這三個指標。結合具體情景,最終選取客戶關係長度L、消費時間間隔R、消費頻率F、飛行里程M、折扣係數的平均值C這5個指標作為航空公司識別客戶價值的指標,記為LRFMC模型。

所以本案例通過對LRFMC模型的五個指標進行K-means聚類分析來識別出最優價值的客戶。
在這裡插入圖片描述
主要步驟
如上圖所示,主要包括:
1、對資料集進行資料探索分析與預處理,包括資料缺失與異常處理、資料屬性的規約、清洗和變換。
2、利用步驟1中完成預處理的資料,基於LRFMC模型進行客戶分群,對各個客戶群進行特徵分析,識別出有價值的客戶。
3、針對不同價值的客戶進行不同的營銷手段,個性化服務。

python例項

在程式碼中需要傳入的資料(in_path)傳出的資料列印到檔案中(out_path_1和out_path_2)
在這裡插入圖片描述