1. 程式人生 > >K-means演算法及其優化

K-means演算法及其優化

本文摘選自:

https://blog.csdn.net/google19890102/article/details/26149927

https://blog.csdn.net/taoyanqi8932/article/details/53727841

https://blog.csdn.net/gamer_gyt/article/details/48949227

https://www.cnblogs.com/eczhou/p/7860435.html

一、聚類演算法的簡介

    聚類演算法是一種典型的無監督學習演算法,主要用於將相似的樣本自動歸到一個類別中。聚類演算法與分類演算法最大的區別是:聚類演算法是無監督的學習演算法,而分類演算法屬於監督的學習演算法。

    在聚類演算法中根據樣本之間的相似性,將樣本劃分到不同的類別中,對於不同的相似度計算方法,會得到不同的聚類結果,常用的相似度計算方法有歐式距離法。

二、K-Means演算法的概述

   基本K-Means演算法的思想很簡單,事先確定常數K,常數K意味著最終的聚類類別數,首先隨機選定初始點為質心,並通過計算每一個樣本與質心之間的相似度(這裡為歐式距離),將樣本點歸到最相似的類中,接著,重新計算每個類的質心(即為類中心),重複這樣的過程,直到質心不再改變,最終就確定了每個樣本所屬的類別以及每個類的質心。由於每次都要計算所有的樣本與每一個質心之間的相似度,故在大規模的資料集上,K-Means演算法的收斂速度比較慢。

三、K-Means演算法的流程

  • 初始化常數K,隨機選取初始點為質心
  • 重複計算以下過程,直到質心不再改變
    • 計算樣本與每個質心之間的相似度,將樣本歸類到最相似的類中
    • 重新計算質心
  • 輸出最終的質心以及每個類

優點:易於實現

缺點:可能收斂於區域性最小值,在大規模資料收斂慢

K-Means演算法的缺陷

k均值演算法非常簡單且使用廣泛,但是其有主要的兩個缺陷:

1. K值需要預先給定,屬於預先知識,很多情況下K值的估計是非常困難的,對於像計算全部微信使用者的交往圈這樣的場景就完全的沒辦法用K-Means進行。對於可以確定K值不會太大但不明確精確的K值的場景,可以進行迭代運算,然後找出Cost Function最小時所對應的K值,這個值往往能較好的描述有多少個簇類。

2. K-Means演算法對初始選取的聚類中心點是敏感的,不同的隨機種子點得到的聚類結果完全不同

3. K均值演算法並不適合所有的資料型別。它不能處理非球形簇、不同尺寸和不同密度的簇。

4. 對離群點的資料進行聚類時,K均值也有問題,這種情況下,離群點檢測和刪除有很大的幫助。

由於傳統的K-Means演算法的聚類結果易受到初始聚類中心點選擇的影響,因此在傳統的K-Means演算法的基礎上進行演算法改進,對初始中心點選取比較嚴格,各中心點的距離較遠,這就避免了初始聚類中心會選到一個類上,一定程度上克服了演算法陷入區域性最優狀態。

K-Means優化演算法

為了克服K-Means演算法收斂於區域性最小值的問題,提出了一種二分K-均值(bisecting K-means)

二分K-Means(Bisecting KMeans)演算法的主要思想是:首先將所有點作為一個簇,然後將該簇一分為二。之後選擇能最大限度降低聚類代價函式(也就是誤差平方和)的簇劃分為兩個簇。以此進行下去,直到簇的數目等於使用者給定的數目k為止。以上隱含的一個原則就是:因為聚類的誤差平方和能夠衡量聚類效能,該值越小表示資料點越接近於他們的質心,聚類效果就越好。所以我們就需要對誤差平方和最大的簇進行再一次劃分因為誤差平方和越大,表示該簇聚類效果越不好越有可能是多個簇被當成了一個簇,所以我們首先需要對這個簇進行劃分。

比如要分成5個組,第一次分裂產生2個組,然後從這2個組中選一個目標函式產生的誤差比較大的,分裂這個組產生2個,這樣加上開始那1個就有3個組了,然後再從這3個組裡選一個分裂,產生4個組,重複此過程,產生5個組。這算是一中基本求精的思想。二分k均值不太受初始化的困擾,因為它執行了多次二分試驗並選取具有最小誤差的試驗結果,還因為每步只有兩個質心。

相關推薦

K-means演算法及其優化

本文摘選自:https://blog.csdn.net/google19890102/article/details/26149927https://blog.csdn.net/taoyanqi8932/article/details/53727841https://blog

聚類演算法(一)—— k-means演算法及其改進演算法

      聚類演算法是一種無監督學習,它把資料分成若干類,同一類中的資料的相似性應儘可能地大,不同類中的資料的差異性應儘可能地大。聚類演算法可分為“軟聚類”和“硬聚類”,對於“硬聚類”,樣本中的每一個點都是 100%確定分到某一個類別;而“軟聚類”是指樣本點以一定的概率被分

[聚類演算法]K-means優缺點及其改進

寫在前:本文參考了國內一些碩士論文以及一些期刊。筆者會在後面寫上具體的參考文獻。僅供學習,請勿抄襲。 K-means聚類小述 大家接觸的第一個聚類方法,十有八九都是K-means聚類啦。該演算法十分容易理解,也很容易實現。其實幾乎所有的機器學習和資料探勘

