python實現dascan聚類。
周志華老師的《機器學習》一書中詳細說明了演算法的過程,這裡就不再贅述,密度聚類的好壞與引數設定有很大的關係。
# coding:utf-8
import numpy as np
import random
import math
import copy
import scipy.io as sio
import matplotlib.pyplot as plt
import time
class
ind():
def__init__
(self):
self.x = 0
self.y = 0
self.core_true = false
self.neighboor =
self.num_neighboor = 0
self.color = 0
matfn = u'c:/users/mr_lee/desktop/課程檔案/資料探勘/第四次作業/data-密度聚類/square4.mat'
temp = sio.loadmat(matfn)
print(temp.keys())
#print(temp)
data = temp['b']
length = data.shape[0]
radius = 2.5
minpts = 115
distance_matirx = np.zeros([length, length])
d = list([ind() for _ in range(length)])
core =
for i in range(0, length, 1):
for j in range(i + 1, length, 1):
distance_matirx[i, j] = math.sqrt(pow(data[i, 0] - data[j, 0], 2) + pow(data[i, 1] - data[j, 1], 2))
distance_matirx[j, i] = distance_matirx[i, j]
d[i].x = data[i, 0]
d[i].y = data[i, 1]
for j in range(0, length, 1):
if distance_matirx[i, j] < radius and i != j:
d[i].num_neighboor += 1
if d[i].num_neighboor >= minpts:
print('資料的長度為%d, 核心數為%d'% (length, len(core)))
DBSCAN演算法python實現
dbscan原理是基於距離定義密度,使用時使用者需要自定義距離範圍eps和最小點數minpt。dnscan的演算法流程如下 初始化核心點集,輸入距離範圍和最小核心點數 遍歷資料點,在給定距離和最小核心點數的情況下,得到核心點集合並儲存下每個點的鄰接點 從核心點集中隨機選出點,開始分簇。將其鄰域點加入...
DBSCAN聚類演算法Python實現
dbscan是一種基於密度的聚類演算法,這類密度聚類演算法一般假定類別可以通過樣本分佈的緊密程度決定。同一類別的樣本,他們之間的緊密相連的,也就是說,在該類別任意樣本周圍不遠處一定有同類別的樣本存在。通過將緊密相連的樣本劃為一類,這樣就得到了乙個聚類類別。通過將所有各組緊密相連的樣本劃為各個不同的類...
聚類 DBSCAN簡介及Python實現
dbscan是基於密度的聚類演算法。聚類效果比較好,不易受雜訊的影響,且不需要指定簇的個數。以核心點為出發點,逐步擴充套件簇 核心點 若某點半徑eps球體內,樣本點個數超過minpts,則為核心點 邊界點 位於核心點的鄰域內,但自身領域內樣本點個數不足minpts 雜訊點 不在任何核心點的鄰域內,自...