1. 程式人生 > >機器學習之聚類分析---K-means(一)

機器學習之聚類分析---K-means(一)

初探k-means(Matlab)

俗話說:聚類分析的目的是:在資料中發現數據物件之間的關係,並將資料進行分組,使得組內的相似性儘可能大組間的差別可能大,那麼聚類的效果越好。

例如在市場營銷中,聚類分析可以幫助市場分析人員從消費者資料庫中區分出不同的消費群體來,並且概括出每一類消費者的消費模式或者說習慣。在機器學習中,聚類分析也可以作為其他分析演算法的一個預處理步驟。

    下面介紹諸多聚類演算法中的K-means演算法。

    在機器學習與資料探勘中,K-Means是一種cluster analysis的演算法,屬於無監督學習的演算法範疇。K-Means演算法簡單,易於理解。其具體演算法流程如下:

    (1)隨機從資料中選取K個元素,作為k個簇(這裡可以理解為各個分類)中各自的中心。

    (2)分別計算各個元素到這K個簇的距離,並將這些元素劃歸到距離最近的簇。這裡可以認為距離越近,兩者之間越相似。而不同距離的度量其聚類結果不同。這裡提供了不同的距離參考。點選開啟連結

    (3)重新計算各個簇的中心點。例如取平均的方式。

    (4)重複2~3步,直到迭代次數達到最大值或者中心點移動小於某個臨界值(即認為已經收斂)。

    下面利用Matlab具體進行講解:

    一、首先輸入資料,這裡選用Matlab自帶的資料fisheriris,然後判斷資料中是否含有異常值

clear
clc
%%輸入資料
load fisheriris
data= meas(:,3:4);
figure(1)
plot(data(:,1),data(:,2),'*')

%%判斷資料中是否含有錯誤資料或非法字元
isNAN = any(isnan(data),2);  %any表示有非0元素時返回為1,any(A,2)表示矩陣的行向量進行判斷
hadNAN=any(isNAN);          %表示資料中含有壞資料
if hadNAN
    disp('kmeans:MissingDataRemoved');
    disp(['missaddress is located ' num2str(find(isNAN==1))])
    data = data(~isNAN,:);
end

       二、配置K-means引數,包括聚類類別K、設定距離方式以及最大迭代次數和偏差等。

%%設定聚類類別k
k=3;

%%設定距離方式
%距離選擇
%歐式距離:'euclidean',標準歐式距離:'seuclidean'
%曼哈頓距離(城市區塊距離):'cityblock'
%閔可夫斯基距離:'minkowski'
%切比雪夫距離:'chebychev'
%夾角餘弦距離:'cosine'
%相關距離:'correlation'
%漢明距離:'hamming'
distanceSize='euclidean';

%%設定最高迭代次數step和偏差
step=10;
maxdeviation=1e-5;
    三、開始K-means聚類
[m,n]=size(data);         %資料個數為m個,維度為n維
center = zeros(k,n+1);    %聚類中心
center(:,n+1) =1:k ;      %生成聚類的類別
dataSize=zeros(m,1);      %生成資料類別
for j=1:k
    center(j,1:n)=data(randi([1,m]),:);  %隨機產生k箇中心
end


for i=1:step
    %%第二步,分別計算各個點到中心的距離,並將離中心距離近的點歸為一類
    %計算距離
    for j=1:k
        distance(:,j)=pdist2(data,center(j,1:n),distanceSize);
    end
    %取距離最小的點歸為一類
    [~,temp]=min(distance,[],2);
    dataSize=temp;
    oldcenter=center;
    %%更新中心點
    for j=1:k
        center(j,1:n)=mean(data(dataSize==j,:));
    end

    deviation=sum(abs(center-oldcenter));  %殘差
    if deviation<maxdeviation
        break;
    end    
end

    四、畫出各個類別

figure(2)
for i=1:k
    scatter(data(dataSize==i,1),data(dataSize==i,2));
    hold on
end
plot(center(:,1),center(:,2),'x','MarkerSize',10);
hold off

    可以看出這裡標註了聚類結果和各個簇的中心點位置。下面是運算資料結構:


我們可以看到這裡j=3;也就是說只迭代了3次,演算法達到收斂。

因此,K-means具有如下優點:

(1)演算法簡單,特別對於類球型分佈的資料效果特別好。

