為什麼需要canopy演算法
canopy演算法一般是為其他聚類演算法的一種聚類方法,常用的聚類如 k-means 等聚類演算法都需要事先k值(即聚類個數),並且會隨機選擇k個初始聚類中心。這種實現指定的k和隨機初始化的聚類中心不僅會降低聚類演算法的效率,而且得到的結果也可能是區域性最優的。canopy演算法就可以解決以上問題。
canopy演算法的步驟
canopy演算法的核心步驟如下:
給定一組待聚類的資料集d;
給定兩個閾值 t1,t2 且t1 > t2;
隨機選擇d中的乙個資料d作為中心,並將d從d中移除;
計算d中所有點到d的距離distance;
將所有distance < t1的點歸到以d為中心的canopy1類中;
將所有distance < t2的點從d中移除;
重複步驟4-6,直到d為空,形成多個canopy類。
從canopy演算法實現的步驟來看,canopy演算法的優點明顯,同時也存在一定的缺點:就是要事先指定合適的t1 和 t2
canopy聚類過程如圖所示:
**實現
本案例以鳶尾花資料集為例
// 資料載入
val irisdata = spark.read
.option("header", true)
.option("inferschema", true)
.csv(inputfile)
資料預處理//
val schema = irisdata.schema
val fts = schema.filternot(_.name == """class""").map(_.name).toarray
// 特徵處理
val amountvectorassembler: vectorassembler = new vectorassembler()
.setinputcols(fts)
.setoutputcol("features")
val ftsdf = amountvectorassembler
.transform(irisdata)
.select("features")
// 計算歐式距離
def euclidean(p1: seq[double], p2: seq[double]) =
sqrt(distant)
}// canopy聚類演算法過程
def conapyrunner(df: dataframe, t1: double, t2: double) = )
val distancedf = dfcopy
.withcolumn("distance", distanceudf($"features"))
.withcolumn("t2threshold", $"distance".getfield("_2"))
.withcolumn("t1threshold", $"distance".getfield("_1"))
// 將距離小於t1的輸出 同時剔除的還有初始點d
resultdf = resultdf.union(
distancedf
.where($"t1threshold")
.select($"features", lit(cluster) as "cluster")
)// 將距離小於t2的點從資料集移除
dfcopy = distancedf
.where(!$"t2threshold")
.select($"features")
// 判斷df是否已經為空 df為空時 結束迴圈
flag = !dfcopy.isempty
}// 返回聚類結果集
resultdf
}// 聚類方法呼叫
val dd = conapyrunner(ftsdf, 4, 1.5)
dd.show()
結果檢視(已省略部分展示結果)
+-----------------+--------+
| features|conapyid|
+-----------------+--------+
|[5.1,3.5,1.4,0.2]| 1|
|[4.9,3.0,1.4,0.2]| 1|
|[5.6,2.5,3.9,1.1]| 2|
|[5.9,3.2,4.8,1.8]| 2|
+-----------------+--------+
從演算法可以得知,使用canopy聚類時,產生的各類之間可能是有交集的,資料集的canopy劃分完成後,類似於下圖:
canopy演算法流程 Canopy聚類演算法
一 概念 與傳統的聚類演算法 比如k means 不同,canopy聚類最大的特點是不需要事先指定k值 即clustering的個數 因此具有很大的實際應用價值。與其他聚類演算法相比,canopy聚類雖然精度較低,但其在速度上有很大優勢,因此可以使用canopy聚類先對資料進行 粗 聚類,得到k值後...
Canopy聚類演算法分析
canopy聚類演算法是可以並行執行的演算法,資料並行意味著可以多執行緒進行,加快聚類速度,開源ml庫mahout 使用。一 概念 與傳統的聚類演算法 比如 k means 不同,canopy 聚類最大的特點是不需要事先指定 k 值 即 clustering 的個數 因此具有很大的實際應用價值。與其...
Canopy聚類演算法過程
前幾天學習canopy演算法,看了上面的流程圖一直不懂,後來對整個流程模擬了一遍,並畫了個圖,才逐漸理解了,現將流程用自己的語言敘述一遍 我們假設每個資料用小圓點來表示。在計算機中用list集合儲存。canopy演算法首先選擇兩個距離閾值 t1和t2,其中t1 t2 1 原始狀態下的資料還沒有分類,...