| package com.yahoo.labs.samoa.learners.clusterers; |
| |
| /* |
| * #%L |
| * SAMOA |
| * %% |
| * Copyright (C) 2013 Yahoo! Inc. |
| * %% |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * #L% |
| */ |
| /** |
| * License |
| */ |
| import com.github.javacliparser.ClassOption; |
| import com.github.javacliparser.Configurable; |
| import com.yahoo.labs.samoa.instances.Instance; |
| import com.yahoo.labs.samoa.instances.Instances; |
| import com.yahoo.labs.samoa.instances.InstancesHeader; |
| import com.yahoo.labs.samoa.moa.cluster.Clustering; |
| import com.yahoo.labs.samoa.moa.clusterers.clustream.Clustream; |
| |
| /** |
| * |
| * Base class for adapting Clustream clusterer. |
| * |
| */ |
| public class ClustreamClustererAdapter implements LocalClustererAdapter, Configurable { |
| |
| /** |
| * |
| */ |
| private static final long serialVersionUID = 4372366401338704353L; |
| |
| public ClassOption learnerOption = new ClassOption("learner", 'l', |
| "Clusterer to train.", com.yahoo.labs.samoa.moa.clusterers.Clusterer.class, Clustream.class.getName()); |
| /** |
| * The learner. |
| */ |
| protected com.yahoo.labs.samoa.moa.clusterers.Clusterer learner; |
| |
| /** |
| * The is init. |
| */ |
| protected Boolean isInit; |
| |
| /** |
| * The dataset. |
| */ |
| protected Instances dataset; |
| |
| @Override |
| public void setDataset(Instances dataset) { |
| this.dataset = dataset; |
| } |
| |
| /** |
| * Instantiates a new learner. |
| * |
| * @param learner the learner |
| * @param dataset the dataset |
| */ |
| public ClustreamClustererAdapter(com.yahoo.labs.samoa.moa.clusterers.Clusterer learner, Instances dataset) { |
| this.learner = learner.copy(); |
| this.isInit = false; |
| this.dataset = dataset; |
| } |
| |
| /** |
| * Instantiates a new learner. |
| * |
| * @param learner the learner |
| * @param dataset the dataset |
| */ |
| public ClustreamClustererAdapter() { |
| this.learner = ((com.yahoo.labs.samoa.moa.clusterers.Clusterer) this.learnerOption.getValue()).copy(); |
| this.isInit = false; |
| //this.dataset = dataset; |
| } |
| |
| /** |
| * Creates a new learner object. |
| * |
| * @return the learner |
| */ |
| @Override |
| public ClustreamClustererAdapter create() { |
| ClustreamClustererAdapter l = new ClustreamClustererAdapter(learner, dataset); |
| if (dataset == null) { |
| System.out.println("dataset null while creating"); |
| } |
| return l; |
| } |
| |
| /** |
| * Trains this classifier incrementally using the given instance. |
| * |
| * @param inst the instance to be used for training |
| */ |
| @Override |
| public void trainOnInstance(Instance inst) { |
| if (this.isInit == false) { |
| this.isInit = true; |
| InstancesHeader instances = new InstancesHeader(dataset); |
| this.learner.setModelContext(instances); |
| this.learner.prepareForUse(); |
| } |
| if (inst.weight() > 0) { |
| inst.setDataset(dataset); |
| learner.trainOnInstance(inst); |
| } |
| } |
| |
| /** |
| * Predicts the class memberships for a given instance. If an instance is |
| * unclassified, the returned array elements must be all zero. |
| * |
| * @param inst the instance to be classified |
| * @return an array containing the estimated membership probabilities of the |
| * test instance in each class |
| */ |
| @Override |
| public double[] getVotesForInstance(Instance inst) { |
| double[] ret; |
| inst.setDataset(dataset); |
| if (this.isInit == false) { |
| ret = new double[dataset.numClasses()]; |
| } else { |
| ret = learner.getVotesForInstance(inst); |
| } |
| return ret; |
| } |
| |
| /** |
| * Resets this classifier. It must be similar to starting a new classifier |
| * from scratch. |
| * |
| */ |
| @Override |
| public void resetLearning() { |
| learner.resetLearning(); |
| } |
| |
| public boolean implementsMicroClusterer() { |
| return this.learner.implementsMicroClusterer(); |
| } |
| |
| public Clustering getMicroClusteringResult() { |
| return this.learner.getMicroClusteringResult(); |
| } |
| |
| public Instances getDataset() { |
| return this.dataset; |
| } |
| |
| } |