Mercurial > hg > nsaunier > traffic-intelligence
comparison python/utils.py @ 86:f03ec4697a09
corrected discrete distribution
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Tue, 19 Apr 2011 02:01:09 -0400 |
| parents | 7f1e54234f96 |
| children | 550556378466 |
comparison
equal
deleted
inserted
replaced
| 85:7f1e54234f96 | 86:f03ec4697a09 |
|---|---|
| 29 | 29 |
| 30 | 30 |
| 31 class EmpiricalDiscreteDistribution(EmpiricalDistribution): | 31 class EmpiricalDiscreteDistribution(EmpiricalDistribution): |
| 32 '''Class to represent a sample of a distribution for a discrete random variable | 32 '''Class to represent a sample of a distribution for a discrete random variable |
| 33 ''' | 33 ''' |
| 34 from numpy.core.fromnumeric import sum | |
| 35 | |
| 34 def __init__(self, categories, counts): | 36 def __init__(self, categories, counts): |
| 35 self.categories = categories | 37 self.categories = categories |
| 36 self.counts = counts | 38 self.counts = counts |
| 37 | 39 |
| 38 def mean(self): | 40 def mean(self): |
| 39 from numpy.core.fromnumeric import sum | |
| 40 result = [float(x*y) for x,y in zip(self.categories, self.counts)] | 41 result = [float(x*y) for x,y in zip(self.categories, self.counts)] |
| 41 return sum(result)/self.nSamples() | 42 return sum(result)/self.nSamples() |
| 42 | 43 |
| 43 def var(self, mean = None): | 44 def var(self, mean = None): |
| 44 from numpy.core.fromnumeric import sum | |
| 45 if not mean: | 45 if not mean: |
| 46 m = self.mean() | 46 m = self.mean() |
| 47 else: | 47 else: |
| 48 m = mean | 48 m = mean |
| 49 result = 0. | 49 result = 0. |
| 50 squares = [float((x-m)*(x-m)*y) for x,y in zip(self.categories, self.counts)] | 50 squares = [float((x-m)*(x-m)*y) for x,y in zip(self.categories, self.counts)] |
| 51 return sum(squares)/(self.nSamples()-1) | 51 return sum(squares)/(self.nSamples()-1) |
| 52 | 52 |
| 53 def referenceCounts(self, probability): | |
| 54 '''probability is a function that returns the probability of the random variable for the category values''' | |
| 55 refProba = [probability(c) for c in self.categories] | |
| 56 refProba[-1] = 1-sum(refProba[:-1]) | |
| 57 refCounts = [r*self.nSamples() for r in refProba] | |
| 58 return refCounts, refProba | |
| 53 | 59 |
| 54 class EmpiricalContinuousDistribution(EmpiricalDistribution): | 60 class EmpiricalContinuousDistribution(EmpiricalDistribution): |
| 55 '''Class to represent a sample of a distribution for a continuous random variable | 61 '''Class to represent a sample of a distribution for a continuous random variable |
| 56 with the number of observations for each interval | 62 with the number of observations for each interval |
| 57 intervals (categories variable) are defined by their left limits, the last one being the right limit | 63 intervals (categories variable) are defined by their left limits, the last one being the right limit |
