/** * @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()); }
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);
List<Cluster> clusters = clusteringModel.getClusters();
@Override public Collection<?> getCollection(){ return clusteringModel.getClusters(); } });
public ClusteringModel addClusters(Cluster... clusters) { getClusters().addAll(Arrays.asList(clusters)); return this; }
public ClusteringModel addClusters(Cluster... clusters) { getClusters().addAll(Arrays.asList(clusters)); return this; }
@Override public BiMap<String, Cluster> load(ClusteringModel clusteringModel){ return EntityUtil.buildBiMap(clusteringModel.getClusters()); } });
/** * @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 <V extends Number> ClusterAffinityDistribution<V> evaluateSimilarity(ValueFactory<V> valueFactory, ComparisonMeasure comparisonMeasure, List<ClusteringField> clusteringFields, List<FieldValue> values){ ClusteringModel clusteringModel = getModel(); List<Cluster> clusters = clusteringModel.getClusters(); ClusterAffinityDistribution<V> result = createClusterAffinityDistribution(Classification.Type.SIMILARITY, clusters); BitSet flags = MeasureUtil.toBitSet(values); for(Cluster cluster : clusters){ BitSet clusterFlags = CacheUtil.getValue(cluster, ClusteringModelEvaluator.clusterFlagCache); if(flags.size() != clusterFlags.size()){ throw new InvalidElementException(cluster); } Value<V> similarity = MeasureUtil.evaluateSimilarity(valueFactory, comparisonMeasure, clusteringFields, flags, clusterFlags); result.put(cluster, similarity); } return result; }
private <V extends Number> ClusterAffinityDistribution<V> evaluateDistance(ValueFactory<V> valueFactory, ComparisonMeasure comparisonMeasure, List<ClusteringField> clusteringFields, List<FieldValue> values){ ClusteringModel clusteringModel = getModel(); List<Cluster> clusters = clusteringModel.getClusters(); Value<V> adjustment; MissingValueWeights missingValueWeights = clusteringModel.getMissingValueWeights(); if(missingValueWeights != null){ Array array = missingValueWeights.getArray(); List<? extends Number> adjustmentValues = ArrayUtil.asNumberList(array); if(values.size() != adjustmentValues.size()){ throw new InvalidElementException(missingValueWeights); } adjustment = MeasureUtil.calculateAdjustment(valueFactory, values, adjustmentValues); } else { adjustment = MeasureUtil.calculateAdjustment(valueFactory, values); } ClusterAffinityDistribution<V> result = createClusterAffinityDistribution(Classification.Type.DISTANCE, clusters); for(Cluster cluster : clusters){ List<FieldValue> clusterValues = CacheUtil.getValue(cluster, ClusteringModelEvaluator.clusterValueCache); if(values.size() != clusterValues.size()){ throw new InvalidElementException(cluster); } Value<V> distance = MeasureUtil.evaluateDistance(valueFactory, comparisonMeasure, clusteringFields, values, clusterValues, adjustment); result.put(cluster, distance); } return result; }
@Override public VisitorAction accept(Visitor visitor) { VisitorAction status = visitor.visit(this); if (status == VisitorAction.CONTINUE) { visitor.pushParent(this); if ((status == VisitorAction.CONTINUE)&&hasExtensions()) { status = PMMLObject.traverse(visitor, getExtensions()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getMiningSchema(), getOutput(), getModelStats(), getModelExplanation(), getLocalTransformations(), getComparisonMeasure()); } if ((status == VisitorAction.CONTINUE)&&hasClusteringFields()) { status = PMMLObject.traverse(visitor, getClusteringFields()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getCenterFields(), getMissingValueWeights()); } if ((status == VisitorAction.CONTINUE)&&hasClusters()) { status = PMMLObject.traverse(visitor, getClusters()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getModelVerification()); } visitor.popParent(); } if (status == VisitorAction.TERMINATE) { return VisitorAction.TERMINATE; } return VisitorAction.CONTINUE; }
@Override public VisitorAction accept(Visitor visitor) { VisitorAction status = visitor.visit(this); if (status == VisitorAction.CONTINUE) { visitor.pushParent(this); if ((status == VisitorAction.CONTINUE)&&hasExtensions()) { status = PMMLObject.traverse(visitor, getExtensions()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getMiningSchema(), getOutput(), getModelStats(), getModelExplanation(), getLocalTransformations(), getComparisonMeasure()); } if ((status == VisitorAction.CONTINUE)&&hasClusteringFields()) { status = PMMLObject.traverse(visitor, getClusteringFields()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getCenterFields(), getMissingValueWeights()); } if ((status == VisitorAction.CONTINUE)&&hasClusters()) { status = PMMLObject.traverse(visitor, getClusters()); } if (status == VisitorAction.CONTINUE) { status = PMMLObject.traverse(visitor, getModelVerification()); } visitor.popParent(); } if (status == VisitorAction.TERMINATE) { return VisitorAction.TERMINATE; } return VisitorAction.CONTINUE; }