国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

K-means聚類算法原理及實現(xiàn)

這篇具有很好參考價值的文章主要介紹了K-means聚類算法原理及實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.聚類分析

1.1概念

聚類分析,也稱為分割分析或分類分析,可將樣本數(shù)據(jù)分成一個個組(即簇)。同一簇中的對象是相似的,不同簇中的對象則明顯不同。

Statistics and Machine Learning Toolbox? 提供了幾種聚類方法和相似性度量(也稱為距離度量)來創(chuàng)建簇。此外,簇計算可以按照不同的計算標準確定數(shù)據(jù)的最佳簇數(shù)。

1.2 K 均值和層次聚類

K 均值聚類是一種分區(qū)方法,它將數(shù)據(jù)中的觀測值視為具有位置和相互間距離的對象。它將對象劃分為 K 個互斥簇,使每個簇中的對象盡可能彼此靠近,并盡可能遠離其他簇中的對象。每個簇的特性由其質(zhì)心或中心點決定。當然,聚類中使用的距離通常不代表空間距離。

層次聚類是通過創(chuàng)建聚類樹,同時在多個距離尺度內(nèi)調(diào)查數(shù)據(jù)分組的一種方法。與 K-均值法不同,樹并不是一組簇的簡單組合,而是一個多級層次結(jié)構,較低級別的簇在相鄰的更高級別合并成新的簇。使用這種方法,可以選擇最適合您的應用場景的聚類尺度或級別。

Fisher 鳶尾花數(shù)據(jù)的聚類分析:
https://ww2.mathworks.cn/help/stats/cluster-analysis-example.html

2. 聚類分析的度量

度量指標對聚類結(jié)果進行評判;

  • 外部指標:以事先指定的聚類模型為參考;
  • 內(nèi)部指標:參與聚類的樣本;
2.1 外部指標

對含有n個樣本的數(shù)據(jù)集S,其中兩個樣本點x1,x2,假定通過聚類給出的簇劃分結(jié)果為C,外部參考模型給出的結(jié)果為P;對于x1,x2存在四種關系:

  • SS:x1、x2在C和P中屬于相同的簇;
  • SD:在C中相同,P中不同;
  • DS:C中不同,P中相同;
  • DD:x1、x2在C和P中屬于不同的簇;

a,b,c,d分別表示上述關系對應的關系數(shù)目,x1和x2存在且唯一存在上四種關系之一;

a+b+c+d = n(n-1)/2;

外部度量指標:

  1. Rand統(tǒng)計量

k-means算法實現(xiàn),聚類,算法,kmeans

  1. F值(F-measure)
    k-means算法實現(xiàn),聚類,算法,kmeans
    //P表示準確率;
    //R表示召回率
    k-means算法實現(xiàn),聚類,算法,kmeans

  2. Jaccard 系數(shù)
    k-means算法實現(xiàn),聚類,算法,kmeans

  3. FM指數(shù)
    k-means算法實現(xiàn),聚類,算法,kmeans

  • 以上四個度量結(jié)果越大,表明聚類結(jié)果和參考模型的劃分結(jié)果越吻合;
2.2 內(nèi)部度量

2.2.1 樣本點和聚類中心的距離度量

  1. 歐氏距離
    k-means算法實現(xiàn),聚類,算法,kmeans

計算歐氏空間兩個點之間的距離

  1. 曼哈頓距離
    k-means算法實現(xiàn),聚類,算法,kmeans

也稱城市街區(qū)距離度量,相當于沿著兩個街道行駛的距離(實際行駛距離)

  1. 切比雪夫距離

向量空間距離的度量,相當于象棋盤移動格子之間的距離

  1. 可明夫斯基距離

歐氏和曼哈頓的推廣

聚類性能度量

  1. 緊密性

指每個樣本到聚類中心的平均距離

  1. 分隔度

是個簇的簇心之間的平均距離。分割度值越大說明簇間間隔越遠,分類效果越好,即簇間相似度越低。

  1. 戴維森保丁指數(shù)

衡量任意兩個簇的簇內(nèi)距離之后與簇間距離之比。該指標越小表示簇內(nèi)距離越小,簇內(nèi)相似度越高,簇間距離越大,簇間相似度低。

  1. 鄧恩指數(shù)

