日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【scikit-learn基础】--『监督学习』之 层次聚类

發(fā)布時間:2024/1/16 windows 32 coder
生活随笔 收集整理的這篇文章主要介紹了 【scikit-learn基础】--『监督学习』之 层次聚类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

層次聚類算法是機器學習中常用的一種無監(jiān)督學習算法,它用于將數(shù)據(jù)分為多個類別或層次。
該方法在計算機科學、生物學、社會學等多個領域都有廣泛應用。

層次聚類算法的歷史可以追溯到上世紀60年代,當時它主要被用于社會科學中。
隨著計算機技術的發(fā)展,這種方法在90年代得到了更為廣泛的應用。

1. 算法概述

層次聚類的基本原理是創(chuàng)建一個層次的聚類,通過不斷地合并或分裂已存在的聚類來實現(xiàn)。
它分為兩種策略:

  1. 凝聚策略:初始時將每個點視為一個簇,然后逐漸合并相近的簇
  2. 分裂策略:開始時將所有點視為一個簇,然后逐漸分裂

scikit-learn中,層次聚類的策略有4種

  1. ward:默認策略,也就是最小方差法。它傾向于合并那些使得合并后的簇內(nèi)部方差最小的兩個簇
  2. complete:計算兩個簇之間的距離時,考慮兩個簇中距離最遠的兩個樣本之間的距離
  3. average:計算兩個簇之間的距離時,考慮兩個簇中所有樣本之間距離的平均值
  4. 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。