欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:機(jī)器學(xué)習(xí)第九章-聚類

柚子快報(bào)邀請(qǐng)碼778899分享:機(jī)器學(xué)習(xí)第九章-聚類

http://yzkb.51969.com/

目錄

9.1聚類任務(wù)

9.2性能度量

9.3距離計(jì)算

9.4圓形聚類

9.4.1k均值算法

9.4.2學(xué)習(xí)向量量化法(LVQ)

9.4.3高斯混合聚類

9.5密度聚類

?9.6層次聚類

9.1聚類任務(wù)

????????在"無(wú)監(jiān)督學(xué)習(xí)"中研究最多、應(yīng)用最廣的是"聚類" .聚類試圖將數(shù)據(jù)集中的樣本劃分為若干個(gè)通常是不相交的子集,每個(gè)子集稱為一個(gè)"簇" .聚類過程僅能自動(dòng)形成簇結(jié)構(gòu),簇所對(duì)應(yīng)的概念語(yǔ)義需由使用者來(lái)把握和命名。聚類的結(jié)果可用包含m個(gè)元素的簇標(biāo)記向量 λ=(λ1;λ2;... ;λm) 表示.

9.2性能度量

????????聚類性能度量亦稱聚類"有效性指標(biāo)"聚類性能度量大致有兩類. 一類是將聚類結(jié)果與某個(gè)"參考模型" 進(jìn)行比較,稱為"外部指標(biāo)" ; 另一類是直接考察聚類結(jié)果而不利用任何參考模型,稱為"內(nèi)部指標(biāo)" 。

????????聚類性能度量外部指標(biāo)有如下:

Jaccard 系數(shù)(計(jì)算聚類結(jié)果與參考模型之間的交集與并集的比值)

:?

FM 指數(shù)(計(jì)算聚類結(jié)果與參考模型之間的精確度和召回率的調(diào)和平均數(shù))

:? ? ? ? ? ? ? ? ? ? ? ? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Rand 指數(shù)(計(jì)算聚類結(jié)果與參考模型之間的一致決策和不一致決策的比值)

??

上述性能度量的結(jié)果值均在

[0

1]

區(qū)間,值越大越好.

????????

聚類性能度量?jī)?nèi)部指標(biāo)有如下:

DB 指數(shù) (通過衡量各個(gè)簇的緊密度和分離度來(lái)評(píng)估聚類的效果):?

?????????????????????????????????????????????????????

Du

nn?指數(shù)(通過比較簇內(nèi)的緊密度和簇間的分離度來(lái)評(píng)估聚類的質(zhì)量):

???????????????????????????????????????????????????????????

DBI

的值越小越好,而

DI

則相反,值越大越好.

9.3距離計(jì)算

????????對(duì)函數(shù) dist(. ,.),若它是一個(gè)"距離度量" (distance measure) ,則需滿足一 些基本性質(zhì):

????????非負(fù)性: dist(Xi

,

Xj) >=

?

0 ;

????????同一性: dist(Xi

,

Xj)=0當(dāng)且僅當(dāng) Xi

=

Xj ;

????????對(duì)稱性: dist(Xi

,

Xj)) =

dist(xj

,

Xi)

;

????????直遞性: dist(Xi

,

Xj)

<=

dist(Xi

,

Xk) + dist(Xk,Xj)

最常用的是 "閔可夫斯基距離":? ? ? ?,p>=1

p=2

時(shí),閔可夫斯基距離即歐氏距離:

p=1

時(shí),閔可夫斯基距離即曼哈頓距離:

????????我們常將屬性劃分為"連續(xù)屬性"

和"離散屬性"

,前者在定義域上有無(wú)窮多個(gè)可能的取值,后者在定義域上是有限個(gè)取值.

????????對(duì)無(wú)序?qū)傩钥刹捎?VDM,表示在屬性 u上取值為a 的樣本數(shù),

表示在第i個(gè)樣本簇

中在屬性u(píng)

上取值為a

的樣本數(shù) ,k

為樣本簇?cái)?shù),則屬性u(píng)

上兩個(gè)離散值a,b之間的 VDM

距離為:

????????????????????????

????????????????????????????????

????????

當(dāng)樣本空間中不同屬性的重要

性不同時(shí)

,可使用"

加權(quán)距

離",

以加權(quán)閔

可夫

斯基距離為

例:

???????????????????????

????????

9.4圓形聚類

