一、sklearn聚類演算法
聚類演算法是一種機器學習演算法,常見的sklearn聚類演算法有KMeans、DBSCAN、層次聚類、高斯混合聚類等。其中,KMeans是最常用的一種聚類演算法,也是sklearn中最基本的聚類演算法之一。
from sklearn.cluster import KMeans
# 創建一個聚類器對象,參數n_clusters代表聚類的個數
kmeans = KMeans(n_clusters=3)
# 聚類
kmeans.fit(X)
二、sklearn數據集
sklearn中提供了一些經常被用來測試分類演算法和聚類演算法的數據集,例如鳶尾花數據集、手寫數字數據集等。對於初學者來說,這些數據集可以用來快速地了解分類和聚類演算法的基本使用。
from sklearn.datasets import load_iris
# 載入鳶尾花數據集
iris = load_iris()
# 獲取數據集的特徵和標籤
X = iris.data
y = iris.target
三、sklearn聚類方法
sklearn中提供了多種聚類方法,包括KMeans、DBSCAN、層次聚類、高斯混合聚類等。這些聚類方法在聚類方式、聚類效果和使用方法上都有一定的區別。
# 使用KMeans聚類
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
# 使用DBSCAN聚類
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan.fit(X)
四、sklearn聚類評價指標
在聚類中,我們常常需要評價聚類效果的好壞。常見的評價指標有輪廓係數(silhouette coefficient)、Calinski-Harabasz指數和Davies-Bouldin指數等。
# 使用輪廓係數評價KMeans聚類效果
from sklearn.metrics import silhouette_score
score = silhouette_score(X, kmeans.labels_, metric='euclidean')
print(score)
五、sklearn聚類分析
對於得到的聚類結果,我們需要進行可視化分析。sklearn中提供了多種可視化方法,例如利用t-SNE降維和PCA降維將高維數據可視化。
# 利用t-SNE可視化聚類效果
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# 將高維數據降維到2維
tsne = TSNE(n_components=2, init='pca', random_state=501)
X_tsne = tsne.fit_transform(X)
# 繪製聚類效果圖
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=kmeans.labels_)
plt.show()
六、sklearn聚類實例
下面通過一個實際的案例來應用sklearn的聚類演算法,對紅酒進行聚類。
# 載入紅酒數據集
from sklearn.datasets import load_wine
wine = load_wine()
# 使用KMeans聚類
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(wine.data)
# 可視化聚類結果
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# 將高維數據降維到2維
tsne = TSNE(n_components=2, init='pca', random_state=501)
wine_tsne = tsne.fit_transform(wine.data)
# 繪製聚類效果圖
plt.scatter(wine_tsne[:, 0], wine_tsne[:, 1], c=kmeans.labels_)
plt.show()
七、sklearn聚類代碼
下面是一個完整的聚類代碼示例,包括對數據的載入、標準化、聚類、聚類效果評估和可視化等。
# 載入數據集
from sklearn.datasets import load_iris
iris = load_iris()
# 標準化數據
from sklearn.preprocessing import StandardScaler
X = StandardScaler().fit_transform(iris.data)
# 使用KMeans聚類
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
# 使用輪廓係數評價聚類效果
from sklearn.metrics import silhouette_score
score = silhouette_score(X, kmeans.labels_, metric='euclidean')
print("輪廓係數:", score)
# 使用t-SNE可視化聚類效果
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# 將高維數據降維到2維
tsne = TSNE(n_components=2, init='pca', random_state=501)
X_tsne = tsne.fit_transform(X)
# 繪製聚類效果圖
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=kmeans.labels_)
plt.show()
八、sklearn聚類中心
在kmeans聚類演算法中,聚類中心是聚類的核心,所有數據點都將根據它們與聚類中心之間的距離來進行聚類。
# 獲取聚類中心
centers = kmeans.cluster_centers_
# 繪製聚類中心
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=kmeans.labels_)
plt.scatter(centers[:, 0], centers[:, 1], c='r', s=120, marker='s')
plt.show()
九、sklearn聚類基於分層的聚類演算法
分層聚類是一種聚類方法,它將數據點分為多個層次,並將同一層次中的數據點分為一個簇。sklearn中的分層聚類包括凝聚層次聚類和分裂層次聚類。
# 使用凝聚層次聚類
from sklearn.cluster import AgglomerativeClustering
agg = AgglomerativeClustering(n_clusters=3)
agg.fit(X)
# 可視化聚類結果
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=agg.labels_)
plt.show()
十、sklearn聚類之前要標準化嗎
在使用聚類演算法之前,我們通常需要標準化數據,以保證各特徵之間的差異對聚類結果的影響減小。由於聚類演算法通常是基於距離計算的,因此數據中不同特徵的量綱和範圍可能會影響聚類結果。
# 數據標準化
from sklearn.preprocessing import StandardScaler
X = StandardScaler().fit_transform(X)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/240609.html