Class: Evoc::HyperRule

Inherits:
Rule
  • Object
show all
Defined in:
lib/evoc/hyper_rule.rb

Constant Summary

Constants included from InterestingnessMeasures

InterestingnessMeasures::M_ADDED_VALUE_MAX, InterestingnessMeasures::M_ADDED_VALUE_MID, InterestingnessMeasures::M_ADDED_VALUE_MIN, InterestingnessMeasures::M_CAUSAL_CONFIDENCE_MAX, InterestingnessMeasures::M_CAUSAL_CONFIDENCE_MID, InterestingnessMeasures::M_CAUSAL_CONFIDENCE_MIN, InterestingnessMeasures::M_CAUSAL_SUPPORT_MAX, InterestingnessMeasures::M_CAUSAL_SUPPORT_MID, InterestingnessMeasures::M_CAUSAL_SUPPORT_MIN, InterestingnessMeasures::M_COLLECTIVE_STRENGTH_MAX, InterestingnessMeasures::M_COLLECTIVE_STRENGTH_MID, InterestingnessMeasures::M_COLLECTIVE_STRENGTH_MIN, InterestingnessMeasures::M_CONFIDENCE_MAX, InterestingnessMeasures::M_CONFIDENCE_MID, InterestingnessMeasures::M_CONFIDENCE_MIN, InterestingnessMeasures::M_CONVICTION_MAX, InterestingnessMeasures::M_CONVICTION_MID, InterestingnessMeasures::M_CONVICTION_MIN, InterestingnessMeasures::M_COSINE_MAX, InterestingnessMeasures::M_COSINE_MID, InterestingnessMeasures::M_COSINE_MIN, InterestingnessMeasures::M_COVERAGE_MAX, InterestingnessMeasures::M_COVERAGE_MID, InterestingnessMeasures::M_COVERAGE_MIN, InterestingnessMeasures::M_DESCRIPTIVE_CONFIRMED_CONFIDENCE_MAX, InterestingnessMeasures::M_DESCRIPTIVE_CONFIRMED_CONFIDENCE_MID, InterestingnessMeasures::M_DESCRIPTIVE_CONFIRMED_CONFIDENCE_MIN, InterestingnessMeasures::M_DIFFERENCE_OF_CONFIDENCE_MAX, InterestingnessMeasures::M_DIFFERENCE_OF_CONFIDENCE_MID, InterestingnessMeasures::M_DIFFERENCE_OF_CONFIDENCE_MIN, InterestingnessMeasures::M_EXAMPLE_AND_COUNTEREXAMPLE_RATE_MAX, InterestingnessMeasures::M_EXAMPLE_AND_COUNTEREXAMPLE_RATE_MID, InterestingnessMeasures::M_EXAMPLE_AND_COUNTEREXAMPLE_RATE_MIN, InterestingnessMeasures::M_GINI_INDEX_MAX, InterestingnessMeasures::M_GINI_INDEX_MID, InterestingnessMeasures::M_GINI_INDEX_MIN, InterestingnessMeasures::M_HYPER_COEFFICIENT_HYPER_MEASURE, InterestingnessMeasures::M_HYPER_COEFFICIENT_MAX, InterestingnessMeasures::M_HYPER_COEFFICIENT_MID, InterestingnessMeasures::M_HYPER_COEFFICIENT_MIN, InterestingnessMeasures::M_IMBALANCE_RATIO_MAX, InterestingnessMeasures::M_IMBALANCE_RATIO_MID, InterestingnessMeasures::M_IMBALANCE_RATIO_MIN, InterestingnessMeasures::M_INTERESTINGNESS_WEIGHTING_DEPENDENCY_MAX, InterestingnessMeasures::M_INTERESTINGNESS_WEIGHTING_DEPENDENCY_MID, InterestingnessMeasures::M_INTERESTINGNESS_WEIGHTING_DEPENDENCY_MIN, InterestingnessMeasures::M_JACCARD_MAX, InterestingnessMeasures::M_JACCARD_MID, InterestingnessMeasures::M_JACCARD_MIN, InterestingnessMeasures::M_J_MEASURE_MAX, InterestingnessMeasures::M_J_MEASURE_MID, InterestingnessMeasures::M_J_MEASURE_MIN, InterestingnessMeasures::M_KAPPA_MAX, InterestingnessMeasures::M_KAPPA_MID, InterestingnessMeasures::M_KAPPA_MIN, InterestingnessMeasures::M_KLOSGEN_MAX, InterestingnessMeasures::M_KLOSGEN_MID, InterestingnessMeasures::M_KLOSGEN_MIN, InterestingnessMeasures::M_KULCZYNSKI_MAX, InterestingnessMeasures::M_KULCZYNSKI_MID, InterestingnessMeasures::M_KULCZYNSKI_MIN, InterestingnessMeasures::M_LAPLACE_CORRECTED_CONFIDENCE_MAX, InterestingnessMeasures::M_LAPLACE_CORRECTED_CONFIDENCE_MID, InterestingnessMeasures::M_LAPLACE_CORRECTED_CONFIDENCE_MIN, InterestingnessMeasures::M_LEAST_CONTRADICTION_MAX, InterestingnessMeasures::M_LEAST_CONTRADICTION_MID, InterestingnessMeasures::M_LEAST_CONTRADICTION_MIN, InterestingnessMeasures::M_LEVERAGE_MAX, InterestingnessMeasures::M_LEVERAGE_MID, InterestingnessMeasures::M_LEVERAGE_MIN, InterestingnessMeasures::M_LIFT_MAX, InterestingnessMeasures::M_LIFT_MID, InterestingnessMeasures::M_LIFT_MIN, InterestingnessMeasures::M_LINEAR_CORRELATION_COEFFICIENT_MAX, InterestingnessMeasures::M_LINEAR_CORRELATION_COEFFICIENT_MID, InterestingnessMeasures::M_LINEAR_CORRELATION_COEFFICIENT_MIN, InterestingnessMeasures::M_LOEVINGER_MAX, InterestingnessMeasures::M_LOEVINGER_MID, InterestingnessMeasures::M_LOEVINGER_MIN, InterestingnessMeasures::M_ODDS_RATIO_MAX, InterestingnessMeasures::M_ODDS_RATIO_MID, InterestingnessMeasures::M_ODDS_RATIO_MIN, InterestingnessMeasures::M_ODD_MULTIPLIER_MAX, InterestingnessMeasures::M_ODD_MULTIPLIER_MID, InterestingnessMeasures::M_ODD_MULTIPLIER_MIN, InterestingnessMeasures::M_ONE_WAY_SUPPORT_MAX, InterestingnessMeasures::M_ONE_WAY_SUPPORT_MID, InterestingnessMeasures::M_ONE_WAY_SUPPORT_MIN, InterestingnessMeasures::M_PIATETSKY_SHAPIRO_MAX, InterestingnessMeasures::M_PIATETSKY_SHAPIRO_MID, InterestingnessMeasures::M_PIATETSKY_SHAPIRO_MIN, InterestingnessMeasures::M_PREVALENCE_MAX, InterestingnessMeasures::M_PREVALENCE_MID, InterestingnessMeasures::M_PREVALENCE_MIN, InterestingnessMeasures::M_RECALL_MAX, InterestingnessMeasures::M_RECALL_MID, InterestingnessMeasures::M_RECALL_MIN, InterestingnessMeasures::M_RELATIVE_RISK_MAX, InterestingnessMeasures::M_RELATIVE_RISK_MID, InterestingnessMeasures::M_RELATIVE_RISK_MIN, InterestingnessMeasures::M_SEBAG_SCHOENAUER_MAX, InterestingnessMeasures::M_SEBAG_SCHOENAUER_MID, InterestingnessMeasures::M_SEBAG_SCHOENAUER_MIN, InterestingnessMeasures::M_SPECIFICITY_MAX, InterestingnessMeasures::M_SPECIFICITY_MID, InterestingnessMeasures::M_SPECIFICITY_MIN, InterestingnessMeasures::M_SUPPORT_MAX, InterestingnessMeasures::M_SUPPORT_MID, InterestingnessMeasures::M_SUPPORT_MIN, InterestingnessMeasures::M_TWO_WAY_SUPPORT_MAX, InterestingnessMeasures::M_TWO_WAY_SUPPORT_MID, InterestingnessMeasures::M_TWO_WAY_SUPPORT_MIN, InterestingnessMeasures::M_VARYING_RATES_LIAISON_MAX, InterestingnessMeasures::M_VARYING_RATES_LIAISON_MID, InterestingnessMeasures::M_VARYING_RATES_LIAISON_MIN, InterestingnessMeasures::M_YULES_Q_MAX, InterestingnessMeasures::M_YULES_Q_MID, InterestingnessMeasures::M_YULES_Q_MIN, InterestingnessMeasures::M_YULES_Y_MAX, InterestingnessMeasures::M_YULES_Y_MID, InterestingnessMeasures::M_YULES_Y_MIN, InterestingnessMeasures::M_ZHANG_MAX, InterestingnessMeasures::M_ZHANG_MID, InterestingnessMeasures::M_ZHANG_MIN, InterestingnessMeasures::VALUE_TYPE