????????算法先對(duì)原型進(jìn)行初始化,然后對(duì)原型進(jìn)行迭代更新求解.采用不同的原型表示、不同的求解方式,將產(chǎn)生不同的算法.

9.4.1k均值算法

????????給定樣本集 ?"k 均值" 算法針對(duì)聚類所得簇劃分 最小化平方誤差:

????????????????????????????????????????

? ? ? ? 步驟如下:

選擇K值:確定要分成的簇的數(shù)量K。 初始化中心:隨機(jī)選擇K個(gè)點(diǎn)作為初始簇中心(質(zhì)心)。 分配簇:將每個(gè)數(shù)據(jù)點(diǎn)分配到距離其最近的簇中心所屬的簇。 更新中心:重新計(jì)算每個(gè)簇的質(zhì)心,質(zhì)心是簇中所有點(diǎn)的均值。 重復(fù)迭代:重復(fù)步驟3和步驟4,直到簇中心不再發(fā)生顯著變化,或者達(dá)到預(yù)設(shè)的迭代次數(shù)。 停止:算法結(jié)束時(shí),簇的劃分穩(wěn)定,所有點(diǎn)被劃分到其最終的簇中。

下面是關(guān)于k均值算法的實(shí)驗(yàn)過程及分析結(jié)果:

import numpy as np

import matplotlib.pyplot as plt

from sklearn.cluster import KMeans

from sklearn.datasets import make_blobs

# 生成樣本數(shù)據(jù)

X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)

# 執(zhí)行K均值算法

kmeans = KMeans(n_clusters=4)

kmeans.fit(X)

# 獲取簇中心和每個(gè)點(diǎn)的簇標(biāo)簽

centers = kmeans.cluster_centers_

labels = kmeans.labels_

# 可視化結(jié)果

plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')

plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='X')

plt.title('K-Means Clustering')

plt.xlabel('Feature 1')

plt.ylabel('Feature 2')

plt.show()

分析:

1.數(shù)據(jù)生成:生成了300個(gè)樣本數(shù)據(jù),劃分為4個(gè)簇,每個(gè)簇的標(biāo)準(zhǔn)差為0.60。

2.K均值算法:對(duì)這些數(shù)據(jù)執(zhí)行了K均值聚類,指定了4個(gè)簇。

3.可視化:結(jié)果圖展示了數(shù)據(jù)點(diǎn)按簇進(jìn)行著色,簇中心以紅色“X”標(biāo)記。? ?

????????通過運(yùn)行代碼,可以直觀地看到數(shù)據(jù)點(diǎn)如何被聚類到4個(gè)不同的簇中,以及每個(gè)簇的中心位置。這有助于驗(yàn)證K均值算法在實(shí)際數(shù)據(jù)上的效果。

實(shí)驗(yàn)結(jié)果:

9.4.2學(xué)習(xí)向量量化法(LVQ)

????????LVQ 假設(shè)數(shù)據(jù)樣本帶有類別標(biāo)記,學(xué)習(xí)過程利用樣本的這些監(jiān)督信息來(lái)輔助聚類。

步驟如下:

初始化:從訓(xùn)練數(shù)據(jù)中隨機(jī)選擇若干樣本點(diǎn)作為初始的原型向量(或質(zhì)心),這些原型向量的數(shù)量通常等于類別數(shù)。 分配類別:為每個(gè)原型向量分配一個(gè)類別標(biāo)簽,通常是其所屬的訓(xùn)練樣本的類別。 訓(xùn)練過程:對(duì)每個(gè)訓(xùn)練樣本:

更新原型:

如果樣本點(diǎn)的真實(shí)類別與最近原型的類別相同,則將原型向量向樣本點(diǎn)移動(dòng)(調(diào)整原型向量的位置)。如果樣本點(diǎn)的真實(shí)類別與最近原型的類別不同,則將原型向量遠(yuǎn)離樣本點(diǎn)移動(dòng)。選擇最近原型:找到距離樣本點(diǎn)最近的原型向量,并確定其類別標(biāo)簽。計(jì)算距離:計(jì)算樣本點(diǎn)到所有原型向量的距離。 重復(fù)訓(xùn)練:重復(fù)步驟3,直到原型向量的位置穩(wěn)定,或者達(dá)到預(yù)設(shè)的訓(xùn)練次數(shù)。 分類:使用訓(xùn)練好的原型向量對(duì)新樣本進(jìn)行分類:計(jì)算新樣本與所有原型向量的距離,并將樣本分配給距離最近的原型的類別

學(xué)習(xí)向量量化的實(shí)驗(yàn)過程及分析結(jié)果如下:

import numpy as np

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score

from sklearn.preprocessing import StandardScaler

class LVQ:

def __init__(self, n_prototypes):

self.n_prototypes = n_prototypes

def fit(self, X, y, n_iter=100, lr=0.01):

self.classes = np.unique(y)

self.prototypes = np.zeros((self.n_prototypes, X.shape[1]))

self.labels = np.zeros(self.n_prototypes, dtype=int)

# Initialize prototypes randomly

for i in range(self.n_prototypes):

idx = np.random.choice(len(X))

self.prototypes[i] = X[idx]

self.labels[i] = y[idx]

for _ in range(n_iter):

for i, x in enumerate(X):

dists = np.linalg.norm(x - self.prototypes, axis=1)

closest_idx = np.argmin(dists)

if y[i] == self.labels[closest_idx]:

self.prototypes[closest_idx] += lr * (x - self.prototypes[closest_idx])

else:

self.prototypes[closest_idx] -= lr * (x - self.prototypes[closest_idx])

def predict(self, X):

dists = np.linalg.norm(X[:, np.newaxis] - self.prototypes, axis=2)

closest_idx = np.argmin(dists, axis=1)

return self.labels[closest_idx]

# Load Iris dataset

data = load_iris()

X = data.data

y = data.target

# Standardize the features

scaler = StandardScaler()

X = scaler.fit_transform(X)

# Split into training and test sets

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Initialize and train LVQ model

model = LVQ(n_prototypes=10)

model.fit(X_train, y_train)

# Predict and evaluate

y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)

print(f'準(zhǔn)確率: {accuracy:.2f}')

分析:? ? ? ??

????????這個(gè)實(shí)現(xiàn)沒有依賴于 sklearn_lvq 庫(kù),而是手動(dòng)實(shí)現(xiàn)了 LVQ 算法。使用了 numpy 和 scikit-learn 進(jìn)行數(shù)據(jù)處理和評(píng)估。

初始化 LVQ 類:定義?LVQ?類及其方法。訓(xùn)練模型:初始化原型,更新原型的位置。預(yù)測(cè)和評(píng)估:通過計(jì)算距離并預(yù)測(cè)類別,評(píng)估模型性能。

實(shí)驗(yàn)結(jié)果:

9.4.3高斯混合聚類

????????高斯混合聚類采用概率模型來(lái)表達(dá)聚類原型。對(duì)n維樣本空間X中的隨機(jī)向量 x,若x服從高斯分布,其概率密度函數(shù)為:

步驟如下:????????

1.?初始化參數(shù)

2.?期望步驟(E-Step)

3.?最大化步驟(M-Step)

4.?收斂性檢查

5.?結(jié)果解釋

下面是關(guān)于高斯混合聚類算法的實(shí)驗(yàn)過程及分析結(jié)果:

import numpy as np

from sklearn.mixture import GaussianMixture

import matplotlib.pyplot as plt

# 生成示例數(shù)據(jù)

np.random.seed(0)

n_samples = 300

C = np.array([[0.7, -0.7], [0.7, 0.7]])

X = np.dot(np.random.randn(n_samples, 2), C)

# 應(yīng)用高斯混合模型

gmm = GaussianMixture(n_components=2, random_state=0)

gmm.fit(X)

labels = gmm.predict(X)

# 結(jié)果可視化

plt.figure(figsize=(8, 6))

plt.scatter(X[:, 0], X[:, 1], c=labels, s=40, cmap='viridis')

plt.title('GMM Clustering')

plt.xlabel('Feature 1')

plt.ylabel('Feature 2')

# 繪制高斯分布

ax = plt.gca()

x = np.linspace(X[:, 0].min(), X[:, 0].max(), 100)

y = np.linspace(X[:, 1].min(), X[:, 1].max(), 100)

X_grid, Y_grid = np.meshgrid(x, y)

Z = np.exp(gmm.score_samples(np.c_[X_grid.ravel(), Y_grid.ravel()]))

Z = Z.reshape(X_grid.shape)

contour = ax.contour(X_grid, Y_grid, Z, levels=5, cmap='Greys', alpha=0.5)

plt.colorbar(contour)

plt.show()

# 輸出分析結(jié)果

print("GMM Converged:", gmm.converged_)

print("Number of Iterations:", gmm.n_iter_)

print("Means of the clusters:\n", gmm.means_)

print("Covariances of the clusters:\n", gmm.covariances_)

? 分析:

聚類可視化:散點(diǎn)圖顯示了數(shù)據(jù)點(diǎn)根據(jù)模型預(yù)測(cè)的簇標(biāo)簽進(jìn)行著色。等高線圖顯示了高斯分布的輪廓。GMM 收斂狀態(tài):通過?gmm.converged_?判斷模型是否收斂。迭代次數(shù):gmm.n_iter_?表示模型收斂的迭代次數(shù)。均值和協(xié)方差:gmm.means_?和?gmm.covariances_?提供了每個(gè)簇的均值和協(xié)方差矩陣。

這個(gè)代碼和結(jié)果分析展示了高斯混合模型在二維數(shù)據(jù)上的應(yīng)用。

實(shí)驗(yàn)結(jié)果:

9.5密度聚類

????????密度聚類算法從樣本密度的角度來(lái)考察樣本之間的可連接性,并基于可連接樣本不斷擴(kuò)展聚類簇以獲得最終的聚類結(jié)果.DBSCAN 是一種著名的密度聚類算法,它基于一組"鄰域"參數(shù)來(lái)刻畫樣本分布的緊密程度.

DBSCAN算法步驟如下:

選擇參數(shù):設(shè)置兩個(gè)參數(shù),eps(鄰域的半徑)和 min_samples(一個(gè)簇的最小樣本數(shù))。 遍歷數(shù)據(jù)點(diǎn):對(duì)于數(shù)據(jù)集中的每一個(gè)點(diǎn),計(jì)算其 eps 鄰域內(nèi)的點(diǎn)數(shù)。 密度檢驗(yàn):

如果鄰域內(nèi)點(diǎn)數(shù)大于或等于?min_samples,將該點(diǎn)標(biāo)記為核心點(diǎn),并形成一個(gè)新簇。否則,標(biāo)記為噪聲點(diǎn)(如果它在任何核心點(diǎn)的鄰域內(nèi))。 擴(kuò)展簇:

從核心點(diǎn)開始,遞歸地將所有密度可達(dá)的點(diǎn)加入到同一簇中。對(duì)于新加入的點(diǎn),再檢查其鄰域,重復(fù)此過程直到所有密度可達(dá)的點(diǎn)被處理完。 重復(fù):對(duì)數(shù)據(jù)集中尚未標(biāo)記的點(diǎn)重復(fù)步驟2至4,直到所有點(diǎn)被處理完。 處理噪聲:所有未被分配到任何簇的點(diǎn)被標(biāo)記為噪聲。

DBSCAN的優(yōu)點(diǎn)是能夠發(fā)現(xiàn)任意形狀的簇,并能自動(dòng)識(shí)別噪聲點(diǎn)。

下面是關(guān)于DBSCAN算法的實(shí)驗(yàn)代碼及分析結(jié)果:

import numpy as np

from sklearn.cluster import DBSCAN

import matplotlib.pyplot as plt

from sklearn.datasets import make_moons

# 生成示例數(shù)據(jù)

X, _ = make_moons(n_samples=300, noise=0.1, random_state=42)

# 應(yīng)用 DBSCAN 算法

dbscan = DBSCAN(eps=0.3, min_samples=5)

labels = dbscan.fit_predict(X)

# 結(jié)果可視化

plt.figure(figsize=(8, 6))

unique_labels = np.unique(labels)

colors = plt.cm.get_cmap('viridis', len(unique_labels))

for label in unique_labels:

mask = (labels == label)

plt.scatter(X[mask, 0], X[mask, 1], c=[colors(label)], label=f'Cluster {label}' if label != -1 else 'Noise', s=50)

plt.title('DBSCAN Clustering')

plt.xlabel('Feature 1')

plt.ylabel('Feature 2')

plt.legend()

plt.show()

# 輸出分析結(jié)果

print("Cluster labels:", np.unique(labels))

print("Number of clusters found:", len(set(labels)) - (1 if -1 in labels else 0))

print("Number of noise points:", list(labels).count(-1))

分析結(jié)果:

聚類可視化: 散點(diǎn)圖展示了通過 DBSCAN 聚類得到的結(jié)果。不同的顏色表示不同的簇,噪聲點(diǎn)(未分配到任何簇的點(diǎn))通常會(huì)被標(biāo)記為單獨(dú)的顏色。 簇標(biāo)簽: np.unique(labels)?列出了所有簇標(biāo)簽。標(biāo)簽?-1?表示噪聲點(diǎn)。 簇?cái)?shù)量: len(set(labels)) - (1 if -1 in labels else 0)?計(jì)算了簇的數(shù)量。-1?被排除在外,因?yàn)樗碓肼朁c(diǎn),不屬于任何簇。 噪聲點(diǎn)數(shù)量: list(labels).count(-1)?計(jì)算了噪聲點(diǎn)的數(shù)量。

