====== Fuzzy Concept Extractor ====== While "Fuzzy Concept Extractor" might seem like a specialization of "Concept Extractor", it is a generalization compared to concept extractors for binary relations and multivalued crisp relations ("one value among"--think radio buttons). If a fuzzy trait can have several modalities to varying degrees, with the sum of degrees (or affinities) ^ Fuzzy (or composite) Trait((conceivably, in a case like this example, luminosity could be unconstrained, but the RGB values could be constrained to produce that luminosity. The RGB values represent a pattern but not a histogram normed to 100%)) ^^^^ Multiple choice \\ (Crisp) ^^^^ Fuzzy (another) ^^ Binary \\ (explicit) ^^ Binary \\ (usual compact\\ Y/N) ^ ^ Red ^ Green ^ Blue ^ Luminance ^ Dog ^ Cat ^ Bird ^ Fish ^ Day ^ Night ^ Day ^ Night ^ Day ^ | | | | | | | | | | | 1 | 0 | X | daytime | | | | | | | | | | | | 0 | 1 | _ | night time | | | | | | | 1 | | | 60% | 40% | | | | evening? dawn? | | | | | | | | | | | | | | | | | | | | | | | | | | | So (for quantified descriptors) * a rated pattern is an ordered set of numeric values associated with descriptors * a normed histogram (or affinities or belief weights?) is a pattern whose descriptors must add to 100% * a multi-valued (scaled) attribute is a histogram which concentrates the 100% on a single modality * a binary-valued attribute is a multi-valued attribute with only two modalities * mostly abbreviated as "on/off" ====== Classes and Pseudocode ====== * FuzzyConceptExtractor * input : file of context to analyse, or * FuzzyContext * Trait*Modality framework * Traits * Modalities * Norm Constraint (if sum of affinities must equal a set value: 100 for percents, 1000 for per mil, etc.) * Trait-Modalities segmentation : for decoding (segmenting, parsing) the serialized affinities and applying the norm constraints. * Specimens : TreeSet * Specimen.name * Specimen.affinities: serialized affinities for each trait.modality, in order * Constructors * TreeSet (Specimins is not a specialized class); Specimen have a lexicographic compareTo(). * FuzzyConcepts : output * FuzzyConcept * Constructors * FuzzyConcept(FuzzyConcept prior, FuzzyContext context, Specimen candidate) : * FuzzyIntent of prior relaxed to admit candidate * FuzzyExtent closed with respect to new FuzzyIntent for context.specimens. * FuzzyConcept(FuzzyContext context, Specimen candidate) * FuzzyIntent(Specimen candidate) * FuzzyExtent(FuzzyIntent intent, FuzzyContext context, Specimen currentSpecimen) * FuzzyIntent * minAffinities : integer vector * maxAffinities : integer vector * Constructors * FuzzyIntent(Specimen founder) : create an intent from a specimen (min=max=specimen.affinities) * FuzzyIntent(FuzzyIntent prior, Specimen candidate) : create an intent from prior, relaxed to admit candidate. * FuzzyExtent * TreeSet * Constructors * FuzzyExtent(FuzzyIntent intent, FuzzyContext context) : list of all specimens in context which intent.admits(). * FuzzyExtent(FuzzyIntent intent, FuzzyContext context, Specimen currentSpecimen) : * list of all specimens in context which intent.admits() if none are predecessors of currentSpecimen, * **null** otherwise. * FuzzyExtent(FuzzyIntent intent, FuzzyContext context, Specimen currentSpecimen, FuzzyExtent prior) : * prior plus list of all other specimens in context which intent.admits() if none are predecessors of currentSpecimen, * **null** otherwise. ===== Algorithm ===== * FuzzyConceptExtractor constructs FuzzyContext with normed affinities, specimens sorted by normed affinities in lexicographic order. * For each specimen in FuzzyContext, FCE generates its FuzzyConcept * If new (not redundant) * For each successor specimen, derive relaxed FuzzyConcept -- FuzzyConcept(FuzzyConcept prior, FuzzyContext context, Specimen candidate) -- to include the candidate. If new, continue recursively. This will have to be done either via a FCE method or passing the FCE concept tree as an argument to be able to add each new concept to the tree.