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 紅色部分是不太理解