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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

聚类方法(Clustering)

發(fā)布時(shí)間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 聚类方法(Clustering) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 聚類(lèi)基本概念
      • 1.1 相似度、距離
      • 1.2 類(lèi)、簇
      • 1.3 類(lèi)之間的距離
    • 2. 層次聚類(lèi)
    • 3. K均值聚類(lèi)
      • 3.1 模型
      • 3.2 策略
      • 3.3 算法
      • 3.4 算法特性
    • 4. sklearn.cluster
      • 4.1 sklearn.cluster.KMeans k均值聚類(lèi)
      • 4.2 Hierarchical clustering 層次聚類(lèi)

  • 聚類(lèi):依據(jù)樣本特征的相似度或距離,將其歸并到若干個(gè)“類(lèi)”或“簇”的數(shù)據(jù)分析問(wèn)題

  • 聚類(lèi)目的:通過(guò)得到的類(lèi)或簇來(lái)發(fā)現(xiàn)數(shù)據(jù)的特點(diǎn)或?qū)?shù)據(jù)進(jìn)行處理,在數(shù)據(jù)挖掘、模式識(shí)別等領(lǐng)域有著廣泛的應(yīng)用

  • 聚類(lèi) 屬于無(wú)監(jiān)督學(xué)習(xí),因?yàn)橹皇歉鶕?jù)樣本的相似度或距離將其進(jìn)行歸類(lèi),而類(lèi)或簇事先并不知道

1. 聚類(lèi)基本概念

1.1 相似度、距離

  • 有多種相似度或距離的定義
  • 相似度直接影響聚類(lèi)的結(jié)果,其選擇很關(guān)鍵

閔可夫斯基距離dij=(∑k=1m∣xki?xkj∣p)1pd_{ij} = \bigg(\sum\limits_{k=1}^m |x_{ki} - x_{kj}|^p \bigg)^{\frac{1}{p}}dij?=(k=1m?xki??xkj?p)p1? , 距離越大,相似度越小
p=1p=1p=1, 曼哈頓距離
p=2p=2p=2, 歐式距離
p=∞p=\inftyp=, 切比雪夫距離,dij=max?k∣xki?xkj∣d_{ij} = \max\limits_k |x_{ki} - x_{kj}|dij?=kmax?xki??xkj?


馬哈拉諾比斯距離: 考慮各個(gè)分量(特征)之間的相關(guān)性,與各個(gè)分量的尺度無(wú)關(guān),距離越大,相似度越小

dij=[(xi?xj)TS?1(xi?xj)]1/2,S為樣本協(xié)方差矩陣d_{ij}=[(x_i-x_j)^TS^{-1}(x_i-x_j)]^{1/2}, \quad S 為樣本協(xié)方差矩陣dij?=[(xi??xj?)TS?1(xi??xj?)]1/2,S協(xié)
馬氏距離是歐氏距離的推廣。


相關(guān)系數(shù):其絕對(duì)值越接近1,越相似;越接近0,越不相似
rij=∑k=1m(xki?xˉi)(xkj?xˉj)[∑k=1m(xki?xˉi)2∑k=1m(xkj?xˉj)2]1/2r_{ij}=\frac{\sum\limits_{k=1}^m(x_{ki }- \bar x_i)(x_{kj}- \bar x_j)}{\bigg[\sum\limits_{k=1}^m(x_{ki }- \bar x_i)^2\sum\limits_{k=1}^m(x_{kj}- \bar x_j)^2 \bigg]^{1/2}}rij?=[k=1m?(xki??xˉi?)2k=1m?(xkj??xˉj?)2]1/2k=1m?(xki??xˉi?)(xkj??xˉj?)?


夾角余弦: 夾角余弦越接近于1,表示樣本越相似;越接近于0,表示樣本越不相似
sij=∑k=1mxkixkj[∑k=1mxki2∑k=1mxkj2]1/2s_{ij} = \frac{\sum\limits_{k=1}^m x_{ki}x_{kj}}{\bigg[ \sum\limits_{k=1}^m x_{ki}^2 \sum\limits_{k=1}^m x_{kj}^2\bigg]^{1/2}}sij?=[k=1m?xki2?k=1m?xkj2?]1/2k=1m?xki?xkj??

  • 從距離的角度看,A和B比A和C更相似
  • 從相關(guān)系數(shù)的角度看,A和C比A和B更相似
  • 進(jìn)行聚類(lèi)時(shí),選擇適合的距離或相似度非常重要

