1. 程式人生 > >[聚類演算法]K-means優缺點及其改進

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

寫在前:本文參考了國內一些碩士論文以及一些期刊。筆者會在後面寫上具體的參考文獻。僅供學習,請勿抄襲。

K-means聚類小述

大家接觸的第一個聚類方法,十有八九都是K-means聚類啦。該演算法十分容易理解,也很容易實現。其實幾乎所有的機器學習和資料探勘演算法都有其優點和缺點。那麼K-means的缺點是什麼呢?
總結為下:
(1)對於離群點和孤立點敏感;
(2)k值選擇;
(3)初始聚類中心的選擇;
(4)只能發現球狀簇。
對於這4點呢的原因,讀者可以自行思考下,不難理解。針對上述四個缺點,依次介紹改進措施。

改進1

首先針對(1),對於離群點和孤立點敏感,如何解決?筆者在前面的一篇部落格中,提到過離群點檢測的LOF演算法,通過去除離群點後再聚類,可以減少離群點和孤立點對於聚類效果的影響。

改進2

k值的選擇問題,在安徽大學李芳的碩士論文中提到了k-Means演算法的k值自適應優化方法。下面將針對該方法進行總結。
首先該演算法針對K-means演算法的以下主要缺點進行了改進:
1)必須首先給出k(要生成的簇的數目),k值很難選擇。事先並不知道給定的資料應該被分成什麼類別才是最優的。
2)初始聚類中心的選擇是K-means的一個問題。
李芳設計的演算法思路是這樣的:可以通過在一開始給定一個適合的數值給k,通過一次K-means演算法得到一次聚類中心。對於得到的聚類中心,根據得到的k個聚類的距離情況,合併距離最近的類,因此聚類中心數減小,當將其用於下次聚類時,相應的聚類數目也減小了,最終得到合適數目的聚類數。可以通過一個評判值E來確定聚類數得到一個合適的位置停下來,而不繼續合併聚類中心。重複上述迴圈,直至評判函式收斂為止,最終得到較優聚類數的聚類結果。

參考資料

李芳. K-Means演算法的k值自適應優化方法研究[D]. 安徽大學, 2015.

改進3

對初始聚類中心的選擇的優化。一句話概括為:選擇批次距離儘可能遠的K個點。具體選擇步驟如下。

首先隨機選擇一個點作為第一個初始類簇中心點,然後選擇距離該點最遠的那個點作為第二個初始類簇中心點,然後再選擇距離前兩個點的最近距離最大的點作為第三個初始類簇的中心點,以此類推,直至選出K個初始類簇中心點。

對於該問題還有個解決方案。之前我也使用過。熟悉weka的同學應該知道weka中的聚類有一個演算法叫Canopy演算法。
選用層次聚類或者Canopy演算法進行初始聚類,然後利用這些類簇的中心點作為KMeans演算法初始類簇中心點。該方法對於k值的選擇也是十分有效的。

點選獲取參考資料

改進4

只能獲取球狀簇的根本原因在於,距離度量的方式。在李薈嬈的碩士論文K_means聚類方法的改進及其應用中提到了基於2種測度的改進,改進後,可以去發現非負、類橢圓形的資料。但是對於這一改進,個人認為,並沒有很好的解決K-means在這一缺點的問題,如果資料集中有不規則的資料,往往通過基於密度的聚類演算法更加適合,比如DESCAN演算法。

參考資料

李薈嬈. K–means聚類方法的改進及其應用[D]. 東北農業大學, 2014.

筆者水平有限,難免有誤,歡迎指出。當然也有其他的更好的方案,可以提出,我也想學習學習。

相關推薦

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

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

演算法-K-means

K-means演算法****** 步驟: 1.從訓練資料中隨機選取k個初始點,作為k個初始簇的中心點 2.計算每個點到中心點的歐式距離,將其歸併到距離最近的簇中,直至所有點劃分完成 3.計算每個簇新的中心點 4.如果相對於原來中心點沒有變化或者變化數值小於給定閾值,則演算

資料演算法-K-means演算法

深入淺出K-Means演算法 摘要: 在資料探勘中,K-Means演算法是一種 cluster analysis 的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種子點最近均值的演算法。 K-Means演算法主要解決的問題如下圖所示。我們可以看到,在圖的左邊有一些點,我們用肉眼可以看出來有四

機器學習 (Clustering)____K-均值演算法(K-means Clustering) 層次(Hierarchical Clustering)

____tz_zs學習筆記聚類(Clustering) 顧名思義,就是將相似樣本聚合在一起,屬於機器學習中的非監督學習 (unsupervised learning) 問題。聚類的目標是找到相近的資料點,並將相近的資料點聚合在一起。實現聚類的演算法主要有:1.K-均值聚類演算

機器學習學習筆記 第十九章 演算法-K-MEANS

聚類演算法 聚類的概念: 主要用來處理無監督問題,因為我們手上沒有標籤了,靠電腦自己進行分類 聚類是指把相似的東西分到一組 難點 如何評估呢(因為沒有了標籤,難以對比正確與否,很多評估方法失效了)

演算法-K-means-C++實現