K-means演算法優化(二分K-means演算法

from numpy import * import xlrd import matplotlib.pyplot as plt # 計算歐氏距離 def distEclud(vector1, vector2): ''' :param vector1: 第j個均值向量 :param v

機器學習——K-means演算法(聚類演算法

聚類 在說K-means聚類演算法之前必須要先理解聚類和分類的區別。 分類其實是從特定的資料中挖掘模式,作出判斷的過程。比如Gmail郵箱裡有垃圾郵件分類器,一開始的時候可能什麼都不過濾,在日常使用過程中,我人工對於每一封郵件點選“垃圾”或“不是垃圾”,過一段時間,Gmail就體現出

第九次作業---K-means演算法應用:圖片壓縮

讀取一張示例圖片或自己準備的圖片,觀察圖片存放資料特點。 from sklearn.datasets import load_sample_image from sklearn.cluster import KMeans import matplotlib.pyplot as plt import

K-means演算法應用:圖片壓縮

from sklearn.datasets import load_sample_image from matplotlib import pyplot as plt from sklearn.cluster import KMeans import numpy as np #讀取一張示例圖片或自己準

吳恩達機器學習 - 無監督學習——K-means演算法 吳恩達機器學習 - 無監督學習——K-means演算法

原 吳恩達機器學習 - 無監督學習——K-means演算法 2018年06月25日 12:02:37 離殤灬孤狼 閱讀數:181

第九次作業——K-means演算法應用:圖片壓縮

一.讀取一張示例圖片或自己準備的圖片,觀察圖片存放資料特點。 根據圖片的解析度,可適當降低解析度。 再用k均值聚類演算法,將圖片中所有的顏色值做聚類。 然後用聚類中心的顏色代替原來的顏色值。 形成新的圖片。 觀察原始圖片與新圖片所佔用記憶體的大小。 將原始圖片與新圖片儲存成檔案,觀察檔案的大小。

機器學習--K-means演算法

概述 聚類(K-mean)是一種典型的無監督學習。 採用距離作為相似性的評價指標,即認為兩個物件的距離越近,其相似度就越大。 該演算法認為類簇是由距離靠近的物件組成的,因此把得到緊湊且獨立的簇作為最終目標。 核心思想 通過迭代尋找k個類簇的一種劃分方案,使得用這k個類簇的均值來代

K-means演算法的matlab程式 K-means演算法的matlab程式(初步)

K-means演算法的matlab程式 在“K-means演算法的matlab程式(初步)”這篇文章中已經用matlab程式對iris資料庫進行簡單的實現,下面的程式最終的目的是求準確度。 作者:凱魯嘎吉 - 部落格園 http://www.cnblogs.com/kailugaji/ 1.採

菜鷄日記——KMP演算法及其優化與應用

一、什麼是KMP演算法 KMP演算法,全稱Knuth-Morris-Pratt演算法,由三位科學家的名字組合命名,是一種效能高效的字串匹配演算法。假設有主串S與模式串T,KMP演算法可以線上性的時間內匹配出S中的T,甚至還能處理由多個模式串組成的字典的匹配問題。 二、KMP演算法原理及實現

學習筆記(十一):使用K-Means演算法檢測DGA域名

1.資料收集與清洗:同(十) 2.特徵化:同(十) 3.訓練樣本 model = KMeans(n_clusters = 2, random_state=random_state) y_pred = model.fit_predict(x)  4.效果驗證:使用TSNE將

機器學習十大經典演算法:(2)k-means演算法

1.基本Kmeans演算法[1] [cpp]  view plain  copy 選擇K個點作為初始質心   repeat  

使用K-means演算法聚類灰度圖

github資料集: 智慧演算法的課件和參考資料以及實驗程式碼 我們可以用k-means演算法將灰度圖分成N個梯度 我們知道,一般的彩色影象指的是在RGB顏色空間下的影象,這樣的影象三個通道分別是R(red)G(green)B(blue)。而灰度圖指的是單通道的,將三通道的影象

K-means演算法和KNN演算法

github: 智慧演算法的課件和參考資料以及實驗程式碼   K-means是最為常用的聚類演算法,該演算法是將相似的樣本歸置在一起的一種無監督演算法。採用距離作為相似性的評價指標,即認為兩個物件的距離越近,其相似度就越大。 演算法主要步驟可描述如下: &nb

作業:K-means演算法應用:圖片壓縮

from sklearn.datasets import load_sample_image from sklearn.cluster import KMeans import matplotlib.pyplot as plt #讀取一張示例圖片或自己準備的圖片,觀察圖片存放資料特點 china =

spark 實現K-means演算法

spark 實現K-means演算法 package kmeans; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFou

引力財經直播室K-means演算法

           引力財經直播室平臺是國內知名平臺,恆生指數、恆指交易、恆指直播間、美原油、美黃金、德指期貨、各種投資品種直播喊單,盡在引力財經直播室!引力財經直播室http://www.yinlicj.com &nb

使用Spark Mlib K-Means演算法分析網路攻擊資料

package apache.spark.mlib.rdd.kmeanclustering import org.apache.spark.ml.clustering.KMeans import org.apache.spark.ml.feature.{StandardScaler, Vect