c均值聚類matlab程序_機器學習筆記-9-聚類

1 K-means算法

K-means是最普及的聚類算法,算法接受一個未標記的數據集,然后將數據聚類成不同的組。
它是一個迭代算法,假設我們想要將數據聚類成 n 個組,其方法為:

  1. 選擇K個隨機的點,稱為聚類中心
  2. 對于數據集中的每一個數據,按照距離K個中心點的距離,將其與距離最近的中心點關聯起來,與同一個中心點關聯的所有點聚成一類
  3. 計算每一類的平均值,將該類所關聯的中心點移動到平均值的位置
  4. 重復步驟2-3,直至中心點不再變化

偽代碼表示為:

Repeat { 
for i = 1 to m 
c(i) := 當前樣本x(i)與k個聚類中心中距離最近的索引 index (form 1 to K) of cluster centroid closest to x(i) 
for k = 1 to K 
μk := k聚類中樣本的均值,即聚類中心 average (mean) of points assigned to cluster k
}

1.1 優化目標

用μ^1,μ^2,...,μ^k 來表示聚類中心,用c^(1),c^(2),...,c^(m)來存儲與第i個實例數據最近的聚類中心的索引,μ_(c^(i))表示當前樣本x^(i)所處的簇中心,其代價函數與優化目標如下圖所示

abd022701970f896b08b8fb19abaed3c.png
代價函數(失真代價函數)

2f70beaeec1a5f427138625d0913d8ef.png
優化目標

由上圖可知,K-means算法的優化目標即是找出使得代價函數最小的c^(i)和μ^(i)

1.2 隨機初始化

在運行 K-均值算法之前,首先要隨機初始化所有的聚類中心點
1. 選擇K<m,即聚類中心點的個數要小于所有訓練集實例的數量
2. 隨機選擇K個訓練實例(x^(i)),然后令K個聚類中心分別與這K個訓練示例相等

K-means的一個問題為,他有可能會停留在一個局部最小值處,解決這個問題的方法如下:

多次運行 K-均值算法,每一次都重新進行隨機初始化,最后再比較多次運行 K-means的結果,選擇代價函數最小的結果。

這種方法在 較小的時候(2-10)還是可行的,但是如果 較大,這么做也可能不會有明顯地改善。

1.3 選擇聚類數

一個是肘部法則,不斷改變K值,計算每一個K的代價,如下圖左所示,如若出現了一個類似于肘關節的拐點的話,那么就采用該K值,但如果像下圖右所示,是較為光滑的曲線的話,就不能用肘部法則去選擇K值。

bc13b0d62969eed14039fd7fc271138d.png

大多數情況下聚類個數都是根據各訓練示例可視化之后手動選擇的

2 實現方法

2.1 將各樣本點分簇

def find_closest_centroids(X, centroids):m = X.shape[0]k = centroids.shape[0]idx = np.zeros(m)              # idx[i]為距離樣本i最近的集聚中心的索引for i in range(m):min_dist = 1000000         #每計算完一個樣本點后需要將最短距重新初始化  for j in range(k):dist = np.sum((X[i,:] - centroids[j,:]) ** 2)  #代價函數if dist < min_dist:min_dist = distidx[i] = jreturn idx

2.2 計算各簇的所有樣本的平均值

def compute_centroids(X, idx, k):           #k為聚類中心個數m, n = X.shape                          centroids = np.zeros((k, n))            #聚類中心為(k,n)for i in range(k):indices = np.where(idx == i)        #為i簇的各樣本點的索引centroids[i,:] = (np.sum(X[indices,:], axis=1) / len(indices[0])).ravel()  #len(indices[0])為樣本點的數量,axis=1為按列相加    return centroid

2.3 隨機初始化

def init_centroids(X, k):m, n = X.shapecentroids = np.zeros((k, n))idx = np.random.randint(0, m, k)for i in range(k):centroids[i,:] = X[idx[i],:]  #隨機選擇訓練示例作為聚類中心return centroids

2.4 聚類算法實現

def run_k_means(X, initial_centroids, max_iters):m, n = X.shapek = initial_centroids.shape[0]idx = np.zeros(m)centroids = initial_centroidsfor i in range(max_iters):idx = find_closest_centroids(X, centroids)centroids = compute_centroids(X, idx, k)return idx, centroids# 使用sklearn實現
from sklearn.cluster import KMeans      #導入kmeans庫model = KMeans(n_clusters=16, n_init=100, n_jobs=-1)   
model.fit(data)                         #用數據擬合分類器模型
centroids = model.cluster_centers_
C = model.predict(data)                 #輸出輸入數據的預測結果

