在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

介紹一種基于最小化平方誤差的聚類算法

冬至子 ? 來源:數據之書 ? 作者:databook ? 2023-08-09 16:01 ? 次閱讀

物以類聚, 「聚類算法 使用最優化的算法來計算數據點之間的距離,并將它們分組到最近的簇中。

Scipy的聚類模塊中,進一步分為兩個聚類子模塊:

  1. vq(vector quantization):提供了一種基于向量量化的聚類算法。

「vq模塊」 支持多種向量量化算法,包括K-meansGMM(高斯混合模型)和WAVG(均勻分布)。

  1. hierarchy:提供了一種基于層次聚類的聚類算法。

「hierarchy模塊」 支持多種層次聚類算法,包括wardelbowcentroid

總之,Scipy中的vqhierarchy模塊都提供了一種基于最小化平方誤差的聚類算法,
它們可以幫助我們快速地對大型數據集進行分組,從而更好地理解數據的分布和模式。

1. vq 聚類

vq聚類算法的原理是將數據點映射到一組稱為“超空間”的低維向量空間中,然后將它們分組到最近的簇中。

首先,我們創建一些測試數據:(創建3個類別的測試數據)

import numpy as np
import matplotlib.pyplot as plt

data1 = np.random.randint(0, 30, (100, 3))
data2 = np.random.randint(30, 60, (100, 3))
data3 = np.random.randint(60, 100, (100, 3))

data = np.concatenate([data1, data2, data3])

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.scatter(data[:, 0], data[:, 1], data[:, 2])
plt.show()

圖片

data1data2data3分布在3個區域,
每個數據集有 「100條」 數據,每條數據有 「3個屬性」

1.1. 白化數據

「聚類」 之前,一般會對數據進行 「白化」 ,所謂 「白化數據」 ,是指將數據集中的每個特征或每個樣本的值都統一為同一個范圍。
這樣做的目的是為了消除特征之間的量綱和數值大小差異,使得不同特征具有相似的重要性,從而更容易進行聚類算法。

在聚類之前對數據進行 「白化處理」 也被稱為 「預處理」 階段。

from scipy.cluster.vq import whiten

# 白化數據
normal_data = whiten(data)

# 繪制白化后的數據
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.scatter(normal_data[:, 0], normal_data[:, 1], normal_data[:, 2])
plt.show()

圖片

從圖中可以看出,數據的分布情況沒有改變,只是數據的范圍從0~100變成0.0~3.5
這就是白化的效果。

1.2. K-means

白化之后,就可以用K-meas方法來進行聚類運算了。
scipyvq模塊中有2個聚類函數:kmeanskmeans2

kmeans函數最少只要傳入兩個 「參數」 即可:

  1. 需要聚類的數據,也就是上一步白化的數據
  2. 聚類的數目

「返回值」 有2部分:

  1. 各個聚類的中心
  2. 各個點距離聚類中心點的歐式距離的平均值
from scipy.cluster.vq import kmeans 

center_points, distortion = kmeans(normal_data, 3)
print(center_points)
print(distortion)
# 運行結果
[[1.632802   1.56429847 1.51635413]
 [0.48357948 0.55988559 0.48842058]
 [2.81305235 2.84443275 2.78072325]]
0.5675874109728244

把三個聚類點繪制在圖中來看更加清楚:

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.scatter(normal_data[:, 0], 
           normal_data[:, 1], 
           normal_data[:, 2])
ax.scatter(
    center_points[:, 0],
    center_points[:, 1],
    center_points[:, 2],
    color="r",
    marker="^",
    linewidths=5,
)

plt.show()

圖片

圖中3個紅色的點就是聚類的中心點。

1.3. K-means2

kmeans2函數使用起來和kmeans類似,但是返回值有區別,
kmeans2的返回的是:

  1. 聚類的中心點坐標
  2. 每個聚類中所有點的索引
from scipy.cluster.vq import kmeans2

center_points, labels = kmeans2(normal_data, 3)
print(center_points)
print(labels)
# 運行結果
[[2.81305235 2.84443275 2.78072325]
 [1.632802   1.56429847 1.51635413]
 [0.48357948 0.55988559 0.48842058]]
[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 ... ...
 0 0 0 0]

可以看出,計算出的聚類中心點center_pointskmeans一樣(只是順序不一樣),
labels0,1,2三種值,代表normal_data中每個點屬于哪個分類。

