K-Means聚類算法 【sklearn.cluster】


class sklearn.cluster.KMeans(n_clusters=8, *, init='kmeans++', n_init=10, max_iter=300, tol=0.0001,

precompute_distances='deprecated', verbose=0, random_state=None, copy_x=True, n_jobs='deprecated', algorithm='auto')


參數:

1、 n_clusters: 聚類類別數量,也是初始聚類中心的數量,default=8

2、init: 聚類的初始化中心的方案, dafault='k-means++'

'k-means++': (1)從輸入的數據點集合(要求有k個聚類)中隨機選擇一個點作爲第一個聚類中心;(2)、對於數據集中的每一個點x,計算它與最近聚類中心(指已選擇的聚類中心)的距離D(x);(3)、選擇一個新的數據點作爲新的聚類中心,選擇的原則是:D(x)較大的點,被選取作爲聚類中心的概率較大;(4)、重複2和3直到k個聚類中心被選出來。

'random': 從data中隨機選取n_clusters數量的點作爲初始中心;

'ndarray': 傳入的是形狀爲(n_clusters, n_features)的二維數組,數組的每一行作爲一箇中心;

'callable': 接受的是參數X、n_clusters、random_state,並返回一個初始化值。

3、max_iter:  一次算法運行的最大迭代次數, dafualt=300

4、n_init: 聚類算法的運行次數,輸出n_init連續的運行中最好的那次的結果,default=10

5、tol:  兩次連續迭代之間的相對誤差,取一個很小的值(不建議tol=0,因爲又浮點數有舍入誤差),float,defualt=1e-4

6、precompute_distances: 是否將數據放入內存進行預計算, default='auto'    

'auto': n_sample*n_cluster>=12 million時不進行預計算,它相當於雙精度工作100MB的開銷

True: 總進行預計算

False: 不進行預計算

7、verbose: 是否輸出詳細信息,default=0

8、random_state:用於產生初始中心的隨機序列,default=None, (用於2、init)

9、copy_x: 是否直接在原矩陣上計算,default=True,copy一份進行計算

10、n_jobs: 同時進行計算的核數(併發數),n_jobs用於並行計算每個n_init,如果設置爲None或-1,使用所有CPU,若果設置爲1,不併行,如果設置小於-1,使用CPU個數+1+n_jobs個CPU

11、algorithm:用於kmeans第一步距離計算, {“auto”, “full”, “elkan”}, default=”auto”

"full"就是我們傳統的K-Means算法;

 “elkan”,它的目標是減少不必要的距離的計算,利用了兩邊之和大於等於第三邊,以及兩邊之差小於第三邊的三角形性質,來減少距離的計算,效率更高,但是目前不支持稀疏數據

1、計算任意兩個聚類中心的距離;

2、當計算樣本點x點應該屬於哪個聚類中心時,規律一:當發現2*S(x,K1)<S(k1,K2)時,根據三角不等式,S(x,K2)>S(x,K1),此時我們不需要再計算D(x,j2);

規律二:我們可以得到D(x,j2)≥max{0,D(x,j1)−D(j1,j2)}。

利用上邊的兩個規律,elkan K-Means比起傳統的K-Means迭代速度有很大的提高。但是如果樣本的特徵是稀疏的,有缺失值的話,這個方法就不適用了,此時某些距離無法計算,則不能使用該算法

默認的"auto"則會根據數據值是否是稀疏的,來決定如何選擇"full"和“elkan”。一般數據是稠密的,那麼就是 “elkan”,否則就是"full"。一般來說建議直接用默認的"auto"

屬性:

clusters_center_:簇中心

labels_: 每個樣本點的label

inertia_: 樣本點到簇中心的平方距離之和

n_iter_:運行的迭代次數

方法:

fit(self, X[, y, sample_weight]): 計算k-means聚類,sample_weight=None,默認所有樣本點權值相等,返回self擬合值

fit_predict(self, X[, y, sample_weight]): 計算k-means聚類並預測樣本所屬的cluster,返回labels_ :(n_samples,),樣本的label值

fit_transform(self, X[, y, sample_weight]): 計算k-means聚類,並將X轉換爲cluster-distance space,返回X_new :(n_samples, n_clusters)

get_params(self, deep=True): 返回訓練參數

predict(self, X, sample_weight=None): 預測X中樣本到最近簇中心的label,返回labels:(n_samples,)

score(self, X, y=None, sample_weight=None): 評估

set_params(self, **params): 設置參數

transform(self, X): 將樣本X轉換爲cluster-distance space,返回X_new :(n_samples, n_clusters)

 

 

:)ps 紅色部分是不太理解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章