筆記參考資料:fengdu78/Coursera-ML-AndrewNg-Notes: 吳恩達老師的機器學習課程個人筆記

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533135.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533135.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533135.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php井字游戲代碼_PHP初級筆試題:Tic-Tac-Toe(n階井字棋)判斷勝負

//Tic-Tac-Toe$n 5;//五階棋盤$res array();function check($arr){$n $GLOBALS[n];$res $GLOBALS[res];//已經下過這一步&#xff0c;返回false&#xff1b;沒有&#xff0c;賦值if (isset($res[$arr[1]][$arr[2]])) {return false;} else {$res[$arr[1]][$arr[2]] $arr[0…

js與html編碼不同,js與html中unicode編碼的使用

【轉】javascript和html中unicode編碼和字符轉義的詳解不是十分理解unicode和html轉義的情況下,可能會誤用,所以下面會對它們再做比較容易理解的解釋: 1.html中的轉義:在html中如果遇到轉義字符(如“ ”),不管你的頁面字符編碼是utf-8 ...javascript和html中unicode編碼和字符轉…

g標簽 怎么設置svg_SVG g元素

SVG 元素SVG 元素用于將SVG形狀分組在一起。分組后&#xff0c;您可以像變形單個形狀一樣變換整個形狀。與 不能單獨成為轉換目標的嵌套 元素相比&#xff0c;這是一個優勢。您還可以設置分組元素的樣式&#xff0c;并像對待單個元素一樣重復使用它們。元素g是用來組合對象的容…

html和css哪個優先,CSS3 | 樣式和優先級

css3一般介紹&#xff1a;CSS注釋&#xff1a;/*CSS*/CSS長度單位&#xff1a;1.px(像素)2.em(倍數&#xff0c;一般用于文字)一、HTML嵌套CSS3樣式&#xff1a;1.外部(推薦)例如HTML文件為index.html將樣式放入另一文件中&#xff0c;index.css以上兩個文件放入同一文件夾下2.…

java上傳視頻到七牛云_Java進階學習:將文件上傳到七牛云中

Java進階學習&#xff1a;將文件上傳到七牛云中通過本文&#xff0c;我們將講述如何利用七牛云官方SDK&#xff0c;將我們的本地文件傳輸到其存儲空間中去。JavaSDK&#xff1a;https://developer.qiniu.com/kodo/sdk/1239/java#server-upload官方SDK&#xff1a;https://devel…

計算機網絡討論4,計算機網絡實驗四

實驗四IEEE 802.3協議分析和以太網一、實驗目的1、分析802.3協議2、熟悉以太網幀的格式二、實驗環境與因特網連接的計算機網絡系統&#xff1b;主機操作系統為windows&#xff1b;Ethereal、IE 等軟件。三、實驗步驟(注&#xff1a;本次實驗先完成前面的“1 俘獲并分析以太網幀…

rust新版組隊指令_Rust最新控制臺命令2017

物品名稱物品代碼電池battery.small骨頭碎片bone.fragments空的豆罐頭can.beans.empty空的金槍魚罐頭can.tuna.empty攝像頭cctv.camera木炭charcoal煤coal石油crude.oil炸藥explosives動物脂肪fat.animal火藥gunpowder高級金屬礦hq.metal.ore金屬碎片metal.fragments金屬礦meta…

python實現mini-batch_Mini-Batch 、Momentum、Adam算法的實現

