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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

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

空間聚類算法是數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)領(lǐng)域中的一種重要技術(shù)。

本篇介紹的基于密度的空間聚類算法的概念可以追溯到1990年代初期。
隨著數(shù)據(jù)量的增長和數(shù)據(jù)維度的增加,基于密度的算法逐漸引起了研究者的關(guān)注。
其中,DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是最具代表性的算法之一。

基于密度的空間聚類算法在許多領(lǐng)域都有應(yīng)用,例如圖像處理、生物信息學(xué)、社交網(wǎng)絡(luò)分析等。
在圖像處理中,該算法可以用于檢測圖像中的密集區(qū)域,用于識(shí)別物體或形狀。

1. 算法概述

DBSCAN算法的基本思想是,對于給定的數(shù)據(jù)集,基于數(shù)據(jù)點(diǎn)的密度進(jìn)行聚類。
在密度高的區(qū)域,數(shù)據(jù)點(diǎn)更為集中,而密度低的區(qū)域數(shù)據(jù)點(diǎn)較為稀疏。
基于密度的算法能夠發(fā)現(xiàn)任意形狀的簇,并且對噪聲有較好的魯棒性。

算法的核心在于:

  1. 定義鄰域:對于數(shù)據(jù)集中的每個(gè)點(diǎn),其鄰域是由距離該點(diǎn)在一定半徑(通常稱為Eps)內(nèi)的所有點(diǎn)組成的
  2. 定義密度:一個(gè)點(diǎn)的密度是其鄰域內(nèi)的點(diǎn)的數(shù)量。如果一個(gè)點(diǎn)的密度超過某個(gè)閾值(通常稱為MinPts),則該點(diǎn)被視為核心點(diǎn)
  3. 尋找簇:從每個(gè)核心點(diǎn)出發(fā),找到所有密度可達(dá)的點(diǎn),即這些點(diǎn)通過一系列核心點(diǎn)可以與該核心點(diǎn)相連,這些點(diǎn)形成一個(gè)簇
  4. 標(biāo)記噪聲點(diǎn):不屬于任何簇的點(diǎn)被標(biāo)記為噪聲點(diǎn)

2. 創(chuàng)建樣本數(shù)據(jù)

下面,創(chuàng)建三種不同的樣本數(shù)據(jù),來測試DBSCAN的聚類效果。

from sklearn.datasets import make_blobs, make_moons, make_circles

fig, axes = plt.subplots(nrows=1, ncols=3)
fig.set_size_inches((9, 3))

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,
)

X_blob, y_blob = make_blobs(n_samples=1000, centers=3)
axes[2].scatter(
    X_blob[:, 0],
    X_blob[:, 1],
    marker="o",
    c=y_blob,
    s=25,
    cmap=plt.cm.autumn,
)

plt.show()

3. 模型訓(xùn)練

scikit-learnDBSCAN模型來訓(xùn)練,這個(gè)模型主要的參數(shù)有兩個(gè):

  1. eps (eps):這個(gè)參數(shù)表示鄰域的大小,或者說是鄰域的半徑。具體來說,對于數(shù)據(jù)集中的每個(gè)點(diǎn),其 eps-鄰域包含了所有與該點(diǎn)的距離小于或等于 eps 的點(diǎn)。
  2. min_samples (minPts):在給定 eps-鄰域內(nèi),一個(gè)點(diǎn)需要有多少個(gè)鄰居才能被視為核心點(diǎn)。

通過調(diào)節(jié)這2個(gè)參數(shù),基于上面創(chuàng)建的樣本數(shù)據(jù),訓(xùn)練效果如下:

from sklearn.cluster import DBSCAN

# 定義
regs = [
    DBSCAN(min_samples=2, eps=0.1),
    DBSCAN(min_samples=2, eps=0.2),
    DBSCAN(min_samples=3, eps=2),
]

# 訓(xùn)練模型
regs[0].fit(X_moon, y_moon)
regs[1].fit(X_circle, y_circle)
regs[2].fit(X_blob, y_blob)

fig, axes = plt.subplots(nrows=1, ncols=3)
fig.set_size_inches((9, 3))

# 繪制聚類之后的結(jié)果
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,
)

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

plt.show()

針對3種不同的樣本數(shù)據(jù),調(diào)節(jié)參數(shù)之后,聚類的效果還不錯(cuò)。
感興趣的話,可以試試修改上面代碼中的DBSCAN定義部分的參數(shù):

# 定義
regs = [
    DBSCAN(min_samples=2, eps=0.1),
    DBSCAN(min_samples=2, eps=0.2),
    DBSCAN(min_samples=3, eps=2),
]

調(diào)節(jié)不同的 min_sampleeps,看看不同的聚類效果。

4. 總結(jié)

總的來說,基于密度的空間聚類算法是一種強(qiáng)大的工具,能夠從數(shù)據(jù)中提取有價(jià)值的信息。
但是,如同所有的算法一樣,它也有其局限性,需要在合適的應(yīng)用場景中使用,才能達(dá)到最佳的效果。

它的優(yōu)勢主要在于:

  1. 能夠發(fā)現(xiàn)任意形狀的簇
  2. 對噪聲和異常值有較好的魯棒性
  3. 不需要提前知道簇的數(shù)量

不足之處則在于:

  1. 對于高維數(shù)據(jù),密度計(jì)算可能會(huì)變得非常復(fù)雜和計(jì)算量大
  2. 算法的性能高度依賴于密度閾值的選擇
  3. 在處理密度變化較大的數(shù)據(jù)時(shí)可能效果不佳

總結(jié)

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

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