Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * Licensed to the Apache Software Foundation (ASF) under one or more
0003  * contributor license agreements.  See the NOTICE file distributed with
0004  * this work for additional information regarding copyright ownership.
0005  * The ASF licenses this file to You under the Apache License, Version 2.0
0006  * (the "License"); you may not use this file except in compliance with
0007  * the License.  You may obtain a copy of the License at
0008  *
0009  *    http://www.apache.org/licenses/LICENSE-2.0
0010  *
0011  * Unless required by applicable law or agreed to in writing, software
0012  * distributed under the License is distributed on an "AS IS" BASIS,
0013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0014  * See the License for the specific language governing permissions and
0015  * limitations under the License.
0016  */
0017 
0018 package org.apache.spark.examples.ml;
0019 
0020 // $example on$
0021 import org.apache.spark.ml.clustering.BisectingKMeans;
0022 import org.apache.spark.ml.clustering.BisectingKMeansModel;
0023 import org.apache.spark.ml.evaluation.ClusteringEvaluator;
0024 import org.apache.spark.ml.linalg.Vector;
0025 import org.apache.spark.sql.Dataset;
0026 import org.apache.spark.sql.Row;
0027 // $example off$
0028 import org.apache.spark.sql.SparkSession;
0029 
0030 
0031 /**
0032  * An example demonstrating bisecting k-means clustering.
0033  * Run with
0034  * <pre>
0035  * bin/run-example ml.JavaBisectingKMeansExample
0036  * </pre>
0037  */
0038 public class JavaBisectingKMeansExample {
0039 
0040   public static void main(String[] args) {
0041     SparkSession spark = SparkSession
0042       .builder()
0043       .appName("JavaBisectingKMeansExample")
0044       .getOrCreate();
0045 
0046     // $example on$
0047     // Loads data.
0048     Dataset<Row> dataset = spark.read().format("libsvm").load("data/mllib/sample_kmeans_data.txt");
0049 
0050     // Trains a bisecting k-means model.
0051     BisectingKMeans bkm = new BisectingKMeans().setK(2).setSeed(1);
0052     BisectingKMeansModel model = bkm.fit(dataset);
0053 
0054     // Make predictions
0055     Dataset<Row> predictions = model.transform(dataset);
0056 
0057     // Evaluate clustering by computing Silhouette score
0058     ClusteringEvaluator evaluator = new ClusteringEvaluator();
0059 
0060     double silhouette = evaluator.evaluate(predictions);
0061     System.out.println("Silhouette with squared euclidean distance = " + silhouette);
0062 
0063     // Shows the result.
0064     System.out.println("Cluster Centers: ");
0065     Vector[] centers = model.clusterCenters();
0066     for (Vector center : centers) {
0067       System.out.println(center);
0068     }
0069     // $example off$
0070 
0071     spark.stop();
0072   }
0073 }