任意兩個簇的樣本點的最短距離與任意簇中樣本點的最大距離之商。該值越大,聚類效果越好。

  1. 輪廓系數(shù)

對于一個樣本集合,它的輪廓系數(shù)是所有樣本輪廓系數(shù)的平均值。輪廓系數(shù)的取值范圍是[-1,1],同類別樣本距離越相近不同類別樣本距離越遠,分數(shù)越高。

3.K-means概念

k-means算法 :又名k均值算法,是基于劃分的聚類,K-means算法中的k表示的是聚類為k個簇,means代表取每一個聚類中數(shù)據(jù)值的均值作為該簇的中心,或者稱為質(zhì)心,即用每一個的類的質(zhì)心對該簇進行描述。

算法思想:先從樣本集中隨機選取 k個樣本作為簇中心,并計算所有樣本與這 k個“簇中心”的距離,對于每一個樣本,將其劃分到與其距離最近的“簇中心”所在的簇中,對于新的簇計算各個簇的新的“簇中心”。

  • 四個要點:
    ?? (1)簇個數(shù) k 的選擇
    ?? (2)各個樣本點到“簇中心”的距離
    ?? (3)根據(jù)新劃分的簇,更新“簇中心”
    ?? (4)重復上述2、3過程,直至"簇中心"沒有移動
    ?
    優(yōu)點:
    計算速度快、易于理解;

4.K-means算法步驟

  • K值的選擇: 選取K個簇類的質(zhì)心(通常為隨機);
  • 距離度量: 計算剩余樣本到各質(zhì)心的距離(一般為歐氏距離),歸類到相互距離最小的質(zhì)心所在的簇;
  • 新質(zhì)心計算: 剩余點歸類完畢后計算新質(zhì)心,然后再重新計算各樣本到質(zhì)心的距離;
  • 停止條件: 迭代計算完畢所有的樣本點的距離,當樣本的距離劃分情況基本不變時,說明已經(jīng)到最優(yōu)解,返回結(jié)果;

k-means算法實現(xiàn),聚類,算法,kmeans

5.K-means案例1(python代碼)

參考鏈接: https://blog.csdn.net/qq_43741312/article/details/97128745

代碼:

import random
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


# 計算歐拉距離
def calcDis(dataSet, centroids, k):
    clalist = []
    for data in dataSet:
        diff = np.tile(data, (k,
                              1)) - centroids  # 相減   (np.tile(a,(2,1))就是把a先沿x軸復制1倍,即沒有復制,仍然是 [0,1,2]。 再把結(jié)果沿y方向復制2倍得到array([[0,1,2],[0,1,2]]))
        squaredDiff = diff ** 2  # 平方
        squaredDist = np.sum(squaredDiff, axis=1)  # 和  (axis=1表示行)
        distance = squaredDist ** 0.5  # 開根號
        clalist.append(distance)
    clalist = np.array(clalist)  # 返回一個每個點到質(zhì)點的距離len(dateSet)*k的數(shù)組
    return clalist


# 計算質(zhì)心
def classify(dataSet, centroids, k):
    # 計算樣本到質(zhì)心的距離
    clalist = calcDis(dataSet, centroids, k)
    # 分組并計算新的質(zhì)心
    minDistIndices = np.argmin(clalist, axis=1)  # axis=1 表示求出每行的最小值的下標
    newCentroids = pd.DataFrame(dataSet).groupby(
        minDistIndices).mean()  # DataFramte(dataSet)對DataSet分組,groupby(min)按照min進行統(tǒng)計分類,mean()對分類結(jié)果求均值
    newCentroids = newCentroids.values

    # 計算變化量
    changed = newCentroids - centroids

    return changed, newCentroids


# 使用k-means分類
def kmeans(dataSet, k):
    # 隨機取質(zhì)心
    centroids = random.sample(dataSet, k)

    # 更新質(zhì)心 直到變化量全為0
    changed, newCentroids = classify(dataSet, centroids, k)
    while np.any(changed != 0):
        changed, newCentroids = classify(dataSet, newCentroids, k)

    centroids = sorted(newCentroids.tolist())  # tolist()將矩陣轉(zhuǎn)換成列表 sorted()排序

    # 根據(jù)質(zhì)心計算每個集群
    cluster = []
    clalist = calcDis(dataSet, centroids, k)  # 調(diào)用歐拉距離
    minDistIndices = np.argmin(clalist, axis=1)
    for i in range(k):
        cluster.append([])
    for i, j in enumerate(minDistIndices):  # enymerate()可同時遍歷索引和遍歷元素
        cluster[j].append(dataSet[i])

    return centroids, cluster


