柚子快報(bào)邀請(qǐng)碼778899分享:聚類 kmeans 機(jī)器學(xué)習(xí)
柚子快報(bào)邀請(qǐng)碼778899分享:聚類 kmeans 機(jī)器學(xué)習(xí)
文章目錄
聚類步驟k-means APIKmeans性能評(píng)估指標(biāo)Kmeans性能評(píng)估指標(biāo)API
聚類步驟
k-means通常被稱為勞埃德算法,這在數(shù)據(jù)聚類中是最經(jīng)典的,也是相對(duì)容易理解的模型。算法執(zhí)行的過程分為4個(gè)階段。
1.首先,隨機(jī)設(shè)K個(gè)特征空間內(nèi)的點(diǎn)作為初始的聚類中心。2.然后,對(duì)于根據(jù)每個(gè)數(shù)據(jù)的特征向量,從K個(gè)聚類中心中尋找距離最近的一個(gè),并且把該數(shù)據(jù)標(biāo)記為這個(gè)聚類中心。3.接著,在所有的數(shù)據(jù)都被標(biāo)記過聚類中心之后,根據(jù)這些數(shù)據(jù)新分配的類簇,通過取分配給每個(gè)先前質(zhì)心的所有樣本的平均值來創(chuàng)建新的質(zhì)心重,新對(duì)K個(gè)聚類中心做計(jì)算。4.最后,計(jì)算舊和新質(zhì)心之間的差異,如果所有的數(shù)據(jù)點(diǎn)從屬的聚類中心與上一次的分配的類簇沒有變化,那么迭代就可以停止,否則回到步驟2繼續(xù)循環(huán)。K均值等于具有小的全對(duì)稱協(xié)方差矩陣的期望最大化算法
k-means API
from sklearn.cluster import KMeans 參數(shù): sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’) k-means聚類 n_clusters:開始的聚類中心數(shù)量 init:初始化方法,默認(rèn)為’k-means ++’
labels_:默認(rèn)標(biāo)記的類型,可以和真實(shí)值比較(不是值比較)
class sklearn.cluster.KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm='auto')
"""
:param n_clusters:要形成的聚類數(shù)以及生成的質(zhì)心數(shù)
:param init:初始化方法,默認(rèn)為'k-means ++',以智能方式選擇k-均值聚類的初始聚類中心,以加速收斂;random,從初始質(zhì)心數(shù)據(jù)中隨機(jī)選擇k個(gè)觀察值(行
:param n_init:int,默認(rèn)值:10使用不同質(zhì)心種子運(yùn)行k-means算法的時(shí)間。最終結(jié)果將是n_init連續(xù)運(yùn)行在慣性方面的最佳輸出。
:param n_jobs:int用于計(jì)算的作業(yè)數(shù)量。這可以通過并行計(jì)算每個(gè)運(yùn)行的n_init。如果-1使用所有CPU。如果給出1,則不使用任何并行計(jì)算代碼,這對(duì)調(diào)試很有用。對(duì)于-1以下的n_jobs,使用(n_cpus + 1 + n_jobs)。因此,對(duì)于n_jobs = -2,所有CPU都使用一個(gè)。
:param random_state:隨機(jī)數(shù)種子,默認(rèn)為全局numpy隨機(jī)數(shù)生成器
"""
聚類建立模型
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import numpy as np
# 使用的數(shù)據(jù)
X = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, random_state=0) # 導(dǎo)入模型,分為兩個(gè)模塊(n_clusters=2)
kmeans.fit(X) # 進(jìn)行訓(xùn)練分類
print('每個(gè)點(diǎn)的類別',kmeans.cluster_centers_)
print('集群中心的點(diǎn)坐標(biāo):',kmeans.labels_)
print('將這些值進(jìn)行分類:',kmeans.predict(X))
print('預(yù)測(cè)這個(gè)兩個(gè)數(shù)屬于那個(gè)類型:',kmeans.predict([[0, 0], [4, 4]]))
print('Kmeans性能評(píng)估(計(jì)算所有樣本的平均輪廓系數(shù)):',silhouette_score(X,kmeans.predict(X)))
特點(diǎn)分析:
采用迭代式算法,直觀易懂并且非常實(shí)用 缺點(diǎn):容易收斂到局部最優(yōu)解(多次聚類) 需要預(yù)先設(shè)定簇的數(shù)量(k-means++解決)
Kmeans性能評(píng)估指標(biāo)
注:對(duì)于每個(gè)點(diǎn)i 為已聚類數(shù)據(jù)中的樣本 ,b_i 為i 到其它族群的所有樣本的平均 距離,a_i 為i 到本身簇的距離平均值
最終計(jì)算出所有的樣本點(diǎn)的輪廓系數(shù)平均值
這個(gè)舉一個(gè)二維數(shù)據(jù)的例子: 假設(shè)這個(gè)是一個(gè)分類好的一個(gè)聚類,我們以藍(lán)1為例: 1、計(jì)算藍(lán)1到?身類別的點(diǎn)距離的平均值a_i 2、計(jì)算藍(lán)1分別到紅?類別,綠?類別所有的點(diǎn)的距離,求出平均值b1, b2,取其中最?的值當(dāng)做b_i
我們以輪廓系數(shù)公式算出兩個(gè)極端: b_i>>a_i : 1 是最好的(輪廓系數(shù)為1是完美的) a_i>> b_i :-1 是最差的(輪廓系數(shù)為-1是最差的) 可得 :輪廓系數(shù)范圍 [-1, 1] 結(jié)論:
如果sc_i 小于0,說明a_i 的平均距離大于最近的其他簇。 聚-類效果不好 如果sc_i 越大,說明a_i 的平均距離小于最近的其他簇。 聚類效果好 輪廓系數(shù)的值是介于 [-1,1] ,越趨近于1代表內(nèi)聚度和分離度都相對(duì)較優(yōu)
Kmeans性能評(píng)估指標(biāo)API
sklearn.metrics.silhouette_score sklearn.metrics.silhouette_score(X, labels) 計(jì)算所有樣本的平均輪廓系數(shù) X:特征值 labels:被聚類標(biāo)記的目標(biāo)值
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import numpy as np
# 使用的數(shù)據(jù)
X = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, random_state=0) # 導(dǎo)入模型,分為兩個(gè)模塊(n_clusters=2)
kmeans.fit(X) # 進(jìn)行訓(xùn)練分類
print('每個(gè)點(diǎn)的類別',kmeans.cluster_centers_)
print('集群中心的點(diǎn)坐標(biāo):',kmeans.labels_)
print('預(yù)測(cè)這個(gè)兩個(gè)數(shù)屬于那個(gè)類型:',kmeans.predict(X))
print('Kmeans性能評(píng)估(計(jì)算所有樣本的平均輪廓系數(shù)):',silhouette_score(X,kmeans.predict(X)))
柚子快報(bào)邀請(qǐng)碼778899分享:聚類 kmeans 機(jī)器學(xué)習(xí)
好文閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。