k均值演算法(k-means algorithm)
用μ1,μ2,…,μk 來表示聚類中心
用c(i)(i=1,…m)來儲存與第 i 個樣本資料x(i)最近的聚類中心的索引
先隨機初始化聚類中心
演算法的兩個重要迴圈:
第乙個for迴圈,計算每個樣本資料x(i)距離哪乙個聚類中心近,即:對於每個樣本資料x(i) ,計算其應該屬於的聚類中心
第二個for迴圈,是聚類中心的移動,即:對於每乙個聚類中心,重新計算它的中心
k均值演算法優化目標
目前被分配的聚類中心的樣本 指數 (1,2,…, )
聚類中心 ( )
已經被分配聚類中心的樣本
優化目標(代價函式):
k均值演算法應用於未分開的聚類
第乙個迴圈是用於減小c(i)引起的代價
第二個迴圈則是用於減小μk引起的代價
迭代的過程一定會是每一次迭代都在減小代價函式,不然便是出現了錯誤。
選擇聚類數:「肘部法則」
關於「肘部法則」,所需要做的是改變k值,也就是聚類類別數目的總數。用乙個聚類來執行k均值聚類方法。這就意味著,所有的資料都會分到乙個聚類裡,然後計算成本函式j。
k代表聚類數目
在k=3時,圖形達到了乙個最優的最小值。即使within-cluster的距離在3之後減少,我們還需要做更多的計算。這與收益遞減律類似。因此,我們選擇乙個3作為最優。
k-means主要有兩個最重大的缺陷
k 是事先給定的,這個 k 值的選定是非常難以估計的。很多時候,事先並不知道給定的資料集應該分成多少個類別才最合適。
k-means演算法需要隨機初始種子點,這個隨機種子點太重要,不同的隨機種子點會有得到完全不同的結果。
聚類演算法python實現思路
資料預處理
(初始化、縮放)
k均值演算法
1)距離函式
2)聚類中心初始化
3)kmean計算
計算並展示結果
聚類演算法python庫實現:
import numpy as np # 匯入numpy庫
import matplotlib.pyplot as plt # 匯入matplotlib.pylab庫
from sklearn.cluster import kmeans # 匯入sklearn.cluster庫
estimator = kmeans(n_clusters=4)
主要引數:
n_clusters : 隱聚類中心數目, 預設為8
init : 初始化方法 , 預設』k-means++』 (智慧型選擇聚類中心)
n_init : k-means演算法在以不同的聚類中心組合執行的次數,預設10
max_iter : k-means演算法每次執行時,最大迭代次數,預設300
tol : 容忍度, 可選, 沒兩次代價的差值達到10-4就停止了。預設le-4, 達到此值即停止
precompute_distances : 提前計算距離 『auto』: 若n_samples * n_clusters > 12 million 不進行
random_state: 預設none; 若int, 隨機數產生器seed, 若randomstates例項, 隨機數產生器, 若none, np.random
缺點:結果高度依賴於初始值的設定
estimate.predict(x) #**資料集x中每個樣本所屬的聚類中心索引
estimate.fit_predict(x) #計算聚類並**每個樣本的中心:[索引1, 索引2…]
estimate.transform(x) #將樣本資料集x轉換到(聚類-距離)空間shape(m,k)
estimate.fit_transform(x) # 計算聚類並將x轉換到(聚類-距離)空間: shape(m,k)
estimate.cluster_centers_ #聚類中心座標: shape(k, n_features)
estimate.labels_ #每個樣本的所屬中心標籤索引,同predict(x),shape(m,)
estimate.inertia_ # 所有樣本與其最近中心距離的平方和
estimate.score(x) # k-mean演算法目標值的相反值, 即inertia_相反值
計算並展示結果(分類結果)
def showcluster(x, k, centroids, clusterassment):
m, dim = x.shape #樣本數m,維度dim
plt.figure(『肘部法則』)
plt.title(『肘部曲線』)
plt.plot(k,inertia)
plt.scatter(k,inertia,c=『r』)
#畫標註
機器學習 聚類
聚類的過程是將樣本分類的過程,聚類屬於無監督學習,資料中沒有label,訓練之前並不知道樣本屬於哪乙個類別,需要借鑑經驗值。kmeans聚類 模型假設 資料的分布是k個 sigma 相同的高斯分布的,每個分布裡有 n 1,n 2,n k 個樣本,其均值分別是 mu 1,mu 2,mu k 那麼每個樣...
機器學習聚類
模型調參 from sklearn.cluster import dbscan 構建空列表,用於儲存不同引數組合下的結果 res 迭代不同的eps值 for eps in np.arange 0.001,1 0.05 迭代不同的min samples值 for min samples in rang...
文字聚類學習過程簡述
1.去空格,換行符,去停用詞 def delstopwordslist classsstr stopwords line.strip for line in open stop.txt encoding utf 8 readlines outstr classsstr classsstr.split...