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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

机器学习-聚类之K均值(K-means)算法原理及实战

發布時間:2024/4/11 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习-聚类之K均值(K-means)算法原理及实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

K-means算法

  • 前言
    • 機器學習方法主要分為監督學習和非監督學習兩種。監督學習方法是在樣本標簽類別已知的情況下進行的,可以統計出各類樣本的概率分布、特征空間分布區域等描述量,然后利用這些參數進行分類器設計。在實際應用中,很多情況是無法預先知道樣本標簽的,因而只能利用非監督機器學習方法進行分析。聚類分析就是典型的非監督學習方法,它在沒有給定劃分類別的情況下,根據數據自身的距離或者相似度進行樣本分組。
    • 給定元素集合D,每個元素具有n個觀測屬性,對這些屬性使用某種算法將D劃分成K個子集,要求每個子集內部的元素相似度盡可能高,不同子集的元素相似度盡可能低。聚類分析是一種非監督觀察式學習方法,聚類之前不需要知道類別甚至不需要知道類別數量。目前,聚類分析廣泛使用于統計學、生物學、數據庫技術和市場營銷等領域。
    • 聚類分析可以分為兩大類,一類是基于概率密度函數估計的直接方法,其原理是設法找到給類別在特征空間的分布參數再進行分類。另一類是基于樣本之間相似性度量的間接聚類方法,其原理是設法找出不同類別的核心或者初始類核,再依據樣本與這些核心之間的相似性度量將樣本聚集為不同類別。
  • 簡介
    • 聚類算法很多,如K-means(K均值)、K中心聚類、密度聚類、譜系聚類、最大期望聚類等。這里重點介紹K-meas聚類算法,該算法的基本思想是以空間中K個點為中心進行聚類,對最靠近它們的對象歸類。通過迭代的方法,逐次更新各聚類中心的值,直到得到最好的聚類結果。K-means算法實現簡單、計算速度快、原理易于理解、具有理想的聚類效果,因此該算法是公認的經典數據挖掘算法之一。
  • 原理
    • 下面就以歐式距離為例,說明K-means如何完成聚類,步驟如下。
      • 在n個觀測中,隨機挑選代表K個簇的種子點,這些種子點即為聚類的初始中心。
      • 分別計算每個數據點到K個中心點的距離,離哪個中心點距離最近就將該數據點分配到哪個簇中。
      • 重新計算每個簇數據的坐標均值,將新的均值作為新的聚類中心。
      • 重復之前兩步,知道簇的中心點坐標不變或達到規定的循環次數,形成最終的K個聚類。
    • 必然牽扯的問題
      • K值的選擇
        • 肘部法、交叉驗證、信息標準、影像法和G-means算法等。
      • 距離度量
        • 歐式距離(需要先標準化)和余弦相似度
      • 迭代結束
        • 目標函數最優或迭代次數上限
    • 算法缺點
      • 需要實現指定K值,必須對分析的數據比較熟悉或者交叉驗證才能確定K值。
      • 對噪聲數據或者離群點數據敏感,少量的異常數據會對均值產生極大影響。
      • 對于不同的初始值,可能導致完全不同的聚類結果,有的初始值會使結果陷入局部最優解,同時在大規模數據集收斂較慢。
    • 一般流程
      • 初始化聚類數K。
      • 讀取數據集。
      • 距離度量函數。
      • 隨機生成初始質心,選擇初始聚類中心。
      • K-means算法實現。
      • 結果可視化。
  • 實戰
    • 實戰一 生成二維多類數據,使用sklearn進行聚類。
      • 運行結果
    • 實戰二 對魚類數據集進行聚類。
      • # -*-coding:utf-8-*-from sklearn.pipeline import make_pipelinefrom sklearn.preprocessing import StandardScalerfrom sklearn.cluster import KMeansimport pandas as pddf = pd.read_csv('data/fish.csv')species = list(df['species'])del df['species']print(df.head())# 歸一化預處理samples = df.valuesscaler = StandardScaler()kmeans = KMeans(n_clusters=4)pipline = make_pipeline(scaler, kmeans)# 訓練pipline.fit(samples)# 預測labels = pipline.predict(samples)# 創建DataFrame,裝入魚類數據的聚類類別號與真實種類,交叉表顯示df = pd.DataFrame({'labels': labels, 'species': species})ct = pd.crosstab(df['labels'], df['species'])print(ct)
      • 運行結果
  • 補充說明
    • 參考書為《Python3數據分析與機器學習實戰》,對部分錯誤修改
    • 具體數據集和代碼見我的Github,歡迎Star或者Fork

總結

以上是生活随笔為你收集整理的机器学习-聚类之K均值(K-means)算法原理及实战的全部內容,希望文章能夠幫你解決所遇到的問題。

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