Instance Attribute Summary collapse

Attributes inherited from Rule

#human_lhs, #human_rhs, #tx_store

Instance Method Summary collapse

Methods inherited from Rule

#<=>, #human_name, #to_s

Methods included from InterestingnessMeasures

get_max, #get_measure, get_mid, get_min, #get_p, #get_p_values, hyper_measures, included, #instantiated_measures, is_hyper_measure?, #m_added_value, #m_causal_confidence, #m_causal_support, #m_collective_strength, #m_confidence, #m_conviction, #m_cosine, #m_coverage, #m_descriptive_confirmed_confidence, #m_difference_of_confidence, #m_example_and_counterexample_rate, #m_gini_index, #m_hyper_coefficient, #m_imbalance_ratio, #m_interestingness_weighting_dependency, #m_j_measure, #m_jaccard, #m_kappa, #m_klosgen, #m_kulczynski, #m_laplace_corrected_confidence, #m_least_contradiction, #m_leverage, #m_lift, #m_linear_correlation_coefficient, #m_loevinger, #m_odd_multiplier, #m_odds_ratio, #m_one_way_support, #m_piatetsky_shapiro, #m_prevalence, #m_recall, #m_relative_risk, #m_sebag_schoenauer, #m_specificity, #m_support, #m_two_way_support, #m_varying_rates_liaison, #m_yules_q, #m_yules_y, #m_zhang, #measure_instantiated?, measures, #n, #p_A, #p_AB, #p_A_notB, #p_AgivenB, #p_AgivennotB, #p_AorB, #p_B, #p_BgivenA, #p_BgivennotA, #p_notA, #p_notA_B, #p_notA_notB, #p_notAgivenB, #p_notAgivennotB, #p_notB, #p_notBgivenA, #p_notBgivennotA, #set_measure, #set_p, #to_a, #tx_store

