我們一起聊聊分類模型:層次聚類
1.算法介紹
層次聚類(Hierarchical Clustering) 是一種常用的數(shù)據(jù)聚類算法,它通過構(gòu)建一個聚類樹來分析數(shù)據(jù)集的相似度和差異。這種算法不需要預(yù)先指定聚類數(shù),非常適合于探索性數(shù)據(jù)分析。層次聚類主要包括兩種方法:凝聚型(Agglomerative)和分裂型(Divisive)。本文將重點介紹凝聚型層次聚類,并通過MATLAB實現(xiàn)數(shù)據(jù)的層次聚類分析。
2.算法原理
凝聚型層次聚類的基本步驟如下:
- 初始化:開始時,將每個數(shù)據(jù)點視為一個獨立的聚類。
- 計算距離:計算所有聚類之間的距離。
- 合并聚類:選擇最近的兩個聚類合并成一個新的聚類。
- 更新距離:更新新聚類與其他聚類之間的距離。
- 重復(fù):重復(fù)步驟3和4,直到所有數(shù)據(jù)合并成一個聚類或達(dá)到預(yù)定的聚類數(shù)量。
距離的計算方式可以有多種,如單鏈接(最近鄰)、完全鏈接(最遠(yuǎn)鄰)、平均鏈接(組平均)等。選擇不同的距離計算方法會影響聚類的結(jié)果。
3.實例分析
3.1 生成模擬數(shù)據(jù)
首先,我們使用MATLAB生成一組二維模擬數(shù)據(jù)。
% 生成三個明顯分離的數(shù)據(jù)群
rng('default'); % 為了結(jié)果的可重現(xiàn)性
data1 = mvnrnd([2 2], [.5 .5], 50);
data2 = mvnrnd([-2 -2], [.5 .5], 50);
data3 = mvnrnd([2 -2], [.5 .5], 50);
% 合并數(shù)據(jù)集
data = [data1; data2; data3];
% 可視化原始數(shù)據(jù)
scatter(data(:,1), data(:,2), 10, 'filled')
title('模擬數(shù)據(jù)集')
xlabel('X坐標(biāo)')
ylabel('Y坐標(biāo)')
繪制生成的數(shù)據(jù)散點圖:
3.2 進(jìn)行層次聚類
使用MATLAB的linkage和dendrogram函數(shù)來進(jìn)行層次聚類并可視化結(jié)果。
% 使用歐氏距離和平均鏈接方法進(jìn)行層次聚類
Z = linkage(data, 'average', 'euclidean');
% 繪制樹狀圖
figure;
dendrogram(Z)
title('層次聚類的樹狀圖')
xlabel('樣本索引')
ylabel('距離')
層次聚類結(jié)果圖:
4. 結(jié)論
通過MATLAB實現(xiàn)的層次聚類能夠有效地將模擬數(shù)據(jù)分組。本例中,我們選擇了平均鏈接方法和歐氏距離,結(jié)果清晰地展示了數(shù)據(jù)的三個聚類。層次聚類適用于各種數(shù)據(jù)分析場景,特別是在數(shù)據(jù)結(jié)構(gòu)未知時,它提供了一種直觀的方法來探索數(shù)據(jù)集的結(jié)構(gòu)。
本文轉(zhuǎn)載自 寶寶數(shù)模AI,作者: BBSM