1.2 類(lèi)、簇

  • 聚類(lèi)得到的類(lèi)或簇,本質(zhì)是樣本的子集
  • 如果假定一個(gè)樣本只能屬于一個(gè)類(lèi),或類(lèi)的交集為空集,稱(chēng)為硬聚類(lèi)(hard clustering)
  • 如果一個(gè)樣本可以屬于多個(gè)類(lèi),或類(lèi)的交集不為空集,稱(chēng)為軟聚類(lèi)(soft clustering)
類(lèi)、簇定義
dij≤Td_{ij} \le Tdij?T ,最常用,且能推出下面的
1nG?1∑xj∈Gdij≤T\frac{1}{n_G-1}\sum\limits_{x_j \in G}d_{ij} \le TnG??11?xj?G?dij?T
1nG(nG?1)∑xi∈G∑xj∈Gdij≤T,dij≤V\frac{1}{n_G(n_G-1)}\sum\limits_{x_i \in G}\sum\limits_{x_j \in G}d_{ij} \le T ,\quad d_{ij} \le VnG?(nG??1)1?xi?G?xj?G?dij?T,dij?V

類(lèi)的特征:

  • 類(lèi)的均值(中心):xˉG=1nG∑i=1nGxi\bar x_G = \frac{1}{n_G}\sum\limits_{i=1}^{n_G}x_ixˉG?=nG?1?i=1nG??xi?
  • 類(lèi)的直徑:DG=max?xi,xj∈GdijD_G = \max\limits_{x_i,x_j \in G} d_{ij}DG?=xi?,xj?Gmax?dij?
  • 類(lèi)的樣本散布矩陣:AG=∑i=1nG(xi?xˉG)(xi?xˉG)TA_G=\sum\limits_{i=1}^{n_G}(x_i-\bar x_G)(x_i-\bar x_G)^TAG?=i=1nG??(xi??xˉG?)(xi??xˉG?)T
  • 類(lèi)的樣本協(xié)方差矩陣:SG=1m?1AG=1m?1∑i=1nG(xi?xˉG)(xi?xˉG)T,m樣本維數(shù)S_G=\frac{1}{m-1}A_G=\frac{1}{m-1}\sum\limits_{i=1}^{n_G}(x_i-\bar x_G)(x_i-\bar x_G)^T, m樣本維數(shù)SG?=m?11?AG?=m?11?i=1nG??(xi??xˉG?)(xi??xˉG?)T,m數(shù)

1.3 類(lèi)之間的距離

  • 最短距離或單連接:Dpq=min?{dij∣xi∈Gp,xj∈Gq}D_{pq} = \min \{d_{ij}|x_i \in G_p,x_j \in G_q\}Dpq?=min{dij?xi?Gp?,xj?Gq?}

  • 最長(zhǎng)距離或完全連接:Dpq=max?{dij∣xi∈Gp,xj∈Gq}D_{pq} = \max \{d_{ij}|x_i \in G_p,x_j \in G_q\}Dpq?=max{dij?xi?Gp?,xj?Gq?}

  • 中心距離:Dpq=dxˉpxˉqD_{pq} = d_{\bar x_p\bar x_q}Dpq?=dxˉp?xˉq??

  • 平均距離:Dpq=1npnq∑xi∈Gp∑xj∈GqdijD_{pq} = \frac{1}{n_p n_q}\sum\limits_{x_i \in G_p}\sum\limits_{x_j \in G_q}d_{ij}Dpq?=np?nq?1?xi?Gp??xj?Gq??dij?

2. 層次聚類(lèi)

  • 層次聚類(lèi) 假設(shè)類(lèi)別之間 存在層次結(jié)構(gòu),將樣本聚到層次化的類(lèi)中
  • 層次聚類(lèi):有聚合(agglomerative)或自下而上(bottom-up)聚類(lèi)、分裂(divisive)或自上而下(top-down)聚類(lèi) 兩種方法
  • 每個(gè)樣本只屬于 一個(gè)類(lèi),所以層次聚類(lèi)屬于 硬聚類(lèi)

聚合聚類(lèi):

  • 將每個(gè)樣本 各自分到一個(gè)類(lèi)
  • 之后將相距最近的兩類(lèi)合并,建立一個(gè)新的類(lèi)
  • 重復(fù)上一步直到滿足停止條件;得到層次化的類(lèi)別

分裂聚類(lèi):

  • 將所有樣本分到一個(gè)類(lèi)
  • 之后將已有類(lèi)中相距最遠(yuǎn)的樣本分到兩個(gè)新的類(lèi)
  • 重復(fù)上一步直到滿足停止條件;得到層次化的類(lèi)別。

聚合聚類(lèi)的具體過(guò)程如下:

  • 對(duì)給定的樣本集合,開(kāi)始將每個(gè)樣本分到一個(gè)類(lèi)
  • 按照一定規(guī)則,例如 類(lèi)間距離最小,將 最 滿足規(guī)則條件的兩個(gè)類(lèi)進(jìn)行合并
  • 反復(fù)上一步,每次減少一個(gè)類(lèi),直到滿足停止條件,如 所有樣本聚為一類(lèi)

聚合聚類(lèi)需要預(yù)先確定三要素:

  • (1)距離或相似度(閔可夫斯基距離、馬哈拉諾比斯距離、相關(guān)系數(shù)、夾角余弦)
  • (2)合并規(guī)則(類(lèi)間距離最小,可以是 最短距離、最長(zhǎng)距離、中心距離、平均距離)
  • (3)停止條件(類(lèi)的個(gè)數(shù)達(dá)到閾值(極端情況類(lèi)的個(gè)數(shù)是1)、類(lèi)的直徑超過(guò)閾值)

3. K均值聚類(lèi)

k均值 聚類(lèi):是基于樣本集合劃分的聚類(lèi)算法

  • 將樣本集合劃分為 k 個(gè)子集,構(gòu)成 k 個(gè)類(lèi)
  • 將 n 個(gè)樣本分到 k 個(gè)類(lèi)中,每個(gè)樣本到其所屬類(lèi)的中心距離最小
  • 每個(gè)樣本只能屬于一個(gè)類(lèi),是硬聚類(lèi)

3.1 模型

n 個(gè)樣本 劃分成 k 個(gè)類(lèi),類(lèi)之間的交集為空(硬聚類(lèi))

3.2 策略

策略:通過(guò)損失函數(shù)的最小化 選取 最優(yōu)的劃分 或 函數(shù) C?C^*C?

  • 樣本距離:歐氏距離,d(xi,xj)=∣∣xi?xj∣∣2d(x_i,x_j)=||x_i-x_j||^2d(xi?,xj?)=xi??xj?2
  • 損失函數(shù):樣本與其類(lèi)屬的中心的距離總和,
    W(C)=∑l=1k∑C(i)=l∣∣xi?xˉl∣∣2W(C) = \sum\limits_{l=1}^k\sum\limits_{C(i)=l} ||x_i-\bar x_l||^2W(C)=l=1k?C(i)=l?xi??xˉl?2
  • 本質(zhì):求解最優(yōu)化問(wèn)題
    C?=arg?min?CW(C)=arg?min?C∑l=1k∑C(i)=l∣∣xi?xˉl∣∣2C^* = \argmin\limits_C W(C) = \argmin\limits_C \sum\limits_{l=1}^k\sum\limits_{C(i)=l} ||x_i-\bar x_l||^2C?=Cargmin?W(C)=Cargmin?l=1k?C(i)=l?xi??xˉl?2

n 個(gè)樣本 劃分成 k 個(gè)類(lèi),組合數(shù)是指數(shù)級(jí)的,其最優(yōu)解求解是 NP 困難問(wèn)題,常用迭代求解

3.3 算法

k均值聚類(lèi) 的算法是迭代的過(guò)程,每次迭代包括兩個(gè)步驟

  • 首先隨機(jī)選擇 k 個(gè)類(lèi)的中心(選 k 個(gè)樣本),將其余樣本逐個(gè)指派到與其最近的中心的類(lèi)中,得到一個(gè)聚類(lèi)結(jié)果
  • 然后更新每個(gè)類(lèi)的樣本的均值,作為類(lèi)的新的中心
  • 重復(fù)以上步驟,直到收斂

3.4 算法特性

