mahout提供了記憶體中和分布式的兩種kmeans聚類實現。下面是記憶體中kmeans的**示例,示例**使用了最簡單的一維向量作為輸入:
/**
* tests kmeans cluster algorithm in memory, note the test uses only 1-d vector
* i.e., a vector of a single double
*/public static void testmemorykmeans()
//generate vectors from points
listvectors = new arraylist();
for (double pt : points) );
vectors.add(v);
}//create random initial clusters
listinitclusters = new arraylist(k);
double min = points.get(0), max = points.get(points.size() - 1);
double diff = max - min;
random rand = new random();
for (int i = 0; i < k; i++) );
org.apache.mahout.clustering.kmeans.cluster c = new
org.apache.mahout.clustering.kmeans.cluster(v, i, measure);
initclusters.add(c);
}list> clusteredclusters =
kmeansclusterer.clusterpoints(vectors, initclusters,
new euclideandistancemeasure(), maxiter, distthreshold);
listfinalcluster = clusteredclusters.get(clusteredclusters.size() - 1);
collections.sort(finalcluster, new comparator()
});for (org.apache.mahout.clustering.kmeans.cluster c : finalcluster)
}
其中的引數如下:
k是聚類的數量,
convergence即擬合度,
maxiter為最大迭代次數,注意演算法有可能在到達最大迭代次數前擬合
mahout的記憶體版本還是能支撐較大資料的,對於一維向量,調整-xmx768m,可以支撐1000w+的資料。對於多維的,調整一下記憶體,應該也能支援百w級別的資料量。
集群版本的kmeans示例**如下:
/**
* tests kmeans cluster algorithm in hadoop.
*/public static void testhadoopkmeans() catch (exception ex)
}}
注意輸入檔案必須為textfile格式,每一行表示乙個行量。
kmeans的聚類點/向量輸出格式比較特殊,為型別的,這種方式對於其他要使用此資料的可能不太友好,因此需要自己寫乙個job來轉化一下格式。
clusterdumper是mahout自帶的乙個輔助類,它能將聚類以它包含的所有向量匯出到本地檔案中(有時仍然未必是我們想要的,因為資料太大)。
如果只是簡單地想要聚類向量本身,可以寫乙個方法直接讀取聚類的sequence file的輸出。
由於kmeans演算法本身的隨機性,多次執行的結果可能會出現較大差異。比較好的方式是在執行kmeans前掃瞄資料集,得到初始的聚類,然後再執行kmeans演算法。
Mahout 中 kmeans的引數
distancemeasure measure 資料點間的距離計算方法,引數可缺,預設是 squaredeuclidean 算方法 提供引數值 chebyshevdistancemeasure 切比雪夫距離 cosinedistancemeasure 余弦距離 euclideandistanceme...
mahout中的kmeans簡單例項
在mahout in action這本書中,有個kmeans的簡單例項,可書中只給了源 而並沒有指出要匯入哪些包才能正確執行 這本書在內容開始提到書中所有 都是基於mahout0.4版本的,可是我發現這個kmeans的例子,卻是基於mahout0.3的,有幾個函式0.4版中是沒有的 我不知道是不是因...
mahout之聚類演算法 KMeans分析
一,k means聚類演算法原理 k means 演算法接受引數 k 然後將事先輸入的n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足 同一聚類中的物件相似度較高 而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得乙個 中心物件 引力中心 來進行計算的。k means演算法是...