16_非监督学习、k-means 4阶段、kmeans API、Kmeans性能评估指标、案例
生活随笔
收集整理的這篇文章主要介紹了
16_非监督学习、k-means 4阶段、kmeans API、Kmeans性能评估指标、案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、聚類算法介紹
關于聚類算法,可以查看:常見的六大聚類算法
2、k-means 4階段
K-means通常被稱為勞埃德算法,這在數據聚類中是最經典的,也是相對容易理解的模型。算法執行的過程分為4個階段。
- 1.首先,隨機設K個特征空間內的點作為初始的聚類中心。
- 2.然后,對于根據每個數據的特征向量,從K個聚類中心中尋找距離最近的一個,并且把該數據標記為這個聚類中心。
- 3.接著,在所有的數據都被標記過聚類中心之后,根據這些數據新分配的類簇,通過取分配給每個先前質心的所有樣本的平均值來創建新的質心重,新對K個聚類中心做計算。
- 4.最后,計算舊和新質心之間的差異,如果所有的數據點從屬的聚類中心與上一次的分配的類簇沒有變化,那么迭代就可以停止,否則回到步驟2繼續循環。
K均值等于具有小的全對稱協方差矩陣的期望最大化算法。
3、k-means API
sklearn.cluster.KMeans
class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='deprecated', verbose=0, random_state=None, copy_x=True, n_jobs='deprecated', algorithm='auto')參數: n_clusters : int, default=8 要形成的聚類數以及生成的質心數。 init : {‘k-means++’, ‘random’, ndarray, callable}, default=’k-means++’初始化方法,默認為'k-means++',以智能方式選擇k-均值聚類的初始聚類中心,以加速收斂;random,從初始質心數據中隨機選擇k個觀察值 n_init : int,默認值:10使用不同質心種子運行k-means算法的時間。最終結果將是n_init連續運行在慣性方面的最佳輸出。 n_jobs : init用于計算的作業數量。這可以通過并行計算每個運行的n_init。如果-1使用所有CPU。如果給出1,則不使用任何并行計算代碼,這對調試很有用。對于-1以下的n_jobs,使用(n_cpus + 1 + n_jobs)。因此,對于n_jobs = -2,所有CPU都使用一個。 random_state : 隨機數種子,默認為全局numpy隨機數生成器。 labels_:默認標記的類型,可以和真實值比較(不是值比較)# 關于其它更多參數介紹訪問:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#examples-using-sklearn-cluster-kmeans]使用kmeans的方式案例: from sklearn.cluster import KMeans import numpy as np X = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]]) kmeans = KMeans(n_clusters=2, random_state=0)方法
fit(X,y=None)
使用X作為訓練數據擬合模型
predict(X)
預測新的數據所在的類別
屬性
cluster_centers_
集群中心的點坐標
labels_
每個點的類別
4、Kmeans性能評估指標
4.1 Kmeans性能評估指標API
sklearn.metrics.silhouette_score
sklearn.metrics.silhouette_score(X, labels) 計算所有樣本的平均輪廓系數X:特征值 labels : 被聚類標記的目標值5、k-means案例分析
手寫數字數據上K-Means聚類的演示
# -*- coding: UTF-8 -*-from sklearn.metrics import silhouette_score from sklearn.cluster import KMeans from sklearn.datasets import load_digitsdef kmeans():"""手寫數字聚類過程:return: None"""# 加載手寫數字數據集ld = load_digits()print(ld.data)print("------------------------------------------")print(ld.target)print("---------查看第一個樣本數據----------------")# 查看第一個樣本數據print(ld.data[0])print("------------------------------------------")# print(ld.target[:20])# 聚類km = KMeans(n_clusters=810)km.fit_transform(ld.data)print(km.labels_[:20])# (silhouette : /?s?lu?et/ n:輪廓,剪影, vt. 使…照出影子來;使…僅僅顯出輪廓)print(silhouette_score(ld.data,km.labels_))if __name__=="__main__":kmeans()輸出結果:
[[ 0. 0. 5. ... 0. 0. 0.][ 0. 0. 0. ... 10. 0. 0.][ 0. 0. 0. ... 16. 9. 0.]...[ 0. 0. 1. ... 6. 0. 0.][ 0. 0. 2. ... 12. 0. 0.][ 0. 0. 10. ... 12. 1. 0.]] ------------------------------------------ [0 1 2 ... 8 9 8] ---------查看第一個樣本數據---------------- [ 0. 0. 5. 13. 9. 1. 0. 0. 0. 0. 13. 15. 10. 15. 5. 0. 0. 3.15. 2. 0. 11. 8. 0. 0. 4. 12. 0. 0. 8. 8. 0. 0. 5. 8. 0.0. 9. 8. 0. 0. 4. 11. 0. 1. 12. 7. 0. 0. 2. 14. 5. 10. 12.0. 0. 0. 0. 6. 13. 10. 0. 0. 0.] ------------------------------------------ [209 579 30 233 33 646 712 369 211 784 162 81 158 735 73 46 284 564622 720] 0.09647323481043048再如案例:https://www.cnblogs.com/moon2/p/9872706.html
6、kmeans總結
特點分析:
采用迭代式算法,直觀易懂并且非常實用
缺點:
容易收斂到局部最優解(多次聚類)
需要預先設定簇的數量(k-means++解決)
打個賞唄,您的支持是我堅持寫好博文的動力
總結
以上是生活随笔為你收集整理的16_非监督学习、k-means 4阶段、kmeans API、Kmeans性能评估指标、案例的全部內容,希望文章能夠幫你解決所遇到的問題。