1. 總體特點(diǎn)

  • 基于劃分的聚類(lèi)方法
  • 類(lèi)別數(shù) k 事先指定
  • 歐氏距離平方表示樣本之間的距離
  • 以中心或樣本的 均值 表示類(lèi)別
  • 以 樣本 和 其所屬類(lèi)的中心 之間的 距離的總和 為最優(yōu)化目標(biāo)函數(shù)
  • 得到的類(lèi)別是平坦的、非層次化的
  • 是迭代算法,不能 保證得到全局最優(yōu)

2. 收斂性

  • k均值 聚類(lèi)屬于啟發(fā)式方法,不能 保證收斂到全局最優(yōu)
  • 初始中心的選擇 會(huì) 直接影響聚類(lèi)結(jié)果
  • 類(lèi)中心在聚類(lèi)的過(guò)程中會(huì)發(fā)生移動(dòng),但是往往不會(huì)移動(dòng)太大,因?yàn)樵诿恳徊?#xff0c;樣本被分到與其最近的中心的類(lèi)中

3. 初始類(lèi)的選擇

  • 選擇不同初始中心,會(huì)得到不同的聚類(lèi)結(jié)果
  • 初始中心的選擇,比如 可以用層次聚類(lèi)對(duì)樣本進(jìn)行聚類(lèi),得到k個(gè)類(lèi)時(shí)停止。然后從每個(gè)類(lèi)中選取一個(gè)與中心距離最近的點(diǎn)

4. 類(lèi)別數(shù)k的選擇

  • k 值需要預(yù)先指定,而在實(shí)際應(yīng)用中最優(yōu)k值是不知道的
  • 解決方法:嘗試不同的k值,檢驗(yàn)聚類(lèi)的質(zhì)量,推測(cè)最優(yōu)的k值
  • 聚類(lèi)結(jié)果的質(zhì)量:可以用類(lèi)的平均直徑來(lái)衡量
  • 一般地,類(lèi)別數(shù)變小時(shí),平均直徑會(huì)增加;類(lèi)別數(shù)變大超過(guò)某個(gè)值以后,平均直徑會(huì)不變;而這個(gè)值正是最優(yōu)的k值
  • 可以采用二分查找,快速找最優(yōu)的k值

4. sklearn.cluster

sklearn.cluster 官網(wǎng)介紹了10種聚類(lèi)算法。

4.1 sklearn.cluster.KMeans k均值聚類(lèi)

sklearn.cluster.KMeans 官網(wǎng)參數(shù)介紹

class sklearn.cluster.KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=None, algorithm='auto')

主要參數(shù):

  • n_clusters, default=8
    類(lèi)的個(gè)數(shù),即k值

  • init:{‘k-means++’, ‘random’}
    初始中心選擇,默認(rèn)選項(xiàng)更好

  • n_init, default=10
    多次初始化,然后聚類(lèi),最后取最好的聚類(lèi)結(jié)果

  • max_iter, default=300
    單次聚類(lèi)的最大迭代次數(shù)

  • tol, default=1e-4
    迭代停止精度

  • precompute_distances:‘a(chǎn)uto’ or bool, default=’auto’
    預(yù)先計(jì)算距離

  • algorithm:{“auto”, “full”, “elkan”}, default=”auto”
    迭代算法.
    The classical EM-style algorithm is “full”.
    The “elkan” variation is more efficient by using the triangle inequality, but currently doesn’t support sparse data.
    “auto” chooses “elkan” for dense data and “full” for sparse data.


代碼示例:

from sklearn.cluster import KMeans import numpy as np # 書(shū)上例題 X = np.array([[0, 2], [0, 0], [1, 0], [5, 0], [5, 2]]) kms = KMeans(n_clusters=2).fit(X) print(kms.labels_) print(kms.cluster_centers_)

運(yùn)行結(jié)果:

[0 0 0 1 1] [[0.33333333 0.66666667][5. 1. ]]

4.2 Hierarchical clustering 層次聚類(lèi)

sklearn.cluster.AgglomerativeClustering

class sklearn.cluster.AgglomerativeClustering(n_clusters=2, affinity='euclidean', memory=None, connectivity=None, compute_full_tree='auto', linkage='ward', distance_threshold=None)

官方代碼示例

總結(jié)

以上是生活随笔為你收集整理的聚类方法(Clustering)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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