機器學習Week9 K聚類

2021-10-01 19:04:54 字數 1507 閱讀 7993

在無監督學習中,類似分類和回歸中的目標變數事先並不存在。要回答的問題是:「從資料x中能發現什麼?」

聚類是一種無監督學習,它將相似的物件歸到同乙個簇中。它類似於全自動化分類(連類別體系都是自動構建的)

k-均值(k-means)聚類演算法釋義:該演算法可以發現k個不同的簇,且每個簇的中心採用簇中所含值得均值計算而成。

簇識別(cluster identification)

簇識別給出聚類結果的含義。假定有一些資料,現在將相似資料歸到一起,簇識別會告訴我們這些簇到底都是什麼。

聚類和分類最大的不同在於,分類的目標事先已知,而聚類則不同。因為其產生的結果與分類相同,只是類別沒有預先定義。聚類有時也被稱為無監督分類。

優點:容易實現

缺點:可能收斂到區域性最小值,在大規模資料集上收斂較慢

適用資料型別:數值型資料

偽**:

建立k個點作為起始質心(通常為隨機選擇)

當任意乙個點的簇分配結果發生改變時

對資料集中的每個資料點

對每個質心

計算質心與資料點之間的距離

將資料點分配到距其最近的簇

對每乙個簇,計算簇中所有點的均值並將均值作為質心

k-均值聚類的一般流程

k均值聚類支援函式

d

ef loaddataset(filename):

datamat = [ ]

fr = open(filename)

for line in fr.readlines():

curline = line.strip().split('\t')

fltline = map(float,curline)

datamat.a[[end(fltline)

return datamat

def disteclud(veca, vecb):

return sqrt(sum(power(veca - vecb, 2)))

def randcent(dataset, k):

n = shape(dataset)[l]

centroids = mat(zeros((k,n)))

for j in range(n)

minj = min(dataset[:,j')

rangej = float(max(dataset[:j]) - minj)

centroids[:,j]) = minj + rangej * random.rand(k,l)

return centroids

#構建簇質心

二分k均值演算法

偽**:

將所有點看成乙個簇

當簇數目小於k時

對於每乙個簇

計算總誤差

在給定的簇上面進行k均值聚類(k=2)

計算將該簇一分為二之後的總誤差

選擇是的誤差最小的那個簇進行劃分操作

**

機器學習作業9 k均值聚類

k均值聚類,這次作業要求自動確定均值 k均值聚類 固定k 大致步驟 隨機選擇k個點作為初始的簇中心 計算每個點到每個簇中心的距離,選擇最小的作為該點屬於的簇類 將每個簇的點取平均獲得乙個新的簇中心 重複2 3步驟直至簇中心不再變化 輸出簇劃分 偽 表示 from書p203 因為要確定k值,所以怕是沒...

Python機器學習 9 聚類演算法之K均值

我們之前接觸的所有機器學習演算法都有乙個共同特點,那就是分類器會接受2個向量 乙個是訓練樣本的特徵向量x,乙個是樣本實際所屬的型別向量y。由於訓練資料必須指定其真實分類結果,因此這種機器學習統稱為有監督學習。然而有時候,我們只有訓練樣本的特徵,而對其型別一無所知。這種情況,我們只能讓演算法嘗試在訓練...

機器學習實戰 K均值聚類

1.概述 聚類是一種無監督學習,它將相似的物件歸到同乙個簇中。聚類方法幾乎可以應用於所有物件,簇內的物件越相似,聚類的效果越好。k 均值聚類之所以稱為是因為它可以發現k個不同的簇,且每個簇的中心採用簇中所含值的均值計算而成。2.簇識別 cluster identification 簇識別給出聚類結果...