国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python機器學習之K-Means聚類實現詳解

2020-02-22 23:17:00
字體:
來源:轉載
供稿:網友

本文為大家分享了Python機器學習之K-Means聚類的實現代碼,供大家參考,具體內容如下

1.K-Means聚類原理

K-means算法是很典型的基于距離的聚類算法,采用距離作為相似性的評價指標,即認為兩個對象的距離越近,其相似度就越大。其基本思想是:以空間中k個點為中心進行聚類,對最靠近他們的對象歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。
算法大致流程為:(1)隨機選取k個點作為種子點(這k個點不一定屬于數據集);(2)分別計算每個數據點到k個種子點的距離,離哪個種子點最近,就屬于哪類;(3)重新計算k個種子點的坐標(簡單常用的方法是求坐標值的平均值作為新的坐標值;(4)重復2、3步,直到種子點坐標不變或者循環次數完成。

2.數據及其尋找初步的聚類中心

數據為Matlab加載格式(mat),包含X變量,數據來源為(大家可以去這下載),X為300*2維變量,由于是2維,所以基本上就是在平面坐標軸上的一些點中進行聚類。

我們首先構建初步尋找聚類中心(centroids,質心)函數,再隨機設置初始質心,通過歐氏距離初步判斷X的每一個變量屬于哪個質心。代碼為:

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sbfrom scipy.io import loadmatdef find_closest_centroids(X, centroids):  m = X.shape[0]  k = centroids.shape[0] #要聚類的類別個數  idx = np.zeros(m)     for i in range(m):    min_dist = 1000000 #迭代終止條件    for j in range(k):      dist = np.sum((X[i,:] - centroids[j,:]) ** 2)       if dist < min_dist:        # 記錄當前最短距離和其中心的索引值        min_dist = dist        idx[i] = j    return idxdata = loadmat('D:/python/Python ml/ex7data2.mat')X = data['X']initial_centroids = np.array([[3, 3], [6, 2], [8, 5]])idx = find_closest_centroids(X, initial_centroids)idx[0:3]

在這里先生成m(這里為300)個0向量,即idx,也就是假設X的每個變量均屬于0類,然后再根據與初始質心的距離計算dist = np.sum((X[i,:] - centroids[j,:]) ** 2),初步判斷每個變量歸屬哪個類,最終替代idx中的0.

3.不斷迭代尋找質心的位置并實現kmeans算法

上述idx得到的300維向量是判斷X中每個變量的歸屬類別,在此基礎上,再對初始質心集群位置不斷調整,尋找最優質心。

def compute_centroids(X, idx, k):  m, n = X.shape  centroids = np.zeros((k, n))    for i in range(k):    indices = np.where(idx == i)    centroids[i,:] = (np.sum(X[indices,:], axis=1) / len(indices[0])).ravel()  #這里簡單的將該類中心的所有數值求平均值作為新的類中心return centroidscompute_centroids(X, idx, 3)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遵义市| 兰州市| 南岸区| 延津县| 南汇区| 赣州市| 南溪县| 永吉县| 监利县| 兴文县| 新乡市| 芜湖市| 黄大仙区| 江油市| 和田市| 营山县| 博白县| 丰都县| 耒阳市| 承德县| 理塘县| 教育| 高要市| 岢岚县| 隆安县| 铜梁县| 若尔盖县| 丰宁| 霍林郭勒市| 富锦市| 克山县| 津市市| 乌兰察布市| 喀喇沁旗| 五家渠市| 思茅市| 巨鹿县| 石门县| 分宜县| 菏泽市| 仙游县|