【sklearn】KMeans 计算样本质心
生活随笔
收集整理的這篇文章主要介紹了
【sklearn】KMeans 计算样本质心
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- KMeans質心介紹
- 計算質心
- 計算樣本間距離
- 計算每個樣本到質心的距離,并按照從小到大的順序排列
KMeans質心介紹
一個簇中所有數據的均值μ(j),通常被稱為這個簇的“質心(centroids)”,j表示第j個簇。在一個二維平面中,一簇數據點的質心的橫坐標就是這一簇數據點的橫坐標的均值,質心的縱坐標就是這一簇數據點的縱坐標的均值,同理可推廣至高維空間。
-
解釋
其中,m為一個簇中樣本的個數,j是每個樣本的編號。這個公式被稱為簇內平方和(cluster Sum of Square),又叫做 Inertia。
而將一個數據集中的所有簇的簇內平方和相加,就得到了整體平方和(Total Cluster Sum of Square),又叫做 total inertia. Total Inertia越小,代表著每個簇內樣本越相似,聚類的效果就越好。
因此KMeans追求的是,求解能夠讓 inertia最小化的質心。實際上,在質心不斷變化不斷迭代的過程中,總體平方和是越來越小的。我們可以使用數學來證明,當整體平方和最小的時候,質心就不再發生變化了。如此,k- Means的求解過程,就變成了一個最優化問題。
返回頂部
計算質心
在一個二維平面中,一簇數據點的質心的橫坐標就是這一簇數據點的橫坐標的均值,質心的縱坐標就是這一簇數據點的縱坐標的均值,同理可推廣至高維空間。
#計算質心 def cal_Cmass(data):'''input:data(ndarray):數據樣本output:mass(ndarray):數據樣本質心'''Cmass = np.mean(data,axis=0)return Cmass cmass = cal_Cmass([[8,8,8],[7,7,7],[9,9,9]]) # [8. 8. 8.]- 通過定義先求出質心
返回頂部
計算樣本間距離
import numpy as np #計算樣本間距離 def distance(x, y, p=2):'''input:x(ndarray):第一個樣本的坐標y(ndarray):第二個樣本的坐標p(int):等于1時為曼哈頓距離,等于2時為歐氏距離output:distance(float):x到y的距離 ''' dis2 = np.sum(np.abs(x-y)**p) # 計算dis = np.power(dis2,1/p)return dis- 定義方法計算兩點之間的距離
返回頂部
計算每個樣本到質心的距離,并按照從小到大的順序排列
#計算每個樣本到質心的距離,并按照從小到大的順序排列 def sorted_list(data,Cmass):'''input:data(ndarray):數據樣本Cmass(ndarray):數據樣本質心output:dis_list(list):排好序的樣本到質心距離'''dis_list = []for i in range(len(data)): # 遍歷data數據,與質心cmass求距離dis_list.append(distance(Cmass,data[i][:]))dis_list = sorted(dis_list) # 排序return dis_list list = sorted_list([[8,8,8],[7,7,7],[9,9,9]],cmass) # [0.0, 1.7320508075688772, 1.7320508075688772]- 遍歷data數據,,調用distance()函數與質心cmass求點距。
返回頂部
總結
以上是生活随笔為你收集整理的【sklearn】KMeans 计算样本质心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 横图图片广告代码html,横向不间断的连
- 下一篇: 电位计,电子尺,电阻信号隔离变送器(DI