Methods included from Logging

configure_logger_for, #logger, logger_for, set_level

Constructor Details

#initialize(rules, aggregator, measures) ⇒ HyperRule



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/evoc/hyper_rule.rb', line 5

def initialize(rules,aggregator,measures)
  if measures.nil? || measures.empty?
    raise ArgumentError, "At least one measure must be provided when defining a new hyper rule"
  end
  self.lhs = rules.map(&:lhs).array_union
  self.rhs = rules.map(&:rhs).array_union
  self.tx_store = rules.first.tx_store
  self.hyper_coefficient = rules.size
  # aggregate measures
  measures.each do |m|
    logger.debug "Aggregating #{self.hyper_coefficient} rules on #{m}"
    # check if its the hyper confidence
    if m == 'm_hyper_confidence'
      antecedent = self.tx_store.transactions_of_list(self.lhs)
      consequent = self.tx_store.transactions_of_list(self.rhs)
      numerator = (antecedent & consequent).size
      denominator = antecedent.size
      hyper_confidence = numerator/denominator
      self.set_measure(m,hyper_confidence,hyper_measure: true)
    else
      begin
        # get the 'm' measure of each rule 
        m_measures = rules.map {|rule| rule.get_measure(m)}
        # remove undefined measures
        m_measures.reject! {|a| a.value.nil?}
        # group the measures into negative and positive correlations
        pos_correlation = m_measures.group_by {|a| a.value > Evoc::Rule.get_mid(m)}
        positive_correlation = pos_correlation[true].nil?  ? 0 : Evoc::InterestingnessMeasureAggregator.new(m,pos_correlation[true]).method(aggregator).call.value
        # add the agggregated measure
        self.set_measure(m,positive_correlation,hyper_measure: true)

        # add the hyper coefficient as a measure for aggregators called with '.._hc'
        if !(aggregator =~ /_hc\z/).nil? 
          self.set_measure('m_hyper_coefficient',hyper_coefficient,hyper_measure: true)
        end

      rescue Evoc::Exceptions::InterestingnessMeasure::NonFinite
        logger.debug "Could not aggregate #{m} using #{aggregator}, aggregation produced a non-finite value, probably a range problem, setting measure value to nil"
        self.set_measure(m,nil, hyper_measure: true)
      end
    end
  end
end

Instance Attribute Details

#hyper_coefficientObject

Returns the value of attribute hyper_coefficient.



3
4
5
# File 'lib/evoc/hyper_rule.rb', line 3

def hyper_coefficient
  @hyper_coefficient
end

#hyper_confidenceObject

Returns the value of attribute hyper_confidence.



3
4
5
# File 'lib/evoc/hyper_rule.rb', line 3

def hyper_confidence
  @hyper_confidence
end

#lhsObject

Returns the value of attribute lhs.



3
4
5
# File 'lib/evoc/hyper_rule.rb', line 3

def lhs
  @lhs
end

#rhsObject

Returns the value of attribute rhs.



3
4
5
# File 'lib/evoc/hyper_rule.rb', line 3

def rhs
  @rhs
end

Instance Method Details

#nameObject



49
50
51
# File 'lib/evoc/hyper_rule.rb', line 49

def name
  self.lhs.join(',') + " => " + self.rhs.join(',')
end