K-means聚類演算法
來自專欄袁帥:互聯網數據分析運營
聚類應用場景
通過客戶消費行為測量,評判客戶價值,對客戶進行細分,找到有價值的客戶和需要關注的客戶。
合理對菜品進行分析,以便區分哪些菜品暢銷、毛利高,哪些菜品滯銷、毛利低。
- 聚類演算法簡介
聚類是一種非監督的學習演算法。聚類根據數據自身的距離(相似度)將它們劃分為若干組,劃分的原則是組內樣本最小化而組間距離最大化,如圖所示。
3、常見聚類演算法
4、演算法過程
(1)從N個樣本數據中隨機選取K個對象作為初始的聚類中心;
(2)分別計算每個樣本到各個聚類中心的距離,將對象分配到距離最近的聚類中;
(3)所有對象分配完成後,重新計算K個聚類的中心;
(4)與前一次計算得到的K個聚類中心比較,如果聚類中心發生變化,轉第(2)步,否則轉第(4)步;
(5)當質心不發生變化時停止並輸出聚類結果。
5、matlab中的Kmeans函數
[IDX,C,sumd,D]=kmeans(x,k,param1,val1,param2,val2,…)
輸出:
IDX:每個樣本數據的類別
C:k個類別的中心向量
Sumd:每個類別樣本到中心向量的距離和,1*k維向量
D:每個樣本到中心的距離,n*k維矩陣
輸入:
X—聚類數據,N*P的矩陣
K—聚類數,整數
6、實戰演練
根據餐飲客戶的消費行為數據,將客戶分類成不同的客戶群,並評價這些客戶的價值。
設定聚類個數為k=3,最大迭代次數為』MaxIter』=500,距離選歐式距離』distance』=sqEuclidean
K-means聚類演算法代碼
%% 使用K-Means演算法聚類消費行為特徵數據
clear ;clc;
% 參數初始化
inputfile = ../data/consumption_data.xls; % 銷量及其他屬性數據
k = 3; % 聚類的類別
iteration =500 ; % 聚類最大循環次數
distance = sqEuclidean; % 距離函數
%% 讀取數據
[num,txt]=xlsread(inputfile);
data = num(:,2:end);
%% 數據標準化
data = zscore(data);
%% 調用kmeans演算法
opts = statset(MaxIter,iteration);
[IDX,C,sumd,D] = kmeans(data,k,distance,distance,Options,opts);
%% 列印結果
for i=1:k
disp([第 num2str(i) 組聚類中心為:]);
disp(C(i,:));
end
T = tabulate(IDX) %%統計數組中相同元素的個數,第一列是各種不同取值;第二列是各種不同取值對應的個數;第三列是各種不同取值對應的比例
disp(K-Means聚類演算法完成!);
結果展示
實驗數據與代碼:K-means演算法
鏈接:https://pan.baidu.com/s/1H81dqop5E1UilMFIWYMseQ 密碼:38vi
推薦閱讀:
※基於 XGBoost 對 Santander 銀行用戶購買行為進行預測
※實戰:數據進入Maxcompute的N種方式
※每天一道面試題:簡述不完備數據下學習貝葉斯網路結構
※數據挖掘軟體WEKA(1),修改數據類型