@Override public void map(Text key, BytesWritable value, Context context) throws IOException, InterruptedException { final byte[] values = value.getBytes(); final byte[] points = new byte[value.getLength()]; System.arraycopy(values, 0, points, 0, points.length); final int cluster = assigner.assign(points); context.write(new IntWritable(cluster), new BytesWritable(points)); if (new Random().nextDouble() < randomFallbackChance) { context.write(new IntWritable(k + 1), new BytesWritable(points)); } } }
@Override public SparseIntFV aggregateVectors(List<? extends ArrayFeatureVector<T>> features) { final SparseIntFV fv = new SparseIntFV(this.assigner.size()); for (final ArrayFeatureVector<T> f : features) { final int idx = assigner.assign(f.values); fv.values.increment(idx, 1); } return fv; }
@Override public SparseIntFV aggregateVectors(List<? extends ArrayFeatureVector<T>> features) { final SparseIntFV fv = new SparseIntFV(this.assigner.size()); for (final ArrayFeatureVector<T> f : features) { final int idx = assigner.assign(f.values); fv.values.increment(idx, 1); } return fv; }
@Override public int[][] performClustering(byte[][] data) { ByteCentroidsResult clusters = this.cluster(data); return new IndexClusters(clusters.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(double[][] data) { DoubleCentroidsResult clusters = this.cluster(data); return new IndexClusters(clusters.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(short[][] data) { ShortCentroidsResult res = this.cluster(data); return new IndexClusters(res.defaultHardAssigner().assign(data)).clusters(); }
@Override public SparseIntFV aggregate(List<? extends LocalFeature<?, ? extends ArrayFeatureVector<T>>> features) { final SparseIntFV fv = new SparseIntFV(this.assigner.size()); for (final LocalFeature<?, ? extends ArrayFeatureVector<T>> f : features) { final int idx = assigner.assign(f.getFeatureVector().values); fv.values.increment(idx, 1); } return fv; }
@Override public int[][] performClustering(T[] data) { final FeatureVectorCentroidsResult<T> clusters = this.cluster(data); return new IndexClusters(clusters.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(int[][] data) { IntCentroidsResult clusters = this.cluster(data); return new IndexClusters(clusters.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(int[][] data) { return new IndexClusters(this.cluster(data).defaultHardAssigner().assign(data)).clusters(); } }
@Override public int[][] performClustering(byte[][] data) { ByteCentroidsResult res = this.cluster(data); return new IndexClusters(res.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(int[][] data) { IntCentroidsResult res = this.cluster(data); return new IndexClusters(res.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(long[][] data) { LongCentroidsResult clusters = this.cluster(data); return new IndexClusters(clusters.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(float[][] data) { FloatCentroidsResult clusters = this.cluster(data); return new IndexClusters(clusters.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(float[][] data) { FloatCentroidsResult res = this.cluster(data); return new IndexClusters(res.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(double[][] data) { DoubleCentroidsResult res = this.cluster(data); return new IndexClusters(res.defaultHardAssigner().assign(data)).clusters(); }
@Override public SparseIntFV aggregate(List<? extends LocalFeature<?, ? extends ArrayFeatureVector<T>>> features) { final SparseIntFV fv = new SparseIntFV(this.assigner.size()); for (final LocalFeature<?, ? extends ArrayFeatureVector<T>> f : features) { final int idx = assigner.assign(f.getFeatureVector().values); fv.values.increment(idx, 1); } return fv; }
@Override public int[][] performClustering(int[][] data) { return new IndexClusters(this.cluster(data).defaultHardAssigner().assign(data)).clusters(); } }
@Override public int[][] performClustering(short[][] data) { ShortCentroidsResult clusters = this.cluster(data); return new IndexClusters(clusters.defaultHardAssigner().assign(data)).clusters(); }
@Override public int[][] performClustering(long[][] data) { LongCentroidsResult res = this.cluster(data); return new IndexClusters(res.defaultHardAssigner().assign(data)).clusters(); }