聚類是一種無監督的機器學習任務,它可以自動將資料劃分成類cluster。因此聚類分組不需要提前被告知所劃分的組應該是什麼樣的。因為我們甚至可能都不知道我們再尋找什麼,所以聚類是用於知識發現而不是**
(1) k代表要把資料分為幾類,比如上面的例子,要把科學家分為3類,那麼k的值為3,然後在已有資料中隨機找3個點為中心點,比如,以下a、b、c3個點(有顏色的那三個點)為中心點
(2) 分別求剩餘的點和3個中心點之間的距離,可以選擇不同的計算距離的方法,不同的方法所得的結果會有差距,而且迭代的次數也不一樣
(3) 使用距離來分配和更新類
第一次跌代的過程:
把每個點到3個中心點的距離作比較,把距離在某個範圍內的一些點劃分為一類,比如某個到a的距離為10,到b的距離為15,到c的距離為3,那麼這個點與c是一類
第二次迭代:
把3個中心點的位置,設定為上一步已經聚好的三個類的中心點,再進行迭代,重新計算距離,在進行聚類,那麼可能上次結果中,原來屬於b類的乙個點,在這個迭代中劃分到a類中,那麼a類的b類的中心點又會改變
隨著一次次中心點的變化,進行不斷的迭代
(4) 收斂
當中心點的位置不再變化時,開始收斂,不再迭代,但這種情況幾乎不會出現,通常設定乙個閾值來結束收斂
(5) k-means聚類的問題
a. 因為第一次跌代時中心點的選取是隨機的,如果選取的中心點是這樣的
那麼每次迭代的結果都不一樣,使得計算很長時間仍然不能收斂,k-means原生演算法本身沒有解決這個問題,需要人為進行評估來決定是否收斂
k-means++和k-means 2演算法對第一次中心點的選擇進行了改進
b. 實際情況中,我們往往不知道原有資料能分成幾類,即k的值事先不好確定
通常使用肘部法來決定聚類的數量
a. 歐式距離測度,就是兩點間的距離
b. 平方歐式距離測度,歐式距離的平方
c. 曼哈頓距離測度
d. 余弦距離測度(適用於文字)
e. 谷本距離測度,同時比較夾角和距離的測度
f. 加權距離測度,歐式距離中加了權重
mahout做k-means聚類的命令格式:
mahout_home/bin/mahout kmeans
--input # 輸入路徑
--output # 輸出路徑
--distancemeasure # 距離測度方法
--numclusters # k的值
--randomseed [...]
--convergencedelta # 收斂的閾值
--maxiter # 最大迭代次數
--overwrite # 結果以覆蓋形式追加
--clustering # 只有加這個選項才會執行聚類
--method # 選擇單機執行還是mapreduce
--tempdir # 臨時檔案存放目錄
--clusters (-c)
# 可以簡寫為-c
# 指定中心點所在的位置,但必須寫為sequencefile檔案
# 如果指定了k的值,那麼即使這裡設定了中心點位置的檔案
# 也會按照隨機方式來取中心點
# 如果寫為 -c canopy,那麼第一次迭代會是一次canopy迭代
canopy聚類只進行一次迭代,通常不會單獨使用,而把它作為k-means聚類的第一次迭代來使用,為了使得k-means聚類的第一次迭代時選取的中心點更合理,它的選取中心點的策略如下:
白話機器學習演算法(四)K means
k means演算法是一種無監督聚類演算法,還是打個比方吧 1 現在房間裡有一群人,各自隨機站在房間裡,這時候有個上帝,隨機挑選了房間裡k個人當k個小組的領導 2 選完領導,每個人開始站隊了,找離自己最近的那個領導,表示自己是那一隊的 3 站完隊,大家開始不滿了,要求重新選領導,選誰?選這一小組的中...
機器學習 K Means演算法
簡介 又叫k 均值演算法,是非監督學習中的聚類演算法。基本思想 k means演算法比較簡單。在k means演算法中,用cluster來表示簇 容易證明k means演算法收斂等同於所有質心不再發生變化。基本的k means演算法流程如下 選取k個初始質心 作為初始cluster,每個初始clus...
機器學習 K Means演算法應用
import matplotlib.pyplot as plt from sklearn.datasets.samples generator import make blobs 聚類資料測試工具 在sklearn中,隨機生成1000個樣本,每個樣本2個特徵,共4個簇,簇中心在 1,1 0,0 1,...