Class: JrubyMahout::RecommenderBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/jruby_mahout/recommender_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(similarity_name, neighborhood_size, recommender_name, is_weighted) ⇒ RecommenderBuilder

public interface RecommenderBuilder Implementations of this inner interface are simple helper classes which create a Recommender to be evaluated based on the given DataModel.



23
24
25
26
27
28
29
# File 'lib/jruby_mahout/recommender_builder.rb', line 23

def initialize(similarity_name, neighborhood_size, recommender_name, is_weighted)
  @is_weighted = is_weighted
  @neighborhood_size = neighborhood_size
  @similarity_name = similarity_name
  @recommender_name = recommender_name
  @item_based_allowed = (@similarity_name == "SpearmanCorrelationSimilarity") ? false : true
end

Instance Attribute Details

#item_based_allowedObject

Returns the value of attribute item_based_allowed.



20
21
22
# File 'lib/jruby_mahout/recommender_builder.rb', line 20

def item_based_allowed
  @item_based_allowed
end

#recommender_nameObject

Returns the value of attribute recommender_name.



20
21
22
# File 'lib/jruby_mahout/recommender_builder.rb', line 20

def recommender_name
  @recommender_name
end

Instance Method Details

#buildRecommender(data_model) ⇒ Object

buildRecommender(DataModel dataModel) Builds a Recommender implementation to be evaluated, using the given DataModel.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/jruby_mahout/recommender_builder.rb', line 33

def buildRecommender(data_model)
  begin
    case @similarity_name
      when "PearsonCorrelationSimilarity"
        similarity = (@is_weighted) ? PearsonCorrelationSimilarity.new(data_model, Weighting::WEIGHTED) : PearsonCorrelationSimilarity.new(data_model)
      when "EuclideanDistanceSimilarity"
        similarity = (@is_weighted) ? EuclideanDistanceSimilarity.new(data_model, Weighting::WEIGHTED) : EuclideanDistanceSimilarity.new(data_model)
      when "SpearmanCorrelationSimilarity"
        similarity = SpearmanCorrelationSimilarity.new(data_model)
      when "LogLikelihoodSimilarity"
        similarity = LogLikelihoodSimilarity.new(data_model)
      when "TanimotoCoefficientSimilarity"
        similarity = TanimotoCoefficientSimilarity.new(data_model)
      when "GenericItemSimilarity"
        similarity = PearsonCorrelationSimilarity.new(data_model, Weighting::WEIGHTED)
      else
        similarity = nil
    end

    unless @neighborhood_size.nil?
      if @neighborhood_size > 1
        neighborhood = NearestNUserNeighborhood.new(Integer(@neighborhood_size), similarity, data_model)
      elsif @neighborhood_size >= -1 and @neighborhood_size <= 1
        neighborhood = ThresholdUserNeighborhood.new(Float(@neighborhood_size), similarity, data_model)
      end
    end

    case @recommender_name
      when "GenericUserBasedRecommender"
        recommender = GenericUserBasedRecommender.new(data_model, neighborhood, similarity)
      when "GenericItemBasedRecommender"
        recommender = (@item_based_allowed) ? GenericItemBasedRecommender.new(data_model, similarity) : nil
      when "SlopeOneRecommender"
        recommender = SlopeOneRecommender.new(data_model)
      else
        recommender = nil
    end

    recommender
  rescue Exception => e
    return e
  end
end