# 創(chuàng)建數(shù)據(jù)集
def createDataSet():
    return [[1, 1], [1, 2], [2, 1], [6, 4], [6, 3], [5, 4]]


if __name__ == '__main__':
    dataset = createDataSet()
    centroids, cluster = kmeans(dataset, 2)
    #print("數(shù)據(jù)集為:%s"%dataset)
    print('質(zhì)心為:%s' % centroids)
    print('集群為:%s' % cluster)
    for i in range(len(dataset)):
        plt.scatter(dataset[i][0], dataset[i][1], marker='o', color='green', s=40, label='原始點')
        #  記號形狀       顏色      點的大小      設置標簽
        for j in range(len(centroids)):
            plt.scatter(centroids[j][0], centroids[j][1], marker='x', color='red', s=50, label='質(zhì)心')
            #plt.show()
    plt.show()

E:\PythonStudy\venv\Scripts\python.exe E:/PythonStudy/DeepLeraring/K_means_demo.py
質(zhì)心為:[[1.3333333333333333, 1.3333333333333333], [5.666666666666667, 3.6666666666666665]]
集群為:[[[1, 1], [1, 2], [2, 1]], [[6, 4], [6, 3], [5, 4]]]

Process finished with exit code 0

k-means算法實現(xiàn),聚類,算法,kmeans
k-means算法實現(xiàn),聚類,算法,kmeans
//綠色表示數(shù)據(jù)集對應的散點
//紅色叉號表示簇新文章來源地址http://www.zghlxwxcb.cn/news/detail-841021.html