def random_mini_batches(X,Y,mini_batch_size64,seed0):"""從(X&#xff0c;Y)中創建一個隨機的mini-batch列表參數&#xff1a;X - 輸入數據&#xff0c;維度為(輸入節點數量&#xff0c;樣本的數量)Y - 對應的是X的標簽&#xff0c;【1 | 0】(藍|紅)&#xf…

html5+shim腳本,HTML5探秘:用requestAnimationFrame優化Web動畫

requestAnimationFrame是什么&#xff1f;在瀏覽器動畫程序中&#xff0c;我們通常使用一個定時器來循環每隔幾毫秒移動目標物體一次&#xff0c;來讓它動起來。如今有一個好消息&#xff0c;瀏覽器開發商們決定&#xff1a;“嗨&#xff0c;為什么我們不在瀏覽器里提供這樣一個…

計算機科學與技術的專業論述,關于計算機科學專業的論文題目 計算機科學專業論文題目怎樣定...

【100道】關于關于計算機科學專業的論文題目匯總,作為大學生的畢業生應該明白了計算機科學專業論文題目怎樣定,選一個好的題目后續的計算機科學專業論文寫作起來會更輕松&#xff01;一、比較好寫的計算機科學專業論文題目:1、計算機科學與技術專業應用型人才培養改革調研分析—…

ming window 交叉編譯_opencv3編譯pc端及交叉編譯arm端

環境&#xff1a; opensuse opencv3.4.1 交叉編譯器arm-openwrt-linux 作者&#xff1a;帥得不敢出門https://github.com/opencv/opencv/tree/3.4.1選擇右邊的"clone or download"按鈕進行下載&#xff0c;選擇下載zip我下的是opencv-3.4.1.zip, 3.4.1的版本號…

鎖定計算機 背景圖片,win7系統電腦更換鎖屏壁紙的方法

當win7系統電腦在一段時間不動的話就進入鎖屏狀態&#xff0c;然而很多用戶覺得默認的鎖屏壁紙不好看&#xff0c;就想要更換自己喜歡的鎖屏壁紙&#xff0c;那么win7怎么更換鎖屏壁紙呢&#xff1f;下面給大家講解一下win7系統電腦更換鎖屏壁紙的方法。1、同時按下窗口鍵winR組…

兩階段最小二乘法原理_R語言代寫工具變量與兩階段最小二乘法

我們要估計的模型是yabxcdeyabxcde&#xff0c;其中是解釋變量&#xff0c;&#xff0c;和是我們想要估計的系數。是控制變量&#xff0c;是治療變量。我們特別關注我們的治療效果對。生成數據首先&#xff0c;讓我們生成數據。假設 的工具變量和之間的相關矩陣如下&#xff1a…

計算機二級循環隊列知識點,考點!計算機二級考試公共基礎知識沖刺復習筆記:棧、隊列和循環隊列...

小編所收集到的相關計算機二級考試公共基礎知識沖刺復習筆記&#xff1a;棧、隊列和循環隊列的資料 大家要認真閱讀哦&#xff01;1、棧(Stack)又稱堆棧。(1)棧是一種運算受限的線性表&#xff0c;其限制是僅允許在表的一端進行插入和刪除運算。人們把此端稱為棧頂&#xff0c;…

lua 字符串包含_Programming in Lualua學習第11期 Lua模塊與包

微信公眾號&#xff1a;GameToolDev關注可了解更多的游戲工具開發教程。問題或建議&#xff0c;請公眾號留言;從Lua 5.1開始&#xff0c;我們可以使用require和module函數來獲取和創建Lua中的模塊。從使用者的角度來看&#xff0c;一個模塊就是一個程序庫&#xff0c;可以通過r…

學計算機優盤多少內存夠用,u盤建議買多大內存的

大家好&#xff0c;我是時間財富網智能客服時間君&#xff0c;上述問題將由我為大家進行解答。u盤建議買多大內存主要看用途&#xff0c;一般容量為&#xff1a;1G、2G、4G、8G、16G、32G、64G、128G、256G、512G、1T&#xff0c;具體來說&#xff1a;1、如果是用來存放視頻的&…

.net 從txt中讀取行數據_【VBA項目】從指定文件中讀取數據并繪制圖表

VBA 是一種很久遠的編程語言&#xff0c;但并不過時。在滿足以下兩個條件時&#xff0c;借助 VBA 可以極大的提升生產率&#xff0c;降低出錯率&#xff1a;你的電腦上不允許自主安裝軟件&#xff1b; 你需要執行的工作中大部分的步驟都是固定且重復的。項目背景近期接到一個工…

本地攝像頭應用到遠程計算機,遠程攝像頭設置

可以的&#xff0c;智能家用監控攝像頭&#xff0c;只要你手機有網&#xff0c;千里之外打開手機都可以查看視頻&#xff0c;而且智能攝像頭主要用于看家看孩子看老人照看貓貓狗狗等寵物的。智能攝像頭&#xff0c;與市面上普通的事件錄制不一樣&#xff0c;它可以實現7*24小時…

axure實現復選框全選_jq簡單的全選、反選和全不選效果

jquery是很實用和方便的前端效果庫&#xff0c;可以讓我減少很多的操作和節省很多的時間。今天&#xff0c;我們來說一下jq的全選、全不選和反選效果&#xff0c;本篇講的是最簡單簡潔的jq全選、全不選和反選的例子。如果還有什么其他的功能要求可自己根據所學到的基礎來擴展一…

計算機設備管理器驅動,設備管理器安裝驅動程序的詳細教程

系統出現問題&#xff0c;很多人都會選擇重裝系統。但系統重裝后&#xff0c;我們所做的第一件事&#xff0c;就是安裝驅動。有的驅動程序有安裝包&#xff0c;直接安裝就行了。但是有的驅動是只有驅動程序文件&#xff0c;而沒有執行程序&#xff0c;這時候就需要通過設備管理…