在無監督學習中,類似分類和回歸中的目標變數事先並不存在。要回答的問題是:「從資料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 簇識別給出聚類結果...