001/*
002        AUTOMATICALLY GENERATED BY jTemp FROM
003        /Users/jsh2/Work/openimaj/target/checkout/machine-learning/clustering/src/main/jtemp/org/openimaj/ml/clustering/kmeans/#T#KMeansInit.jtemp
004*/
005/**
006 * Copyright (c) 2011, The University of Southampton and the individual contributors.
007 * All rights reserved.
008 *
009 * Redistribution and use in source and binary forms, with or without modification,
010 * are permitted provided that the following conditions are met:
011 *
012 *   *  Redistributions of source code must retain the above copyright notice,
013 *      this list of conditions and the following disclaimer.
014 *
015 *   *  Redistributions in binary form must reproduce the above copyright notice,
016 *      this list of conditions and the following disclaimer in the documentation
017 *      and/or other materials provided with the distribution.
018 *
019 *   *  Neither the name of the University of Southampton nor the names of its
020 *      contributors may be used to endorse or promote products derived from this
021 *      software without specific prior written permission.
022 *
023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
024 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
025 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
026 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
027 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
028 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
029 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
030 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
031 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
032 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
033 */
034package org.openimaj.ml.clustering.kmeans;
035
036import java.io.IOException;
037
038import org.openimaj.data.DataSource;
039
040/**
041 * Initialisation for K-Means clustering. Given a data source of samples and a 
042 * set of clusters to fill, implementations of this class should initialise 
043 * the KMeans algorithm. 
044 *
045 * A default RANDOM implementation is provided which uses {@link DataSource#getRandomRows}
046 * 
047 * @author Jonathon Hare (jsh2@ecs.soton.ac.uk)
048 * @author Sina Samangooei (ss@ecs.soton.ac.uk)
049 */
050public abstract class FloatKMeansInit {
051        /**
052         * Initialise the centroids based on the given data.
053         * 
054         * @param bds the data source of samples
055         * @param clusters the clusters to init
056         * @throws IOException problem reading samples
057         */
058        public abstract void initKMeans(DataSource<float[]> bds, float[][] clusters) throws IOException;
059
060        /**
061         * Simple kmeans initialized on randomly selected samples.
062         * 
063         * @author Jonathon Hare (jsh2@ecs.soton.ac.uk)
064         * @author Sina Samangooei (ss@ecs.soton.ac.uk)
065         */
066        public static class RANDOM extends FloatKMeansInit {
067                @Override
068                public void initKMeans(DataSource<float[]> bds, float[][] clusters) throws IOException {
069                        bds.getRandomRows(clusters);
070                }
071        }
072}