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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【机器学习基础】通俗易懂无监督学习K-Means聚类算法及代码实践

發布時間:2025/3/12 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习基础】通俗易懂无监督学习K-Means聚类算法及代码实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

K-Means是一種無監督學習方法,用于將無標簽的數據集進行聚類。其中K指集群的數量,Means表示尋找集群中心點的手段。

一、 無監督學習 K-Means

貼標簽是需要花錢的。
所以人們研究處理無標簽數據集的方法。(筆者狹隘了)
面對無標簽的數據集,我們期望從數據中找出一定的規律。一種最簡單也最快速的聚類算法應運而生---K-Means。
它的核心思想很簡單:物以類聚。

用直白的話簡單解釋它的算法執行過程如下:

  • 隨便選擇K個中心點(大哥)。

  • 把距離它足夠近的數據(小弟)吸納為成員,聚成K個集群(組織)。

  • 各集群(組織)內部重新選擇中心點(大哥),選擇標準是按照距離取均值作為中心點(大哥)。

  • 重復2、3步驟直到收斂(組織成員相對穩定)。

  • 這就是黑澀會形成聚類的過程。

    二、 K-Means代碼實踐

    2.1 鳶尾花數據集

    import?numpy?as?np import?pandas?as?pd import?seaborn?as?sns import?matplotlib.pyplot?as?plt#?大家不用在意這個域名 df?=?pd.read_csv('https://blog.caiyongji.com/assets/iris.csv') sns.scatterplot(x='petal_length',y='petal_width',data=df,hue='species')

    我們得到帶標簽的數據如下:

    2.2 K-Means訓練數據

    我們移除數據標簽,僅使用花瓣長、寬作為數據輸入,并使用無監督學習方法K-Means進行訓練。

    X?=?df[['petal_length','petal_width']].to_numpy()?from?sklearn.cluster?import?KMeans k?=?2 kmeans?=?KMeans(n_clusters=k,?random_state=42) y_pred?=?kmeans.fit_predict(X) plt.plot(X[y_pred==1,?0],?X[y_pred==1,?1],?"ro",?label="group?1") plt.plot(X[y_pred==0,?0],?X[y_pred==0,?1],?"bo",?label="group?0") #?plt.legend(loc=2) plt.show()

    得到分類數據如下,我們并不知道下方數據類別分別代表什么意義。

    我們將K分別取1-6的值,可得到如下圖所示分類結果:

    那么K值的選擇有什么意義呢?我們如何選擇?

    三、K的選擇

    3.1 慣性指標(inertia)

    K-Means的慣性計算方式是,每個樣本與最接近的集群中心點的均方距離的總和。

    kmeans_per_k?=?[KMeans(n_clusters=k,?random_state=42).fit(X)for?k?in?range(1,?10)]inertias?=?[model.inertia_?for?model?in?kmeans_per_k] plt.figure(figsize=(8,?3.5)) plt.plot(range(1,?10),?inertias,?"bo-") plt.xlabel("$k$",?fontsize=14) plt.ylabel("Inertia",?fontsize=14) plt.annotate('Elbow',xy=(2,?inertias[2]),xytext=(0.55,?0.55),textcoords='figure?fraction',fontsize=16,arrowprops=dict(facecolor='black',?shrink=0.1)) plt.axis([1,?8.5,?0,?1300]) plt.show()

    以上代碼中model.inertia_即K-Means方法中的慣性指標。
    一般地,慣性越小模型越好,但伴隨K值的增大,慣性下降的速度變的很慢,因此我們選擇“肘部”的K值,作為最優的K值選擇。

    3.2 輪廓系數指標(silhouette)

    K-Means的輪廓系數計算方式是,與集群內其他樣本的平均距離記為a,與外部集群樣本的平均距離記為b,輪廓系數(b-a)/max(a,b)

    from?sklearn.metrics?import?silhouette_score silhouette_scores?=?[silhouette_score(X,?model.labels_)for?model?in?kmeans_per_k[1:]] plt.figure(figsize=(8,?3)) plt.plot(range(2,?10),?silhouette_scores,?"bo-") plt.xlabel("$k$",?fontsize=14) plt.ylabel("Silhouette?score",?fontsize=14) plt.axis([1.8,?8.5,?0.55,?0.8]) plt.show()

    以上代碼中silhouette_score方法可取得K-Means的輪廓系數值。
    一般地,輪廓系數指標越大越好,我們可以看到當K為2、3時均可取得不錯的聚類效果。

    四、自動選擇K值(拓展)

    4.1 簡單理解貝葉斯定理

    白話解釋貝葉斯:當有新的證據出現時,不確定的事情更加確信了。 這里的“確信”是指對不確定的事情的信心程度。

    公式(可忽略):

    其中,P(A) 表示事件A發生的概率,P(A|B)表示事件B發生時事件A發生的概率。上面的公式中B就是所謂的證據。這里要注意的是,P(B)的出現讓P(A|B)變的更確定了,并不是說概率變高了或者變低了。概率的高或者低都是一種確定。它是一種信心程度的體現。

    4.2 貝葉斯高斯混合模型

    我們使用BayesianGaussianMixture方法,而無需指定明確的K值。

    from?sklearn.mixture?import?BayesianGaussianMixture bgm?=?BayesianGaussianMixture(n_components=10,?n_init=10,?random_state=42) y_pred?=?bgm.fit_predict(X) np.round(bgm.weights_,?2)

    輸出:?array([0.4 , 0.33, 0.27, 0. , 0. , 0. , 0. , 0. , 0. , 0. ])

    以上代碼的執行邏輯是,初始化10個集群,不斷調整有關集群數貝葉斯先驗知識,來將不必要的集群權重設為0(或接近0),來確定最終K值。

    五、總結(系列完結)

    5.1 機器學習系列完結

    我相信,截至到目前,大家對機器學習已經有了一個基本的認識。最重要的是,大家親手實踐了機器學習的代碼。無論你對機器學習有多么模糊的認識,都能近距離的接觸到機器學習,這一點很重要。

    當初,我發現市面上大部分的教程都對數學有強依賴,讓很多人敬而遠之。我覺得,無論頂尖的科學研究還是普羅大眾的教育科普都有其不可替代的巨大價值。流于表面的廣泛未必沒有其意義,因此我選擇了舍棄嚴謹,貼近通俗。

    當然,想要深耕于AI領域,數學是充分且必要的條件。如果付得起時間和機會成本,請認真且努力,絕不會辜負你。

    5.2 深度學習系列開始

    深度學習是一臺結構復雜的機器,但它的操作卻相對簡單。甚至,會給你比傳統機器學習算法更簡單的感受。
    我們拭目以待!感謝大家!

    往期文章:

    • 機器學習(五):通俗易懂決策樹與隨機森林及代碼實踐

    • 機器學習(四):通俗理解支持向量機SVM及代碼實踐

    • 機器學習(三):理解邏輯回歸及二分類、多分類代碼實踐

    • 機器學習(二):理解線性回歸與梯度下降并做簡單預測

    • 機器學習(一):5分鐘理解機器學習并上手實踐

    • 前置機器學習(五):30分鐘掌握常用Matplotlib用法

    • 前置機器學習(四):一文掌握Pandas用法

    • 前置機器學習(三):30分鐘掌握常用NumPy用法

    • 前置機器學習(二):30分鐘掌握常用Jupyter Notebook用法

    • 前置機器學習(一):數學符號及希臘字母

    往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯 本站qq群851320808,加入微信群請掃碼:

    總結

    以上是生活随笔為你收集整理的【机器学习基础】通俗易懂无监督学习K-Means聚类算法及代码实践的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。