【scikit-learn基础】--『监督学习』之 层次聚类
層次聚類算法是機器學習中常用的一種無監(jiān)督學習算法,它用于將數(shù)據(jù)分為多個類別或層次。
該方法在計算機科學、生物學、社會學等多個領域都有廣泛應用。
層次聚類算法的歷史可以追溯到上世紀60年代,當時它主要被用于社會科學中。
隨著計算機技術的發(fā)展,這種方法在90年代得到了更為廣泛的應用。
1. 算法概述
層次聚類的基本原理是創(chuàng)建一個層次的聚類,通過不斷地合并或分裂已存在的聚類來實現(xiàn)。
它分為兩種策略:
- 凝聚策略:初始時將每個點視為一個簇,然后逐漸合并相近的簇
- 分裂策略:開始時將所有點視為一個簇,然后逐漸分裂
在scikit-learn中,層次聚類的策略有4種:
-
ward:默認策略,也就是最小方差法。它傾向于合并那些使得合并后的簇內(nèi)部方差最小的兩個簇 -
complete:計算兩個簇之間的距離時,考慮兩個簇中距離最遠的兩個樣本之間的距離 -
average:計算兩個簇之間的距離時,考慮兩個簇中所有樣本之間距離的平均值 -
single:計算兩個簇之間的距離時,考慮兩個簇中距離最近的兩個樣本之間的距離
2. 創(chuàng)建樣本數(shù)據(jù)
下面創(chuàng)建月牙形狀數(shù)據(jù)來看看層次聚類的各個策略之間的比較。
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
ax = plt.subplot()
X, y = make_moons(noise=0.05, n_samples=1000)
ax.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25, cmap=plt.cm.prism)
plt.show()
關于各種樣本數(shù)據(jù)的生成,可以參考:TODO
3. 模型訓練
用四種不同的策略來訓練上面月牙形狀的樣本數(shù)據(jù)。
from sklearn.cluster import AgglomerativeClustering
# 定義
regs = [
AgglomerativeClustering(linkage="ward"),
AgglomerativeClustering(linkage="complete"),
AgglomerativeClustering(linkage="single"),
AgglomerativeClustering(linkage="average"),
]
# 訓練模型
for reg in regs:
reg.fit(X, y)
fig, axes = plt.subplots(nrows=2, ncols=2)
fig.set_size_inches((10, 8))
# 繪制聚類之后的結果
axes[0][0].scatter(
X[:, 0], X[:, 1], marker="o", c=regs[0].labels_, s=25, cmap=plt.cm.prism
)
axes[0][0].set_title("ward 策略")
axes[0][1].scatter(
X[:, 0], X[:, 1], marker="o", c=regs[1].labels_, s=25, cmap=plt.cm.prism
)
axes[0][1].set_title("complete 策略")
axes[1][0].scatter(
X[:, 0], X[:, 1], marker="o", c=regs[2].labels_, s=25, cmap=plt.cm.prism
)
axes[1][0].set_title("single 策略")
axes[1][1].scatter(
X[:, 0], X[:, 1], marker="o", c=regs[3].labels_, s=25, cmap=plt.cm.prism
)
axes[1][1].set_title("average 策略")
plt.show()
從結果可以看出,single策略效果最好,它聚類的結果與原始數(shù)據(jù)的分類情況最為接近。
不過,這并不能說明single策略由于其它策略,只能說明single策略最適合上面的樣本數(shù)據(jù)。
4. 總結
層次聚類在許多場景中都得到了應用,例如圖像分割、文檔聚類、生物信息學中的基因聚類等。
它特別適合那些需要多層次結構的應用。
層次聚類的最大優(yōu)勢在于它提供了一種層次結構的聚類,這對于許多應用來說是非常自然的,它能夠展示數(shù)據(jù)在不同粒度下的聚類結果。
但它也存在一些缺點。
首先,它的計算復雜度相對較高,特別是當數(shù)據(jù)量很大時;
其次,一旦做出合并或分裂的決策,就不能撤銷,這可能導致錯誤的累積。
此外,確定何時停止合并或分裂也是一個挑戰(zhàn)。
總結
以上是生活随笔為你收集整理的【scikit-learn基础】--『监督学习』之 层次聚类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聊一聊为什么我要整合Microsoft.
- 下一篇: 网络-华为、思科交换机配置TFTP自动备