本文為大家分享了Python機(jī)器學(xué)習(xí)之K-Means聚類的實現(xiàn)代碼,供大家參考,具體內(nèi)容如下
1.K-Means聚類原理
K-means算法是很典型的基于距離的聚類算法,采用距離作為相似性的評價指標(biāo),即認(rèn)為兩個對象的距離越近,其相似度就越大。其基本思想是:以空間中k個點為中心進(jìn)行聚類,對最靠近他們的對象歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結(jié)果。各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。
算法大致流程為:(1)隨機(jī)選取k個點作為種子點(這k個點不一定屬于數(shù)據(jù)集);(2)分別計算每個數(shù)據(jù)點到k個種子點的距離,離哪個種子點最近,就屬于哪類;(3)重新計算k個種子點的坐標(biāo)(簡單常用的方法是求坐標(biāo)值的平均值作為新的坐標(biāo)值;(4)重復(fù)2、3步,直到種子點坐標(biāo)不變或者循環(huán)次數(shù)完成。
2.數(shù)據(jù)及其尋找初步的聚類中心
數(shù)據(jù)為Matlab加載格式(mat),包含X變量,數(shù)據(jù)來源為(大家可以去這下載),X為300*2維變量,由于是2維,所以基本上就是在平面坐標(biāo)軸上的一些點中進(jìn)行聚類。
我們首先構(gòu)建初步尋找聚類中心(centroids,質(zhì)心)函數(shù),再隨機(jī)設(shè)置初始質(zhì)心,通過歐氏距離初步判斷X的每一個變量屬于哪個質(zhì)心。代碼為:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sb from scipy.io import loadmat def find_closest_centroids(X, centroids): m = X.shape[0] k = centroids.shape[0] #要聚類的類別個數(shù) 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: # 記錄當(dāng)前最短距離和其中心的索引值 min_dist = dist idx[i] = j return idx data = 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]
本文題目:Python機(jī)器學(xué)習(xí)之K-Means聚類實現(xiàn)詳解-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.rwnh.cn/article48/djpihp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、云服務(wù)器、網(wǎng)頁設(shè)計公司、標(biāo)簽優(yōu)化、網(wǎng)站導(dǎo)航、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容