机器学习-聚类之K均值(K-means)算法原理及实战
生活随笔
收集整理的這篇文章主要介紹了
机器学习-聚类之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。
- 讀取數據集。
- 距離度量函數。
- 隨機生成初始質心,選擇初始聚類中心。
- K-means算法實現。
- 結果可視化。
- 下面就以歐式距離為例,說明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)
- 運行結果
- 實戰一 生成二維多類數據,使用sklearn進行聚類。
- 補充說明
- 參考書為《Python3數據分析與機器學習實戰》,對部分錯誤修改
- 具體數據集和代碼見我的Github,歡迎Star或者Fork
總結
以上是生活随笔為你收集整理的机器学习-聚类之K均值(K-means)算法原理及实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习-降维之奇异值分解SVD算法原理
- 下一篇: 机器学习-回归之逻辑回归算法原理及实战