實(shí)驗(yàn)結(jié)果:

?9.6層次聚類

????????層次聚類試圖 不同層次對(duì)數(shù)據(jù)集進(jìn)行劃分,從而形成樹聚類結(jié)構(gòu) ,數(shù)據(jù)集的劃分采用"自 底向上 "的聚合策略,也可采 "自頂向下" 分拆策略.

????????AGNES 是一種采用自底 向上聚合策略的層次聚類算法.它先將數(shù)據(jù)集中的每個(gè)樣本看作初始聚類簇,然后在算法運(yùn)行的每一步中找出離最近的兩個(gè)聚類簇進(jìn)行合并,該過程不斷重復(fù),直至達(dá)到預(yù)設(shè)的聚類簇個(gè)數(shù).

步驟如下:

初始化:將每個(gè)數(shù)據(jù)點(diǎn)視為一個(gè)單獨(dú)的簇。 計(jì)算距離:計(jì)算所有簇之間的距離。初始時(shí),距離是數(shù)據(jù)點(diǎn)之間的距離。 合并簇:

找到距離最小的兩個(gè)簇,將它們合并成一個(gè)新的簇。更新簇間的距離。具體方法取決于距離度量,例如單鏈接、全鏈接或平均鏈接。 重復(fù):重復(fù)步驟2和3,直到所有點(diǎn)被合并成一個(gè)簇或達(dá)到預(yù)定的簇?cái)?shù)量。 停止條件:算法結(jié)束時(shí),得到一個(gè)樹狀圖(dendrogram),表示不同簇的合并過程。

下面是AGNES算法的實(shí)驗(yàn)代碼和分析結(jié)果:

import numpy as np

import matplotlib.pyplot as plt

from sklearn.cluster import AgglomerativeClustering

from sklearn.datasets import make_moons

import scipy.cluster.hierarchy as sch

# 生成示例數(shù)據(jù)

X, _ = make_moons(n_samples=300, noise=0.1, random_state=42)

# 應(yīng)用 AGNES 算法(AgglomerativeClustering)

agnes = AgglomerativeClustering(n_clusters=2, linkage='ward')

labels = agnes.fit_predict(X)

# 結(jié)果可視化

plt.figure(figsize=(8, 6))

plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', s=50, edgecolor='k')

plt.title('Agglomerative Clustering (AGNES)')

plt.xlabel('Feature 1')

plt.ylabel('Feature 2')

plt.show()

# 生成樹狀圖(dendrogram)

plt.figure(figsize=(10, 7))

dendrogram = sch.dendrogram(sch.linkage(X, method='ward'))

plt.title('Dendrogram for AGNES')

plt.xlabel('Sample index')

plt.ylabel('Distance')

plt.show()

# 輸出分析結(jié)果

print("Cluster labels:", np.unique(labels))

print("Number of clusters found:", len(set(labels)))

分析結(jié)果:

聚類可視化: 散點(diǎn)圖展示了通過 AGNES 聚類得到的結(jié)果。不同的顏色表示不同的簇,便于觀察數(shù)據(jù)的分組情況。 樹狀圖: 樹狀圖展示了數(shù)據(jù)點(diǎn)合并的過程。每次合并操作都會(huì)在樹狀圖上形成一個(gè)連接線,線的高度表示合并時(shí)的距離。通過觀察樹狀圖,可以確定不同簇的形成過程和距離。 簇標(biāo)簽: np.unique(labels)?列出了所有簇的標(biāo)簽。與散點(diǎn)圖中的顏色對(duì)應(yīng)。 簇?cái)?shù)量: len(set(labels))?計(jì)算了最終得到的簇的數(shù)量。這與在 AGNES 中設(shè)定的?n_clusters?參數(shù)一致。

這段代碼展示了如何使用 AGNES 進(jìn)行層次聚類,并通過可視化結(jié)果和樹狀圖來(lái)分析聚類效果

實(shí)驗(yàn)結(jié)果:

????????

柚子快報(bào)邀請(qǐng)碼778899分享:機(jī)器學(xué)習(xí)第九章-聚類

http://yzkb.51969.com/

推薦鏈接

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19529959.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