程式流程圖: K-means核心功能函式,首先,隨機選擇K-中心點(中心點座標為簇中所有點的x座標的平均值,y座標的平均值,該點用於記錄位置,不屬於原始資料集);迴圈判斷中心點是否不變,若是,將二維點對資訊寫入clustering檔案,程式結束。否則,對於每個二維資料點,

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

k均值演算法 k-means聚類又稱k均值聚類。 給定N個數據點{xn→∈RM,n=1,⋯,N},M是資料點的維度。現在希望把資料點聚類成K個簇。 演算法: (1)初始化:在給定的N個樣本中隨機選擇K個作為初始聚類中心 (2)更新劃分:對

演算法K-Means原理與應用

聚類演算法是一類非監督學習的演算法,在給定的一個數據集中,給了N個樣本,沒有給出樣本對應的標籤類別資料y,可以利用聚類演算法,進行標籤的分類。 K-Means演算法的原理與步驟: 1>   在N個樣本總體中,隨機抽出k個初始資料的質心,接著把資料集中的樣本取出,計算

機器學習——K-均值K-means演算法

本文轉載自:https://www.cnblogs.com/ybjourney/p/4714870.html 一 K-均值聚類(K-means)概述 聚類 “類”指的是具有相似性的集合。聚類是指將資料集劃分為若干類,使得類內之間的資料最為相似,各類之間的資料相

K-means演算法

  聚類是一種無監督學習,讓相似的作為一類,不相似的當然不能歸為一類.非常符合我們日常的認知行為.據悉,大多數聚類問題都是NP完全問題,即不存在能夠找到全域性最優解的有效解法.我們常常是將可能的聚類情況定義一個代價函式,問題就轉化為尋找一個代價最小的劃分,變成了

無監督學習——k-means演算法

無監督學習是一種對不含標記的資料建立模型的機器學習正規化。 無監督學習應用領域: - 資料探勘 - 醫學影像 - 股票市場分析 - 計算機視覺

演算法實踐(一)——層次K-means

因為百度雲的文章裡面有些圖片丟失了,想起這篇東西之前被一箇中國統計網轉發過,所以自己搜了一下想直接把圖搞回來,結果發現到處轉載的也有不少,自己現在發倒好像是抄襲似的。其實這篇文章裡面特別有價值的東西不算太多,PCCA算是一個知道的人不多而且也挺有意義的演算法,譜

分析層次k-means演算法

參考文獻: [1]Jure Leskovec,Anand Rajaraman,Jeffrey David Ullman.大資料網際網路大規模資料探勘與分散式處理(第二版) [M]北京:人民郵電出版社,2015.,190-199; [2]蔣盛益,李霞,鄭琪.資料探勘原理與實踐 [M]北京:電子工業出版社,20

分析(K-means 層次和基於密度DBSCAN演算法三種實現方式)

之前也做過聚類,只不過是用經典資料集,這次是拿的實際資料跑的結果,效果還可以,記錄一下實驗過程。 首先: 確保自己資料集是否都完整,不能有空值,最好也不要出現為0的值,會影響聚類的效果。 其次: 想好要用什麼演算法去做,K-means,層次聚類還是基於密

之均值k-means演算法的python實現

# -*- coding: UTF-8 -*- import numpy import random import codecs import copy import re import matplotlib.pyplot as plt def calcuDistance(vec1, vec2):

K均值--利用k-means演算法分析NBA近四年球隊實力

分類作為一種監督學習方法,要求必須事先明確知道各個類別的資訊,並且斷言所有待分類項都有一個類別與之對應。但是很多時候上述條件得不到滿足,尤其是在處理海量資料的時候,如果通過預處理使得資料滿足分類演算法的要求,則代價非常大,這時候可以考慮使用聚類演算法。聚類屬於無監督學習,相比於分類,聚類不依賴預定義的類和類標

Python機器學習演算法實踐——k均值k-means

一開始的目的是學習十大挖掘演算法(機器學習演算法),並用編碼實現一遍,但越往後學習,越往後實現編碼,越發現自己的編碼水平低下,學習能力低。這一個k-means演算法用Python實現竟用了三天時間,可見編碼水平之低,而且在編碼的過程中看了別人的編碼,才發現自己對

層次以及k-means演算法

一、實驗內容 給定國際通用UCI資料庫中FISHERIRIS資料集,其meas集包含150個樣本資料,每個資料含有鶯尾屬植物的4個屬性,即萼片長度、萼片寬度、花瓣長度,單位為cm。上述資料分屬於species集的三種setosa、versicolor和virg

分析演算法Python3.6實踐K均值K-means

在http://blog.csdn.net/zouxy09/article/details/17589329 上看到聚類分析演算法,但是是基於python2.7.5版本,直接移植到Python3.6會有問題,更改程式碼後為增加對比性,繪製原始資料不部分;程式碼如下: ##

【機器學習】演算法:層次K-means

     所謂聚類,就是將相似的事物聚集在一 起,而將不相似的事物劃分到不同的類別的過程,是資料分析之中十分重要的一種手段。比如古典生物學之中,人們通過物種的形貌特徵將其分門別類,可以說就是 一種樸素的人工聚類。如此,我們就可以將世界上紛繁複雜的資訊,簡化為少數方便人們理解的類別,可以說是人類認知這個