Пример #1
0
 def rmse_known_ground(self, ground_model, transactions):
     rmse = 0.0
     amount_terms = 0
     for transaction in transactions:
         for product in transaction.offered_products:
             probability_1 = self.probability_of(
                 Transaction(product, transaction.offered_products))
             probability_2 = ground_model.probability_of(
                 Transaction(product, transaction.offered_products))
             rmse += ((probability_1 - probability_2)**2)
             amount_terms += 1
     return sqrt(rmse / float(amount_terms))
Пример #2
0
def read_synthetic_instance(file_name):
    with open(file_name, 'r') as f:
        data = json.loads(f.read())
    ground_truth = Model.from_data(data['ground_model'])
    transactions = Transaction.from_json(
        data['transactions']['in_sample_transactions'])
    return ground_truth, transactions
Пример #3
0
    def soft_chi_squared_score_for(self, ground_model, transactions):
        expected_purchases = [0.0 for _ in self.products]
        observed_purchases = [0.0 for _ in self.products]

        for transaction in transactions:
            for product in transaction.offered_products:
                observed_purchases[product] += ground_model.probability_of(
                    Transaction(product, transaction.offered_products))
                expected_purchases[product] += self.probability_of(
                    Transaction(product, transaction.offered_products))

        score = 0.0
        for p in self.products:
            score += (((expected_purchases[p] - observed_purchases[p])**2) /
                      (expected_purchases[p] + 0.5))
        return score / float(len(self.products))
Пример #4
0
 def soft_rmse_for(self, ground_model):
     rmse = 0.0
     amount_terms = 0.0
     for t in Transaction.all_for(self):
         rmse += ((self.probability_of(t) -
                   ground_model.probability_of(t))**2)
         amount_terms += 1
     return sqrt(rmse / float(amount_terms))
Пример #5
0
 def rmse_for(self, transactions):
     rmse = 0.0
     amount_terms = 0
     for transaction in transactions:
         for product in transaction.offered_products:
             probability = self.probability_of(
                 Transaction(product, transaction.offered_products))
             rmse += ((probability -
                       float(product == transaction.product))**2)
             amount_terms += 1
     return sqrt(rmse / float(amount_terms))
Пример #6
0
 def hit_rate_for(self, transactions):
     hit_rate = 0
     for transaction in transactions:
         probabilities = []
         for product in transaction.offered_products:
             probabilities.append(
                 (product,
                  self.probability_of(
                      Transaction(product, transaction.offered_products))))
         most_probable = max(probabilities, key=lambda p: p[1])[0]
         hit_rate += int(most_probable == transaction.product)
     return float(hit_rate) / float(len(transactions))
Пример #7
0
 def infinite_in_sample_log_likelihood(self, ground_model):
     result = 0
     for t in Transaction.all_for(self):
         result += (ground_model.probability_of(t) *
                    self.log_probability_of(t))
     return result
Пример #8
0
 def probability_distribution_over(self, offered_products):
     distribution = []
     for product in range(len(self.products)):
         transaction = Transaction(product, offered_products)
         distribution.append(self.probability_of(transaction))
     return distribution