阅读背景:

在内存中执行k-means聚类算法

来源:互联网 

<strong><span>/***
 * @author YangXin
 * @info 应用点集测试K-Means聚类算法
 */
package unitNine;
import java.util.ArrayList;
import java.util.List;
import org.apache.mahout.clustering.Cluster;
import org.apache.mahout.clustering.UncommonDistributions;
import org.apache.mahout.common.distance.EuclideanDistanceMeasure;
import org.apache.mahout.math.DenseVector;
import org.apache.mahout.math.Vector;
public class KMeansExample {
	private static void generateSamples(List<Vector> vectors, int num, double mx, double my, double sd){
		for(int i = 0; i < num; i++){
			vectors.add(new DenseVector(new double[]{UncommonDistributions.rNorm(mx, sd),UncommonDistributions.rNorm(my, sd) }));
		}
	}
	
	public static void main(String[] args){
		List<Vector> sampleData = new ArrayList<Vector>();

		RandomPointsUtil.generateSamples(sampleData, 400, 1, 1, 3);
		RandomPointsUtil.generateSamples(sampleData, 300, 1, 0, 0.5);
		RandomPointsUtil.generateSamples(sampleData, 300, 0, 2, 0.1);

		int k = 3;
		List<Vector> randomPoints = RandomPointsUtil.chooseRandomPoints(
				sampleData, k);
		List<Cluster> clusters = new ArrayList<Cluster>();

		int clusterId = 0;
		for (Vector v : randomPoints) {
			clusters.add(new Cluster(v, clusterId++, new EuclideanDistanceMeasure()));
		}

		List<List<Cluster>> finalClusters = KMeansClusterer.clusterPoints(
				sampleData, clusters, new EuclideanDistanceMeasure(), 3, 0.01);
		for (Cluster cluster : finalClusters.get(finalClusters.size() - 1)) {
			System.out.println("Cluster id: " + cluster.getId() + " center: "
					+ cluster.getCenter().asFormatString());
		}
}
</span></strong><strong><span>/***
 * @author YangXin
 * @info 应用点




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: