您好,登錄后才能下訂單哦!
這篇文章主要介紹了python聚類算法指的是什么,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
說明
1、聚類常用于數據探索或挖掘前期,在沒有先驗經驗的背景下進行探索性分析,也適用于樣本量大的數據預處理。
2、常用的聚類算法分為基于劃分、層次、密度、網格、統計、模型等類型的算法。典型算法包括K均值(經典聚類算法)、DBSCAN、兩步聚類、BIRCH、譜聚類等。
聚類分析可以解決的問題包括:數據集可以分為幾類,每個類別有多少樣本,不同類別中每個變量的強弱關系,不同類別的典型特征是什么。
聚類算法之K均值實例
import numpy as np import matplotlib.pyplot as plt # 兩點距離 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最遠的元素,用于初始化聚類中心 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最近的元素,用于聚類 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__": ## 生成二維隨機坐標,手上有數據集的朋友注意,理解arr改起來就很容易了 ## arr是一個數組,每個元素都是一個二元組,代表著一個坐標 ## arr形如:[ (x1, y1), (x2, y2), (x3, y3) ... ] arr = np.random.randint(100, size=(100, 1, 2))[:, 0, :] ## 初始化聚類中心和聚類容器 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([]) ## 迭代聚類 n = 20 cla_temp = cla_arr for i in range(n): # 迭代n次 for e in arr: # 把集合里每一個元素聚到最近的類 ki = 0 # 假定距離第一個中心最近 min_d = distance(e, k_arr[ki]) for j in range(1, k_arr.__len__()): if distance(e, k_arr[j]) < min_d: # 找到更近的聚類中心 min_d = distance(e, k_arr[j]) ki = j cla_temp[ki].append(e) # 迭代更新聚類中心 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()
感謝你能夠認真閱讀完這篇文章,希望小編分享的“python聚類算法指的是什么”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。