kmeans2除了返回了聚類中心點,還有每個數據點屬于哪個聚類的信息,
所以我們繪圖時,可以將屬于不同聚類的點標記不同的顏色。

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
arr_data = [[], [], []]
for idx, nd in enumerate(normal_data):
    arr_data[labels[idx]].append(nd)

data = np.array(arr_data[0])
ax.scatter(data[:, 0], data[:, 1], data[:, 2], color='lightblue')
data = np.array(arr_data[1])
ax.scatter(data[:, 0], data[:, 1], data[:, 2], color='lightgreen')
data = np.array(arr_data[2])
ax.scatter(data[:, 0], data[:, 1], data[:, 2], color='lightyellow')

ax.scatter(
    center_points[:, 0],
    center_points[:, 1],
    center_points[:, 2],
    color="r",
    marker="^",
    linewidths=5,
)

plt.show()

圖片

2. hierarchy 聚類

hierarchy聚類算法的步驟比較簡單:

  1. 將每個樣本視為一個簇
  2. 計算各個簇之間的距離,將距離最近的兩個簇合并為一個簇
  3. 重復第二個步驟,直至到最后一個簇
from scipy.cluster.hierarchy import ward, fcluster, dendrogram
from scipy.spatial.distance import pdist

# 計算樣本數據之間的距離
# normal_data是之前白化之后的數據
dist = pdist(normal_data)

# 在距離上創建Ward連接矩陣
Z = ward(dist)

# 層次聚類之后的平面聚類
S = fcluster(Z, t=0.9, criterion='distance')
print(S)
# 運行結果
[20 26 23 18 18 22 18 28 21 22 28 26 27 27 20 17 23 20 26 23 17 25 20 22
 ... ...
  5 13  3  4  2  9  9 13 13  8 11  6]

返回的S中有 「300個數據」 ,和normal_data中的數據一樣多,S中數值接近的點,分類越接近。

從數值看聚類結果不那么明顯,scipy的層次聚類提供了一個dendrogram方法,內置了matpltlib的功能,
可以把層次聚類的結果用圖形展示出來。

P = dendrogram(Z, no_labels=True)
plt.show()

圖片
從這個圖可以看出每個數據分別屬于哪個層次的聚類。
最底層的葉子節點就是normal_data中的各個數據,這些數據的索引信息可以從 P 中獲取。

# P是一個字典,包含聚類之后的信息
# key=ivl 是圖中最底層葉子節點在 normal_data 中的索引
print(P["ivl"])
# 運行結果
['236', '269', '244', ... ... '181', '175', '156', '157']

3. 總結

聚類分析可以幫助我們發現數據集中的內在結構、模式和相似性,從而更好地理解數據。
使用Scipy庫,可以幫助我們高效的完成數據的聚類分析,而不用去具體了解聚類分析算法的實現方式。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19714

    瀏覽量

    232723
  • 向量機
    +關注

    關注

    0

    文章

    166

    瀏覽量

    21074
  • GMM
    GMM
    +關注

    關注

    0

    文章

    5

    瀏覽量

    7340