(2)收斂速度快,往往只需要5~6步即可達到收斂。

(3)演算法複雜度為O(t,k,n)。其中t為迭代次數,k為分類的個數,n為資料點的個數。

當然,K-means也有一些缺點。

(1)由於聚類演算法為無監督學習,人們事先無法確定到底需要分多少個簇,也就是說k值無法提前確定。

(2)同很多演算法一樣,它可能會收斂到區域性最優解。而這和初始點的選取有關,我們可以採用多次選取初始點,最後選擇效果最好的結果。

(3)對噪聲影響敏感。我們可以看出K-means中means表示平均值,而平均值往往對噪聲敏感,一個離群點往往會對整個結果造成很大影響。

(4)不適合某些非球類資料分佈。

值得注意的是,這些缺點也正是K-means可以改進的地方。

    最後,這裡再介紹一個指標:silhouette。

這裡,silhouette(i)=(b(i)-a(i))/max{b(i),a(i)}

a(i)表示第i個點到所被分類的簇的中心點的距離。

b(i)表示第i個點到其他簇中心點距離的最小值。

那麼silhouette表示什麼呢?我們可以看出,當a(i)<b(i)時,silhouette>0,表示該點距離該類中心距離更近;當a(i)>b(i)時,silhouette<0表示該點距離其他類中心距離更近,這就好比一個人與他宿舍的人不如與他隔壁宿舍的人更加親近。

如圖所示為silhouette結果

%%silhouette
figure(3)
s=silhouette(data,dataSize);

可以看到圖中有個別點的silhouette為負數,我們將其找到,這裡‘*’表示該點silhouette為負數。我們可以看到由於資料的分佈為狹長的傾斜向上的分佈,右上方兩類距離很近,在這兩類的交界處,很容易出現劃歸為A類的資料離另一類B更近的現象。



相關推薦

機器學習分析---K-means

初探k-means(Matlab)俗話說:,聚類分析的目的是:在資料中發現數據物件之間的關係,並將資料進行分組,使得組內的相似性儘可能大,組間的差別盡可能大,那麼聚類的效果越好。例如在市場營銷中,聚類分

機器學習多變量回歸模型

廢話 主要是用sklearn庫中的linear_model中的LinearRegression模型進行訓練,另外對於訓練集資料的讀取用到了上一篇提到的檔案讀取的相關操作,這裡熟悉一下https://blog.csdn.net/jiaowosiye/articl

[五]機器學習

5.1 實驗概要 通過K-Mean,譜聚類,DBSCAN三種演算法解決基本的聚類問題,使用sklearn提供的聚類模組和鳶尾花資料集,對聚類效果進行橫向比較。 5.2 實驗輸入描述 資料集:鳶尾花資料集,詳情見[機器學習之迴歸]的Logistic迴歸實驗 5.3 實驗步驟 匯入資

吳恩達機器學習演算法的引數選擇以及優化

