mahout使用KMeans演算法

2021-06-02 06:39:31 字數 1921 閱讀 4113

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演算法是...