溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python聚類(lèi)算法指的是什么

發(fā)布時(shí)間:2021-07-29 13:36:28 來(lái)源:億速云 閱讀:149 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了python聚類(lèi)算法指的是什么,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

說(shuō)明

1、聚類(lèi)常用于數(shù)據(jù)探索或挖掘前期,在沒(méi)有先驗(yàn)經(jīng)驗(yàn)的背景下進(jìn)行探索性分析,也適用于樣本量大的數(shù)據(jù)預(yù)處理。

2、常用的聚類(lèi)算法分為基于劃分、層次、密度、網(wǎng)格、統(tǒng)計(jì)、模型等類(lèi)型的算法。典型算法包括K均值(經(jīng)典聚類(lèi)算法)、DBSCAN、兩步聚類(lèi)、BIRCH、譜聚類(lèi)等。

聚類(lèi)分析可以解決的問(wèn)題包括:數(shù)據(jù)集可以分為幾類(lèi),每個(gè)類(lèi)別有多少樣本,不同類(lèi)別中每個(gè)變量的強(qiáng)弱關(guān)系,不同類(lèi)別的典型特征是什么。

聚類(lèi)算法之K均值實(shí)例

import numpy as np
import matplotlib.pyplot as plt
 
# 兩點(diǎn)距離
def distance(e1, e2):
    return np.sqrt((e1[0]-e2[0])**2+(e1[1]-e2[1])**2)
 
# 集合中心
def means(arr):
    return np.array([np.mean([e[0] for e in arr]), np.mean([e[1] for e in arr])])
 
# arr中距離a最遠(yuǎn)的元素,用于初始化聚類(lèi)中心
def farthest(k_arr, arr):
    f = [0, 0]
    max_d = 0
    for e in arr:
        d = 0
        for i in range(k_arr.__len__()):
            d = d + np.sqrt(distance(k_arr[i], e))
        if d > max_d:
            max_d = d
            f = e
    return f
 
# arr中距離a最近的元素,用于聚類(lèi)
def closest(a, arr):
    c = arr[1]
    min_d = distance(a, arr[1])
    arr = arr[1:]
    for e in arr:
        d = distance(a, e)
        if d < min_d:
            min_d = d
            c = e
    return c
 
 
if __name__=="__main__":
    ## 生成二維隨機(jī)坐標(biāo),手上有數(shù)據(jù)集的朋友注意,理解arr改起來(lái)就很容易了
    ## arr是一個(gè)數(shù)組,每個(gè)元素都是一個(gè)二元組,代表著一個(gè)坐標(biāo)
    ## arr形如:[ (x1, y1), (x2, y2), (x3, y3) ... ]
    arr = np.random.randint(100, size=(100, 1, 2))[:, 0, :]
 
    ## 初始化聚類(lèi)中心和聚類(lèi)容器
    m = 5
    r = np.random.randint(arr.__len__() - 1)
    k_arr = np.array([arr[r]])
    cla_arr = [[]]
    for i in range(m-1):
        k = farthest(k_arr, arr)
        k_arr = np.concatenate([k_arr, np.array([k])])
        cla_arr.append([])
 
    ## 迭代聚類(lèi)
    n = 20
    cla_temp = cla_arr
    for i in range(n):    # 迭代n次
        for e in arr:    # 把集合里每一個(gè)元素聚到最近的類(lèi)
            ki = 0        # 假定距離第一個(gè)中心最近
            min_d = distance(e, k_arr[ki])
            for j in range(1, k_arr.__len__()):
                if distance(e, k_arr[j]) < min_d:    # 找到更近的聚類(lèi)中心
                    min_d = distance(e, k_arr[j])
                    ki = j
            cla_temp[ki].append(e)
        # 迭代更新聚類(lèi)中心
        for k in range(k_arr.__len__()):
            if n - 1 == i:
                break
            k_arr[k] = means(cla_temp[k])
            cla_temp[k] = []
 
    ## 可視化展示
    col = ['HotPink', 'Aqua', 'Chartreuse', 'yellow', 'LightSalmon']
    for i in range(m):
        plt.scatter(k_arr[i][0], k_arr[i][1], linewidth=10, color=col[i])
        plt.scatter([e[0] for e in cla_temp[i]], [e[1] for e in cla_temp[i]], color=col[i])
    plt.show()

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“python聚類(lèi)算法指的是什么”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI