the-algorithm icon indicating copy to clipboard operation
the-algorithm copied to clipboard

Switch it to Ruby

Open merouaneamqor opened this issue 1 year ago • 1 comments


require 'matrix'

class RecommendationSystem
  def initialize(user_preferences, space_profiles)
    @user_preferences = user_preferences
    @space_profiles = space_profiles
  end

  def recommend(user)
    user_vector = Vector.elements(@user_preferences[user])
    similarities = {}

    @space_profiles.each do |space, profile|
      space_vector = Vector.elements(profile)
      cosine_similarity = calculate_cosine_similarity(user_vector, space_vector)
      similarities[space] = cosine_similarity
    end

    similarities.sort_by { |_space, similarity| -similarity }.to_h
  end

  private

  def calculate_cosine_similarity(vector1, vector2)
    dot_product = vector1.inner_product(vector2)
    magnitude = vector1.magnitude * vector2.magnitude
    dot_product / magnitude
  end
end

Example Usage

user_preferences = {
  'user1' => [5, 3, 2, 0, 5],
}
space_profiles = {
  'space1' => [5, 3, 2, 0, 5],
  'space2' => [1, 1, 1, 1, 1],
}

recommender = RecommendationSystem.new(user_preferences, space_profiles)
recommendations = recommender.recommend('user1')
puts recommendations

merouaneamqor avatar May 20 '24 15:05 merouaneamqor

Twitter was originally written in Ruby, showing the level of sophistication of their execs and engineers. Sun or Oracle finally got rid of the "Fail Whale", replacing Ruby with Java (or a variant).

Twitter "engineers" have always been a joke on par with Firefox "engineers".

TolstoyDotCom avatar Jun 14 '24 05:06 TolstoyDotCom