Mahout 系列之--canopy 算法
Canopy 算法,流程簡單,容易實現,一下是算法
(1)設樣本集合為S,確定兩個閾值t1和t2,且t1>t2。
(2)任取一個樣本點p屬于S,作為一個Canopy,記為C,從S中移除p。
(3)計算S中所有點到p的距離dist
(4)若dist<t1,則將相應點歸到C,作為弱關聯。
(5)若dist<t2,則將相應點移出S,作為強關聯。
(6)重復(2)~(5),直至S為空。
上面的過程可以看出,dist<t2的點屬于有且僅有一個簇,t2<dist<t1 的點可能屬于多個簇。可見Canopy是一種軟聚類。
Canopy有消除孤立點的作用,而K-means在這方面卻無能為力。建立canopies之后,可以刪除那些包含數據點數目較少的canopy,往往這些canopy是包含孤立點的。根據canopy內點的數目,來決定聚類中心數目k,這樣效果比較好。
Canopy 聚類結果如下圖:
Mahout canopy 聚類流程如下:
(1)將文本向量化。
在文檔向量化之前,需要將出于一個目錄中的文檔序列化,所謂序列化就是將文檔內容寫成SequenceFile 格式,key:文檔標題 ,value:文檔內容。
該過程將文本分詞,計算ngram ,特征抽取,生成字典,計算特征權重生成文檔詞矩陣。
值得說明的是該過程可以由其他的方法替代,不僅限于用Mahout ,只要能生成向量即可。
(2)用Canopy 聚類。
參數:
距離度量 :cos距離(常用于文本距離度量)
T1:0.5左右
T2:0.25 左右
輸入:向量化生成的sequencefile
當T1過大時,會使許多點屬于多個Canopy,可能會造成各個簇的中心點間距離較近,各簇
間區別不明顯;
當T2過大時,增加強標記數據點的數量,會減少簇個個數;T2過小,會增加簇的個數,同時
增加計算時間
(3)結果。
../clusteredPoints 最終結果,類標志 向量
.. /clusters-0 簇中心
ClusteredPoints 數據如下:
Key: 4: Value: 1.0: [1.000, -0.213, -0.956, -0.003, 0.056, 0.091, 0.017, -0.024, 1.000]
Key: 3: Value: 1.0: [0:1.000, 1:3.147, 2:2.129, 3:-0.006, 4:-0.056, 5:-0.063, 6:-0.002, 7:0.109]
Key: 0: Value: 1.0: [1.000, -2.165, -2.718, -0.008, 0.043, -0.103, -0.156, -0.024, 1.000]
Key: 0: Value: 1.0: [1.000, -4.337, -2.686, -0.012, 0.122, 0.082, -0.021, -0.042, 1.000]
clusters-0 數據如下:
Key: C-0: Value: C-0: {8:0.9903846153846154,7:0.03641560060121199,6:-0.011104891601517057,5:-0.018746460252920098,4:0.0018451485029808527,3:0.02659166333809029,2:-2.0914853859015725,1:-2.2735344078494943,0:1.0}
Key: C-1: Value: C-1: {8:0.005681818181818182,7:-0.005705937927015517,6:0.018373023001902314,5:-0.02408518413578759,4:-0.0649238556654074,3:-0.003042417008279087,2:2.5123232537912283,1:2.0664589339683306,0:1.0}
Key: C-2: Value: C-2: {8:0.006493506493506494,7:-0.01019964334516059,6:0.023497740573602648,5:-0.03181163901232867,4:-0.05941297790332273,3:-0.017834190866604666,2:2.382976575761404,1:2.1735244959638065,0:1.0}
Key: C-3: Value: C-3: {8:0.007575757575757576,7:-0.011551099054202508,6:0.023459485214657627,5:-0.02978024551438345,4:-0.05926968634175531,3:-0.016503525708008473,2:2.2626847929337592,1:2.1570361543820167,0:1.0}
Key: C-4: Value: C-4: {8:0.9230769230769231,7:0.04076923076923077,6:-0.011730769230769232,5:-0.019307692307692307,4:0.024653846153846155,3:0.01373076923076923
總結
以上是生活随笔為你收集整理的Mahout 系列之--canopy 算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (数据科学学习手札30)朴素贝叶斯分类器
- 下一篇: Unity 多物体联动动画