收藏 人收藏

    評論

    相關推薦

    一種基于GiST的層次算法

    層次方法是聚類分析的個重要方法。該文利用通用搜索樹實現了一種新的層次
    發表于 04-23 10:10 ?24次下載

    一種基于層次的屬性全局離散算法

    本文摒棄了以往利用斷點集來進行離散算法思想,提出了一種新的基于粗糙集和分裂的層次的全局離散
    發表于 12-29 17:15 ?3次下載

    一種改進的FCM算法及其在赤潮預測中的應用

    一種改進的FCM算法及其在赤潮預測中的應用:針對傳統FCM算法的不足,文中提出了一種改進的F
    發表于 03-15 15:38 ?26次下載

    一種原型模糊的初始方法

    一種原型模糊的初始方法 模糊是非監督
    發表于 10-21 16:02 ?1079次閱讀

    一種有效的多關系算法

    一種有效的多關系算法_鄧左祥
    發表于 01-03 15:24 ?0次下載

    一種改進的BIRCH算法方法

    為解決傳統BIRCH算法對數據對象輸入順序敏感、結果不穩定的問題,提出了一種改進的BIRCH算法。該
    發表于 11-10 15:52 ?1次下載
    <b class='flag-5'>一種</b>改進的BIRCH<b class='flag-5'>算法</b><b class='flag-5'>聚</b><b class='flag-5'>類</b>方法

    一種改進的凝聚型層次算法

    在比特流未知協議識別過程中,針對如何將得到的多協議數據幀分為單協議數據幀這問題,提出了一種改進的凝聚型層次算法。該
    發表于 11-21 08:58 ?0次下載
    <b class='flag-5'>一種</b>改進的凝聚型層次<b class='flag-5'>聚</b><b class='flag-5'>類</b><b class='flag-5'>算法</b>

    K均值算法的MATLAB實現

    K-means算法是最簡單的一種算法算法的目的是使各個樣本與所在
    發表于 12-01 14:07 ?2.1w次閱讀
    K均值<b class='flag-5'>聚</b><b class='flag-5'>類</b><b class='flag-5'>算法</b>的MATLAB實現

    一種新的人工魚群混合算法

    人工魚群是一種隨機搜索優化算法,具有較快的收斂速度,對問題的機理模型與描述無嚴格要求,具有廣泛的應用范圍。本文在該算法的基礎上,結合傳統的K-means
    發表于 12-04 16:18 ?0次下載

    一種新的基于流行距離的譜算法

    本文提出了一種新的基于流行距離的譜算法,這是一種新型的聚類分析算法。不僅能夠對任意的非規則形
    發表于 12-07 14:53 ?3次下載

    基于最小重構誤差向量圖像檢索算法

    針對局部聚合描述符向量( VLAD)模型中對特征軟量化時權重系數的取值不確定性和特征量化誤差較大問題,提出一種具有最小重構誤差的權重系數分配算法
    發表于 12-18 09:56 ?0次下載
    基于<b class='flag-5'>最小</b>重構<b class='flag-5'>誤差</b>向量圖像檢索<b class='flag-5'>算法</b>

    一種基于MapReduce的圖結構算法

    圖結構(SCAN)是一種著名的基于密度的圖算法。該
    發表于 12-19 11:05 ?0次下載
    <b class='flag-5'>一種</b>基于MapReduce的圖結構<b class='flag-5'>聚</b><b class='flag-5'>類</b><b class='flag-5'>算法</b>

    一種改進的聯合相似度推薦算法

    協同過濾算法由于推薦效果良好,而被廣泛應用于推薦領域,但其在數據稀疏及冷啟動的情況下會導致推薦效果明顯下降。在數據稀疏情況下,為充分利用用戶的歷史信息以提髙算法的推薦精度,提出一種改進的
    發表于 03-18 11:17 ?10次下載
    <b class='flag-5'>一種</b>改進的<b class='flag-5'>聚</b><b class='flag-5'>類</b>聯合相似度推薦<b class='flag-5'>算法</b>

    一種自適應的關聯融合算法

    為解決傳統算法多數需要預先設定聚參數且無法有效識別異常點和噪聲點的問題,提出一種自適應的關聯融合
    發表于 04-01 16:16 ?13次下載
    <b class='flag-5'>一種</b>自適應的關聯融合<b class='flag-5'>聚</b><b class='flag-5'>類</b><b class='flag-5'>算法</b>

    一種基于分塊集成的圖像算法

    的圖像算法( Block integration Based Image Clustering,BI-CⅠ。首先,將圖像數據分為若干矩陣塊;然后,利用核范數矩陣回歸構造基于某矩陣塊的系數矩陣,同時提岀了
    發表于 05-29 14:20 ?3次下載
    主站蜘蛛池模板: 久久精品久久久 | 一色屋精品免费视频 视频 一色屋免费视频 | 久久久久88色偷偷 | 欧美在线色视频 | 91p0rn永久备用地址二 | 中韩日欧美电影免费看 | 色综合久久久久久久久五月 | 哟交小u女国产精品视频 | 日本一区二区三区免费看 | 4438x色 | 久久99免费 | 欧美成人全部费免网站 | 最黄毛片 | 6080国产午夜精品 | 日本高免费观看在线播放 | 色视频在线观看免费 | 色综合激情网 | 一级毛片日韩a欧美 | 黄视频免费网站 | 很很鲁在线视频播放影院 | 亚洲国产福利精品一区二区 | 中文字幕亚洲一区二区v@在线 | 女人张开腿让男人捅爽 | 亚洲国产成人精品女人久久久 | 九七婷婷狠狠成人免费视频 | 成人亚洲电影 | 一国产大片在线观看 | 四虎永久精品免费观看 | 天堂免费视频 | 精品国内一区二区三区免费视频 | 免费网站你懂得 | 免费看成年视频网页 | 一二三区在线观看 | 日本黄色激情视频 | 亚洲人成网站在线 | 国产午夜精品一区二区 | 日本欧美一区二区 | 天堂视频网 | 在线免费观看黄色小视频 | 免费网站直接看 | 在线免费黄 |