/** * @param pmml PMML representation of Clusters * @return List of {@link ClusterInfo} */ public static List<ClusterInfo> read(PMML pmml) { Model model = pmml.getModels().get(0); Preconditions.checkArgument(model instanceof ClusteringModel); ClusteringModel clusteringModel = (ClusteringModel) model; return clusteringModel.getClusters().stream().map(cluster -> new ClusterInfo(Integer.parseInt(cluster.getId()), VectorMath.parseVector(TextUtils.parseDelimited(cluster.getArray().getValue(), ' ')), cluster.getSize()) ).collect(Collectors.toList()); }
private ClusteringModel pmmlClusteringModel(KMeansModel model, Map<Integer,Long> clusterSizesMap) { Vector[] clusterCenters = model.clusterCenters(); List<ClusteringField> clusteringFields = new ArrayList<>(); for (int i = 0; i < inputSchema.getNumFeatures(); i++) { if (inputSchema.isActive(i)) { FieldName fieldName = FieldName.create(inputSchema.getFeatureNames().get(i)); ClusteringField clusteringField = new ClusteringField(fieldName).setCenterField(ClusteringField.CenterField.TRUE); clusteringFields.add(clusteringField); } } List<Cluster> clusters = new ArrayList<>(clusterCenters.length); for (int i = 0; i < clusterCenters.length; i++) { clusters.add(new Cluster().setId(Integer.toString(i)) .setSize(clusterSizesMap.get(i).intValue()) .setArray(AppPMMLUtils.toArray(clusterCenters[i].toArray()))); } return new ClusteringModel( MiningFunction.CLUSTERING, ClusteringModel.ModelClass.CENTER_BASED, clusters.size(), AppPMMLUtils.buildMiningSchema(inputSchema), new ComparisonMeasure(ComparisonMeasure.Kind.DISTANCE).setMeasure(new SquaredEuclidean()), clusteringFields, clusters); }
public class InfoMarkerRenderer extends DefaultClusterRenderer<MyCustomMarker> { public InfoMarkerRenderer(Context context, GoogleMap map, ClusterManager<MyCustomMarker> clusterManager) { super(context, map, clusterManager); //constructor } @Override protected void onBeforeClusterItemRendered(final MyCustomMarker infomarker, MarkerOptions markerOptions) { // you can change marker options } @Override protected boolean shouldRenderAsCluster(Cluster cluster) { return cluster.getSize() > 5; // if markers <=5 then not clustering } }
assertEquals(NUM_CLUSTERS, clusteringModel.getNumberOfClusters()); assertEquals(NUM_CLUSTERS, clusteringModel.getClusters().size()); assertEquals(NUM_FEATURES, clusteringModel.getClusteringFields().size()); assertEquals(ComparisonMeasure.Kind.DISTANCE, clusteringModel.getComparisonMeasure().getKind()); assertEquals(NUM_FEATURES, clusteringModel.getClusters().get(0).getArray().getN().intValue()); for (Cluster cluster : clusteringModel.getClusters()) { assertGreater(cluster.getSize(), 0);
assertEquals(NUM_CLUSTERS, clusteringModel.getNumberOfClusters()); List<Cluster> clusters = clusteringModel.getClusters(); Cluster cluster = clusters.get(id); String[] tokens = TextUtils.parseDelimited(cluster.getArray().getValue(), ' '); double[] modelCenter = VectorMath.parseVector(tokens); assertGreater(updatedClusterSize, cluster.getSize()); assertEquals(100 + cluster.getSize(), updatedClusterSize);
/** * Create an instance of {@link ClusteringModel } * */ public ClusteringModel createClusteringModel() { return new ClusteringModel(); }
/** * Create an instance of {@link Cluster } * */ public Cluster createCluster() { return new Cluster(); }
@Override public Collection<?> getCollection(){ return clusteringModel.getClusters(); } });
/** * Create an instance of {@link ClusteringField } * */ public ClusteringField createClusteringField() { return new ClusteringField(); }
assertEquals(100, clusteringModel.getNumberOfClusters());
/** * Create an instance of {@link MissingValueWeights } * */ public MissingValueWeights createMissingValueWeights() { return new MissingValueWeights(); }
/** * Create an instance of {@link Covariances } * */ public Covariances createCovariances() { return new Covariances(); }
/** * Create an instance of {@link CenterFields } * */ public CenterFields createCenterFields() { return new CenterFields(); }
/** * Create an instance of {@link KohonenMap } * */ public KohonenMap createKohonenMap() { return new KohonenMap(); }
clusteringFields.add(new ClusteringField( FieldName.create("x")).setCenterField(ClusteringField.CenterField.TRUE)); clusteringFields.add(new ClusteringField( FieldName.create("y")).setCenterField(ClusteringField.CenterField.TRUE)); clusters.add(new Cluster().setId("0").setSize(1).setArray(AppPMMLUtils.toArray(1.0, 0.0))); clusters.add(new Cluster().setId("1").setSize(2).setArray(AppPMMLUtils.toArray(2.0, -1.0))); clusters.add(new Cluster().setId("2").setSize(3).setArray(AppPMMLUtils.toArray(-1.0, 0.0))); pmml.addModels(new ClusteringModel( MiningFunction.CLUSTERING, ClusteringModel.ModelClass.CENTER_BASED,
/** * Create an instance of {@link ClusteringModel } * */ public ClusteringModel createClusteringModel() { return new ClusteringModel(); }
@Override protected boolean shouldRenderAsCluster(Cluster cluster) { // Always render clusters. return cluster.getSize() > 1; }
/** * Create an instance of {@link ClusteringField } * */ public ClusteringField createClusteringField() { return new ClusteringField(); }
/** * Create an instance of {@link MissingValueWeights } * */ public MissingValueWeights createMissingValueWeights() { return new MissingValueWeights(); }
/** * Create an instance of {@link Covariances } * */ public Covariances createCovariances() { return new Covariances(); }