1. 程式人生 > >K_means的改進:二分K_means演算法

K_means的改進:二分K_means演算法

傳統K_means演算法存在的缺陷

(1)演算法的初始中心點選擇與演算法的執行效率密切相關,而隨機選取中心點有可能導致迭代次數很大或者限於某個區域性最優狀態;通常 k << n,且 t  << n,所以演算法經常以區域性最優收斂。

(2)K均值的最大問題是要求使用者必須事先給出 k 的值,k 的選擇一般都基於一些經驗值和多次試驗結果,對於不同的資料集,k 的取值沒有可借鑑性。

(3)對異常偏離的資料敏感——離群點;K均值對 “ 噪聲 ” 和孤立點資料都是敏感的,少量的這類資料就能對平均值造成極大的影響。

二分K_means演算法簡介

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

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

相關推薦

K_means改進二分K_means演算法

傳統K_means演算法存在的缺陷 (1)演算法的初始中心點選擇與演算法的執行效率密切相關,而隨機選取中心點有可能導致迭代次數很大或者限於某個區域性最優狀態;通常 k << n,且 t  << n,所以演算法經常以區域性最優收斂。 (2)K均值的最大

Java學習筆記30二分查詢演算法程式碼

package create; public class Demo1_Array { public static void main(String[] args){ int[] arr = {11,22,33,44,55,66,77}; System.out.println(ge

演算法05二分搜尋演算法——分治法Part1

摘自網路: 分治法的設計思想是,將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。 分治法所能解決的問題一般具有以下幾個特徵: 1.該問題的規模縮小因為問題的計算複雜性一般是隨著問題規模的增加 2.該問題可以分解為若干個規模較小的相同問題,即

查詢演算法二分(折半)查詢

package com.Algorithm.Search_Sort; import java.util.Arrays; public class Search { public int array[] = {99,34,76,92,34,17,77,41,40,36,6}; //二分

『PHP學習筆記』系列六二分法查詢演算法

演算法原理: 二分法查詢適用於資料量較大時,但是資料需要先提前排好順序。(必須是順序儲存的資料!) 確定該陣列中間元素位置:intval(0+(count($arr)-1))/2)) 如果中間位置的元素值,與要查詢的值相等,則直接返回。 如果中間位置的元素值,與要查詢

資料結構與演算法二分查詢

資料結構與演算法:二分查詢 最近看到一本關於資料結構的書,甚是有趣,稍以記載,方便以後回憶! 一、二分查詢 假設要在電話簿中找一個名字以K打頭的人,(現在誰還用電話簿!)可以從頭開始翻頁,直到進入以K打頭的部分。但你很可能不這樣做,而是從中間開始,因為你知道以K打頭的名字在電話簿中間

海量資料探勘MMDS week2: 頻繁項集挖掘 Apriori演算法改進基於hash的方法

海量資料探勘Mining Massive Datasets(MMDs) -Jure Leskovec courses學習筆記之關聯規則Apriori演算法的改進:基於hash的方法:PCY演算法, Multistage演算法, Multihash演算法 Apriori演

海量資料探勘MMDS week2: 頻繁項集挖掘 Apriori演算法改進非hash方法

海量資料探勘Mining Massive Datasets(MMDs) -Jure Leskovec courses學習筆記之關聯規則Apriori演算法的改進:非hash方法 - 大資料集下的頻繁項集:挖掘隨機取樣演算法、SON演算法、Toivonen演算法 Apri

查詢演算法二分查詢、順序查詢

查詢演算法 查詢演算法是在存在的序列(list) 中查詢特定的目標(target),要求序列中每個記錄必須與一個關鍵詞(key)關聯才能進行查詢。 查詢演算法通常需要兩個輸入: 1、被查詢的序列 2、要查詢的關鍵詞 查詢演算法的輸出引數和返回值:

計算機圖形學 學習筆記(二)多邊形掃描轉換X掃描線演算法改進的X掃描線演算法

光柵圖形學演算法 2.4 多邊形掃描轉換-X掃描線演算法 多邊形的掃描轉換和區域填充這個問題是怎麼樣在離散的畫素集上表示一個連續的二維圖形? 多邊形有兩種重要的表示方法:頂點表示和點陣表示 頂點表示 頂點表示是用多邊形的頂點序列來表

二分查詢演算法的兩種實現方式非遞迴實現和遞迴實現

二分查詢的條件是對一組有序陣列的查詢,這一點很容易忘記,在使用二分查詢的時候先要對陣列進行排序。 先說一下二分查詢的思路:一個有序陣列,想要查詢一個數字key的下標,首先算出中間下標mid,利用mid把這個陣列分為兩半,前一半從下標0到mid-1,後一半從mid+1到陣列最

演算法改寫二分搜尋演算法

設a[0:n-1]是已排好序的陣列,請改寫二分搜尋演算法,使得當x不在陣列中時,返回小於x的最大元素位置i和大於x的最小元素位置j。當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置。問題來源:題目來源:《計算機演算法設計與分析》王曉東 輸入格式: 輸入

常見的演算法二分法查詢,氣泡排序和選擇排序

今天主要說一下常見的演算法 ,於是我百度了一下點進那 “ 牛逼 ” 的知乎看了一眼 ,完蛋了 ,這都是些神馬 ??? 我怎麼一個都不會呢 ,我要的可是那種很常見的演算法啊 ,好吧 ,無形中又被深深的傷了一刀 ,好在我迅速調節狀態 。管他呢 ,我就按照自己 low

數據結構和算法之二分法demo

splay ++ ring maxsize ins 二分查找 logs bound log package com.js.ai.modules.pointwall.testxfz; class OrdArray{ private long[] a; private i

python的算法二分法查找(1)

port == 歸類 算法 開始 log spa loop __name__ 1.什麽是二分法查找: 1.從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結束; 2.如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始

BZOJ 1191 [HNOI2006]超級英雄Hero二分圖匹配 匈牙利算法

als pre edge ont com def false tar fin 題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 題意:   有m道題,每答對一題才能接著回答下一個問題。   你一道題都不會,但

BZOJ 1650 [Usaco2006 Dec]River Hopscotch 跳石子二分

code amp using names ref www bsp problem ans 題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id=1650 題意:   數軸上有n個石子,第i個石頭的坐標為Di,現在要從0跳到

碼海拾遺二分查找

art d+ 位置 size urn int blog chan hang   二分查找法(Binary Search):在有序數組中查找某一特定元素位置的搜索算法   實現: 1 //遞歸二分查找 2 template <typename T> 3 i

模板二分圖染色+判定

vector 二分圖判定 一次 二分 color nbsp logs 如果 int 1 //鄰接表dfs二分圖判定 2 vector <int> G[N]; 3 int col[N]; 4 5 //頂點染色c,-c 6 bool df

python查找算法二分

就是 common 復制 container pytho max images print 範圍 二分法是一種快速查找的方法,時間復雜度低,邏輯簡單易懂,總的來說就是不斷的除以2除以2... 例如需要查找有序數組arr裏面的某個關鍵字key的位置,那麽首先確認a