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

歡迎訪問 生活随笔!

生活随笔

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

windows

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

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

譜聚類算法基于圖論,它的起源可以追溯到早期的圖分割文獻。
不過,直至近年來,受益于計算機計算能力的提升,譜聚類算法才得到了廣泛的研究和關注。

譜聚類被廣泛應用于圖像分割、社交網絡分析、推薦系統、文本聚類等領域。
例如,在圖像分割中,譜聚類可以有效地將圖像劃分為背景和前景;
在社交網絡分析中,它可以識別出不同的社區結構。

1. 算法概述

譜聚類的基本原理是將數據點視為圖中的頂點,根據數據點之間的相似性構建圖的邊。
它首先計算圖的拉普拉斯矩陣的特征向量,然后利用這些特征向量進行聚類。
這種方法能夠捕捉到數據的非線性結構,因此在許多應用中表現優異。

所謂拉普拉斯矩陣,是一種用于表示一個圖的矩陣形式。
對于給定的一個有\(n\)個頂點的圖\(G\),它的拉普拉斯矩陣定義為\(L=D-A\)
其中\(D\)為圖的度矩陣,\(A\)為圖的鄰接矩陣。

2. 創建樣本數據

為驗證譜聚類的效果,用scikit-learn中的樣本生成器創建2個非線性結構的數據集。

from sklearn.datasets import make_moons, make_circles

fig, axes = plt.subplots(nrows=1, ncols=2)
fig.set_size_inches((8, 4))

X_moon, y_moon = make_moons(noise=0.05, n_samples=1000)
axes[0].scatter(X_moon[:, 0], X_moon[:, 1], marker="o", c=y_moon, s=25, cmap=plt.cm.spring)

X_circle, y_circle = make_circles(noise=0.05, factor=0.5, n_samples=1000)
axes[1].scatter(X_circle[:, 0], X_circle[:, 1], marker="o", c=y_circle, s=25, cmap=plt.cm.winter)

plt.show()


一個交錯的月牙形式,一個是同心圓形式,都是很難線性分割的數據集。

3. 模型訓練

首先,用默認的參數訓練看看效果:

from sklearn.cluster import SpectralClustering

# 定義
regs = [
    SpectralClustering(n_clusters=2),
    SpectralClustering(n_clusters=2),
]

# 訓練模型
regs[0].fit(X_moon, y_moon)
regs[1].fit(X_circle, y_circle)

fig, axes = plt.subplots(nrows=1, ncols=2)
fig.set_size_inches((8, 4))

# 繪制聚類之后的結果
axes[0].scatter(
    X_moon[:, 0], X_moon[:, 1], marker="o", c=regs[0].labels_, s=25, cmap=plt.cm.spring
)

axes[1].scatter(
    X_circle[:, 0], X_circle[:, 1], marker="o", c=regs[1].labels_, s=25, cmap=plt.cm.winter
)

plt.show()


從圖中可以看出,聚類的效果不是很好,從顏色上看,與原始數據的類別相比差距較大。

接下來,調整下SpectralClustering模型的affinity參數,
這個參數的作用是定義數據點之間的相似度矩陣的計算方法。
affinity參數的可選值常用的有兩個:

  1. nearest_neighbors:通過計算最近鄰圖來構建親和矩陣
  2. rbf:使用徑向基函數 (RBF) 內核構建親和矩陣。

默認的值是 rbf,下面我們試試nearest_neighbors方式的聚類效果。
將上面的代碼中 regs 的定義部分換成如下代碼:

regs = [
    SpectralClustering(n_clusters=2, affinity="nearest_neighbors"),
    SpectralClustering(n_clusters=2, affinity="nearest_neighbors"),
]


修改參數之后的聚類效果與原始數據就非常接近了。

4. 總結

簡而言之,譜聚類是一個在圖上進行聚類的方法,它試圖找到圖的最佳切割,使得同一簇內的邊的權重盡可能大,而不同簇之間的邊的權重盡可能小。

這種聚類算法的優勢有:

  1. 可以捕獲數據的非線性結構
  2. 對噪聲和異常值相對魯棒
  3. 不需要明確的形狀假設,適用于各種形狀的簇

它的局限性有:

  1. 計算復雜度相對較高,尤其是對于大規模數據
  2. 需要提前確定簇的數量,這在很多實際應用中是一個挑戰
  3. 對于高維數據,可能存在“維度詛咒”問題,盡管可以通過降維緩解,但增加了計算復雜度

總結

以上是生活随笔為你收集整理的【scikit-learn基础】--『监督学习』之 谱聚类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。