到了這里,關于K-means聚類算法原理及實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • K-means聚類算法及Python代碼實現(xiàn)

    K-means聚類算法及Python代碼實現(xiàn)

    K-means聚類算法(事先數(shù)據(jù)并沒有類別之分!所有的數(shù)據(jù)都是一樣的) 1、概述 K-means算法是集簡單和經(jīng)典于一身的 基于距離的聚類算法 采用距離作為相似性的評價指標,即認為兩個對象的距離越近,其相似度就越大。 該算法認為類簇是由距離靠近的對象組成的,因此把得到

    2023年04月24日
    瀏覽(25)
  • k-means聚類算法 心得分享(含python實現(xiàn)代碼)

    k-means聚類算法 心得分享(含python實現(xiàn)代碼)

    目錄 1.K-means聚類算法 1.1 引言: 1.2 K-Means 算法的基本思想 1.3 K-Means 算法的優(yōu)缺點: 1.4 K-Means 算法的應用: 2.K-means聚類算法的實現(xiàn)具體步驟 2.1初始化聚類中心 2.2計算每個數(shù)據(jù)點到聚類中心的距離 2.3確定每個數(shù)據(jù)點所屬聚類簇 2.4更新聚類中心 2.5循環(huán)執(zhí)行步驟2-4,直到達到最

    2024年02月02日
    瀏覽(25)
  • 計算機視覺:聚類算法(K-Means)實現(xiàn)圖像分割

    計算機視覺:聚類算法(K-Means)實現(xiàn)圖像分割

    什么是K-means聚類? K-means聚類是一種無監(jiān)督學習算法,用于將一組數(shù)據(jù)劃分為K個不同的類別或簇。它基于數(shù)據(jù)點之間的相似性度量,將數(shù)據(jù)點分配到最接近的聚類中心。K-means算法的目標是最小化數(shù)據(jù)點與其所屬聚類中心之間的平方距離和。 K-means聚類在圖像分割中的應用 在

    2024年02月02日
    瀏覽(27)
  • K-Means聚類算法及其python實現(xiàn)(已附上代碼至本博客)

    K-Means聚類算法及其python實現(xiàn)(已附上代碼至本博客)

    覺得有用的,一腚要先點贊后收藏!!!氣死人了,40多個收藏0點贊!! 對于 n代表了x有n維,x上標j表示第j維的特征,下標i表示該向量是第i個樣本 簇中心坐標為:(當然,這也是重新計算簇中心坐標的方法?。。?向量 u i = ( u i ( 1 ) , u i ( 2 ) , ? ? ? , u i ( j ) , ? ? ? , u i ( n )

    2024年02月08日
    瀏覽(27)
  • k-means聚類算法詳解

    k-means聚類算法詳解

    什么是特征向量? 用來描述樣本點的一組數(shù)據(jù),要和我們數(shù)學中的向量區(qū)別一下,本質(zhì)來說就是個數(shù)組,數(shù)組中的每個元素代表從不同角度描述樣本點的值。 K-means 是我們最常用的基于 歐式距離 的聚類算法,其認為兩個目標的距離越近,相似度越大。 聚類就是對大量末知標

    2024年02月16日
    瀏覽(19)
  • python 實現(xiàn)k-means聚類算法 銀行客戶分組畫像實戰(zhàn)(超詳細,附源碼)

    python 實現(xiàn)k-means聚類算法 銀行客戶分組畫像實戰(zhàn)(超詳細,附源碼)

    想要數(shù)據(jù)集請點贊關注收藏后評論區(qū)留言留下QQ郵箱 k-means具體是什么這里就不再贅述,詳情可以參見我這篇博客 k-means 問題描述:銀行對客戶信息進行采集,獲得了200位客戶的數(shù)據(jù),客戶特征包括以下四個1:社保號碼 2:姓名? 3:年齡 4:存款數(shù)量 使用k-means算法對客戶進行

    2024年02月11日
    瀏覽(130)
  • K-means聚類算法的三種改進(K-means++,ISODATA,Kernel K-means)介紹與對比

    K-means聚類算法的三種改進(K-means++,ISODATA,Kernel K-means)介紹與對比

    ? 目錄 ?一、概述 二、經(jīng)典K-means算法 三、K-means++算法 四、ISODATA算法 六、數(shù)據(jù)集測試 ????? 在本篇文章中將對四種聚類算法(K-means,K-means++,ISODATA和Kernel K-means)進行詳細介紹,并利用數(shù)據(jù)集來真實地反映這四種算法之間的區(qū)別。 ????? 首先需要明確的是上述四種算法都屬

    2024年01月23日
    瀏覽(18)
  • 無涯教程-聚類算法 - K-Means

    K-均值聚類算法計算質(zhì)心并進行迭代,直到找到最佳質(zhì)心為止,它假定群集的數(shù)目是已知的,它也稱為扁平聚類算法。通過算法從數(shù)據(jù)中識別出的簇數(shù)以K均值中的\\\" K\\\"表示。 在該算法中,將數(shù)據(jù)點分配給群集,以使數(shù)據(jù)點和質(zhì)心之間的平方距離之和最小。應當理解,簇內(nèi)的較

    2024年02月10日
    瀏覽(24)
  • 【g】聚類算法之K-means算法

    聚類算法是一種無監(jiān)督學習方法,它將相似的數(shù)據(jù)樣本劃分為一組,同時將不相似的數(shù)據(jù)樣本劃分為另一組。這個過程由計算機自動完成,不需要任何人為的干預。 K-means算法是一種經(jīng)典的聚類算法,它的主要思想是把數(shù)據(jù)集分成k個簇,每個簇包括距離其它各簇最近的若干個

    2024年02月08日
    瀏覽(20)
  • 機器學習之K-means聚類算法

    機器學習之K-means聚類算法

    目錄 K-means聚類算法 算法流程 優(yōu)點 缺點 隨機點聚類 人臉聚類 旋轉(zhuǎn)物體聚類 K-means聚類算法是一種無監(jiān)督的學習方法,通過對樣本數(shù)據(jù)進行分組來發(fā)現(xiàn)數(shù)據(jù)內(nèi)在的結(jié)構。K-means的基本思想是將n個實例分成k個簇,使得同一簇內(nèi)數(shù)據(jù)相似度高而不同簇之間數(shù)據(jù)相似度低。 K-means的

    2024年02月11日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包