Mercurial > hg > nsaunier > traffic-intelligence
comparison python/ml.py @ 787:0a428b449b80 dev
improved script to display over world image
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Thu, 17 Mar 2016 16:01:19 -0400 |
| parents | 1f2b2d1f4fbf |
| children | 5b970a5bc233 |
comparison
equal
deleted
inserted
replaced
| 786:1f2b2d1f4fbf | 787:0a428b449b80 |
|---|---|
| 193 clusterSizes = {i: sum(np.array(labels) == i) for i in prototypeIndices} | 193 clusterSizes = {i: sum(np.array(labels) == i) for i in prototypeIndices} |
| 194 clusterSizes['outlier'] = sum(np.array(labels) == outlierIndex) | 194 clusterSizes['outlier'] = sum(np.array(labels) == outlierIndex) |
| 195 return clusterSizes | 195 return clusterSizes |
| 196 | 196 |
| 197 # Gaussian Mixture Models | 197 # Gaussian Mixture Models |
| 198 def plotGMMClusters(model, dataset = None, colors = utils.colors): | 198 def plotGMMClusters(model, dataset = None, fig = None, colors = utils.colors, nPixelsPerUnit = 1., alpha = 0.3): |
| 199 '''plot the ellipse corresponding to the Gaussians | 199 '''plot the ellipse corresponding to the Gaussians |
| 200 and the predicted classes of the instances in the dataset''' | 200 and the predicted classes of the instances in the dataset''' |
| 201 fig = plt.figure() | 201 if fig is None: |
| 202 fig = plt.figure() | |
| 202 labels = model.predict(dataset) | 203 labels = model.predict(dataset) |
| 204 tmpDataset = nPixelsPerUnit*dataset | |
| 203 for i in xrange(model.n_components): | 205 for i in xrange(model.n_components): |
| 204 mean = model.means_[i] | 206 mean = nPixelsPerUnit*model.means_[i] |
| 207 covariance = nPixelsPerUnit*model.covars_[i] | |
| 205 if dataset is not None: | 208 if dataset is not None: |
| 206 plt.scatter(dataset[labels == i, 0], dataset[labels == i, 1], .8, color=colors[i]) | 209 plt.scatter(tmpDataset[labels == i, 0], tmpDataset[labels == i, 1], .8, color=colors[i]) |
| 207 plt.annotate(str(i), xy=(mean[0]+1, mean[1]+1)) | 210 plt.annotate(str(i), xy=(mean[0]+1, mean[1]+1)) |
| 208 | 211 |
| 209 # Plot an ellipse to show the Gaussian component | 212 # Plot an ellipse to show the Gaussian component |
| 210 v, w = np.linalg.eigh(model.covars_[i]) | 213 v, w = np.linalg.eigh(covariance) |
| 211 angle = np.arctan2(w[0][1], w[0][0]) | 214 angle = np.arctan2(w[0][1], w[0][0]) |
| 212 angle = 180*angle/np.pi # convert to degrees | 215 angle = 180*angle/np.pi # convert to degrees |
| 213 v *= 4 | 216 v *= 4 |
| 214 ell = mpl.patches.Ellipse(mean, v[0], v[1], 180+angle, color=colors[i]) | 217 ell = mpl.patches.Ellipse(mean, v[0], v[1], 180+angle, color=colors[i]) |
| 215 ell.set_clip_box(fig.bbox) | 218 ell.set_clip_box(fig.bbox) |
| 216 ell.set_alpha(.5) | 219 ell.set_alpha(alpha) |
| 217 fig.axes[0].add_artist(ell) | 220 fig.axes[0].add_artist(ell) |