對於K(k<樣本量的)均值聚類,一般引數的自定義主要有兩個,一個是聚類中心初始位置的選擇,二是K值的選擇 優化目標:每個樣本點到該點聚類中心的平方的累加 解決聚類中心的初始化問題: 隨機挑選樣本點作為聚類中心,這個過程重複50-1000次,選出J值最低的(通常K值為2-10的時候

機器學習

在機器學習和資料探勘中,我們經常需要知道個體間差異的大小,進而評價個體的相似性和類別。最常見的是資料分析中的相關分析,資料探勘中的分類和聚類演算法,如 K 最近鄰(KNN)和 K 均值(K-Means)等等。根據資料特性的不同,可以採用不同的度量方法

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

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

機器學習演算法層次

層次聚類也叫連通聚類方法,有兩個基本方法:自頂而下和自底而上。自頂而將所有樣本看做是同一簇,然後進行分裂。自底而上將初所有樣本看做不同的簇,然後進行凝聚。這種聚類的中心思想是:離觀測點較近的點相比離觀測點較遠的點更可能是一類。 這種方法首先會生成下面的樹

opencv學習k均值

在無監督學習中,資料不帶任何標籤。能找出資料內在分類規則,並分成獨立的點集(蔟),演算法稱為聚類演算法。 K均值聚類(K-means) K-均值是最普及的聚類演算法,演算法接受一個未標記的資料集,然

R語言學習分析

1.動態聚類:k—means 基本思想: (1)選擇K個點作為質心 (2)將每個點指派到最近的質心,形成K個類 (3)重新計算每個類的質心 (4)重複2—3知道質心不發生變化 例項: 優缺點: (1)有效率且不易受初始值的影響 (2)不能處理非球形簇 (3)不能處理不同尺

資料建模-分析-K-Means演算法

常用聚類方法 類別 包括主要演算法 劃分(分裂)方法 K-Means演算法(K-平均)、K-MEDOIDS演算法(K-中心點)、CLARANS演算法(基於選擇的演算法) 層次分析方法 BIRCH演算法(平衡迭代規約和聚類)、CURE演算法(代表點

機器學習經典演算法 —— k-均值演算法附python實現程式碼及資料集

目錄 工作原理 python實現 演算法實戰 對mnist資料集進行聚類 小結 附錄 工作原理 聚類是一種無監督的學習,它將相似

機器學習采樣和變分

坐標 led 學習工具 pan 相對 拒絕 轉移 除了 每一個 摘要:   當我們已知模型的存在,想知道參數的時候我們就可以通過采樣的方式來獲得一定數量的樣本,從而學習到這個系統的參數。變分則是在采樣的基礎上的一次提升,采用相鄰結點的期望。這使得變分往往比采樣算法更高效:用

es6零基礎學習項目目錄創建

起名字 ack 文件夾 零基礎 常見 基本 font install 有一個 和大家分享一下在學習es6的過程中所積累的東西,也希望更多的朋友能夠互相學習 首先創建項目目錄 打開你的命令行,什麽文件下都可以,大家請隨意,我自己用的git,輸入 mkdir es6    創建

機器學習】谷歌的速成課程

label spa dev 分類 ram 做出 org ron 表示 問題構建 (Framing) 什麽是(監督式)機器學習?簡單來說,它的定義如下: 機器學習系統通過學習如何組合輸入信息來對從未見過的數據做出有用的預測。 標簽 在簡單線性回歸中,標簽是我們要預測

機器學習入門-貝葉斯分類器

今天學習的內容是貝葉斯分類器。 在正式介紹之前,先說兩個名詞: 標稱型資料:只在有限的目標集中取值,如真與假(主要用於分類) 數值型資料:可從無限的數值集合中取值(主要用於迴歸分析) 貝葉斯決策論 Bayes Decision theor

HTTP學習瞭解Web及網路基礎

1.1使用HTTP協議訪問Web 你知道當我們在網頁瀏覽器(Web browser)的位址列中輸入URL時,Web頁面時如何呈現的嗎? 1.在瀏覽器位址列輸入URL之後,資訊會被送往某處 2.在某處獲得回覆,內容酒會顯示在Web頁面上 Web頁面當然不能憑空顯示出來,根據Web瀏覽器

機器學習在量化交易上的運用

首先闡述下背景。 也需要一個自己去做總結提高的地方,所以在此開個博。 廢話少說,開始幹活(後面也請諒解想到哪寫到哪的風格,因為這裡很多東西是用分享的方式在自己總結) 今天的第一個任務是在TB上實現均線特徵的線性迴歸交易。 之前這個東西我做過,但是卻被某些機器學習方面的大牛批

android底層驅動學習I2C概述及工作原理

1.概述:I²C 是Inter-Integrated Circuit的縮寫,發音為"eye-squaredcee" or "eye-two-cee" , 它是一種兩線介面。I²C 只是用兩條雙向的線,一條 Serial Data Line (SDA) ,另一條Serial

《多執行緒程式設計》學習七:等待/通知機制

         今天起開始學習執行緒之間的通訊。等待/通知機制是通過Object類的wait()與notify()方法來實現的,這兩個方法在同步方法或同步程式碼塊中才能被執行。wait()方法將當前執行緒放入“等待執行佇列”中,使執行緒在wait()方法所處程式碼處停止執

機器學習中各個算法的優缺點

預測 http 關於 人工智 ash id3 sting 機器學習算法 都是 由於人工智能的火熱,現在很多人都開始關註人工智能的各個分支的學習。人工智能由很多知識組成,其中人工智能的核心——機器學習是大家格外關註的。所以說,要想學好人工智能就必須