Added a lot of code to display covariance ellipses.
Also some progress in writing about covariances in relation to Kalman filtering.
This commit is contained in:
1 parent
ea17680e68
commit
d3800c5a4f
2 files changed
+251
-59
No files matched your search
@@ -63,7 +63,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 57
|
||||
"prompt_number": 1
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -71,7 +71,7 @@
|
||||
"source": [
|
||||
"Let's use it to compute a few values just to make sure we know how to call and use the function, and then move on to more interesting things.\n",
|
||||
"\n",
|
||||
"First, let's find the probability for our dog being at 2.5, 7.3 if we believe he is at (2,7) with a variance of 4 for x and a variance of 5 for y. This function requires us to pass everything in as numpy arrays (we will soon provide a more robust version that works with numpy matrices, numpy arrays, and/or scalars in any combinations. That code contains a lot of boilerplate which obscures the algorithm).\n",
|
||||
"First, let's find the probability for our dog being at (2.5, 7.3) if we believe he is at (2,7) with a variance of 4 for x and a variance of 5 for y. This function requires us to pass everything in as numpy arrays (we will soon provide a more robust version that works with numpy matrices, numpy arrays, and/or scalars in any combinations. That code contains a lot of boilerplate which obscures the algorithm).\n",
|
||||
"\n",
|
||||
"So we set x to (2.5,7.3)"
|
||||
]
|
||||
@@ -85,7 +85,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 83
|
||||
"prompt_number": 2
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -103,7 +103,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 84
|
||||
"prompt_number": 3
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -121,7 +121,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 92
|
||||
"prompt_number": 4
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -147,7 +147,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 93
|
||||
"prompt_number": 5
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -174,7 +174,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 94
|
||||
"prompt_number": 6
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -206,11 +206,11 @@
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3c50b10>"
|
||||
"<matplotlib.figure.Figure at 0x2595550>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 104
|
||||
"prompt_number": 7
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -218,35 +218,26 @@
|
||||
"source": [
|
||||
"The result is clearly a 3D bell shaped curve. We can see that the gaussian is centered around (2,7), and that the probability quickly drops away in all directions.\n",
|
||||
"\n",
|
||||
"As beautiful as this is, it is perhaps a bit hard to get useful information. For example, it is not easy to tell if x and y both have the same variance or not. So for most of the rest of this book we will display multidimensional gaussian using contour plots.\n"
|
||||
"As beautiful as this is, it is perhaps a bit hard to get useful information. For example, it is not easy to tell if x and y both have the same variance or not. So for most of the rest of this book we will display multidimensional gaussian using contour plots. I will use some helper functions in gaussian.py to plot them. If you are interested in linear algebra go ahead and look at the code used to produce these contours, otherwise feel free to ignore it."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import numpy.linalg as linalg\n",
|
||||
"def plot_sigma_ellipse(x, y, cov):\n",
|
||||
" # Get the sigma ellipse by transforming a circle by the cholesky decomposition\n",
|
||||
"import gaussian as g\n",
|
||||
"\n",
|
||||
" L = linalg.cholesky(cov)\n",
|
||||
" t = linspace(0,2*pi,100)\n",
|
||||
" unit_circle = np.array([cos(t), sin(t)])\n",
|
||||
"\n",
|
||||
" E1 = L.dot(unit_circle)\n",
|
||||
" axis('equal')\n",
|
||||
" plot(E1[0]+x, E1[1]+y)\n",
|
||||
" scatter(x,y,marker='+') # mark the center\n",
|
||||
" show()\n",
|
||||
" \n",
|
||||
"cov = array([[2,0],[0,2]])\n",
|
||||
"plot_sigma_ellipse(2,7,cov)\n",
|
||||
"e = g.sigma_ellipse (cov, 2, 7)\n",
|
||||
"g.plot_sigma_ellipse(e, '\"2 0; 0 2\"')\n",
|
||||
"\n",
|
||||
"cov = array([[2,0],[0,12]])\n",
|
||||
"plot_sigma_ellipse(2,7,cov)\n",
|
||||
"e = g.sigma_ellipse (cov, 2, 7)\n",
|
||||
"g.plot_sigma_ellipse(e, '\"2 0; 0 12\"')\n",
|
||||
"\n",
|
||||
"cov = array([[2,3],[1,2.5]])\n",
|
||||
"plot_sigma_ellipse(2,7,cov)\n"
|
||||
"e = g.sigma_ellipse (cov, 2, 7)\n",
|
||||
"g.plot_sigma_ellipse(e,'\"2 3; 1 2.5\"')\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
@@ -254,29 +245,151 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3641d50>"
|
||||
"<matplotlib.figure.Figure at 0x2c63190>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x365dfd0>"
|
||||
"<matplotlib.figure.Figure at 0x2bce110>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x57e7410>"
|
||||
"<matplotlib.figure.Figure at 0x2bbdc90>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 155
|
||||
"prompt_number": 8
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"From a mathematical perspective these display the values that the multivariate gaussian takes for a specific sigma (in this case $\\sigma^2=1$. Think of it as taking a horizontal slice through the 3D surface plot we did above. However, thinking about the physical interpretation of these plots clarifies their meaning.\n",
|
||||
"\n",
|
||||
"The first plot uses mean and the covariance matrices $\n",
|
||||
"\\mu =\\begin{bmatrix}2\\\\7\\end{bmatrix}, cov = \\begin{bmatrix}2&0\\\\0&2\\end{bmatrix}$. Let this be our current belief about the position of our dog in a field. In other words, we believe that he is positioned at (2,7) with a variance of $\\sigma^2=2$ for both x and y. The contour plot shows where we believe the dog is located with the '+' in the center of the ellipse. The ellipse shows the boundary for the $1\\sigma^2$ probability - points where the dog is quite likely to be based on our current knowledge. Of course, the dog might be very far from this point, as Gaussians allow the mean to be any value. For example, the dog could be at (3234.76,189989.62), but that has vanishing low probability of being true. Generally speaking displaying the $1\\sigma^2$ to $2\\sigma^2$ contour captures the most likely values for the distribution. An equivelent way of thinking about this is the circle/ellipse shows us the amount of error in our belief. A tiny circle would indicate that we have a very small error, and a very large circle indicates a lot of error in our belief. We will use this throughout the rest of the book to display and evaluate the accuracy of our filters at any point in time. \n",
|
||||
"\n",
|
||||
"The second plot uses mean and the covariance matrices $\n",
|
||||
"\\mu =\\begin{bmatrix}2\\\\7\\end{bmatrix}, cov = \\begin{bmatrix}2&0\\\\0&12\\end{bmatrix}$. This time we use a different variance for x (2) vs y (12). The result is an ellipse. When we look at it we can immediately tell that we have a lot more uncertainty in the y value vs the x value. Our belief that the value is (2,7) is the same in both cases, but errors are different. This sort of thing happens naturally as we track objects in the world - one sensor has a better view of the object, or is closer, than another sensor, and so we end up with different error rates in the different axis.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"The third plot uses mean and the covariance matrices $\n",
|
||||
"\\mu =\\begin{bmatrix}2\\\\7\\end{bmatrix}, cov = \\begin{bmatrix}2&3\\\\1&2.5\\end{bmatrix}$. This is the first contour that has values in the off-diagonal elements of $cov$, and this is the first contour plot with a slanted ellipse. This is not a coincidence. The two facts are telling use the same thing. A slanted ellipse tells us that the x and y values are somehow **correlated**. We denote that in the covariance matrix with values off the diagonal. What does this mean in physical terms? Think of trying to park your car in a parking spot. You can not pull up beside the spot and then move sideways into the space because most cars cannot go purely sideways. $x$ and $y$ are not independent. This is a consequence of the steering system in a car. When your tires are turned the car rotates around its rear axle while moving forward. Or think of a horse attached to a pivoting exercise bar in a corral. The horse can only walk in circles, he cannot vary $x$ and $y$ independently, which means he cannot walk straight forward to to the side. If $x$ changes, $y$ must also change in a defined way. \n",
|
||||
"\n",
|
||||
"So when we see this ellipse we know that $x$ and $y$ are correlated, and that the correlation is \"strong\". I will not prove it here, but a 45 $^{\\circ}$ angle denotes complete correlation between $x$ and $y$, whereas $0$ and $90$ denote no correlation at all. Those who are familiar with this math will be objecting quite strongly, as this is actually quite sloppy language that does not adress all of the mathematical issues. They are right, but for now this is a good first approximation to understanding these ellipses from a physical interpretation point of view. The size of the ellipse shows how much error we have in each axis, and the slant shows how strongly correlated the values are.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"###Kalman Filter Basics\n",
|
||||
"\n",
|
||||
"Let's say we are tracking an aircraft and we get the following data for the $x$ coordinate at time $t$=1,2, and 3 seconds. What does your intuition tell you the value of $x$ will be at time $t$=4 seconds?\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"scatter ([1,2,3],[1,2,3]);xlim([0,4]);ylim([0,4]);show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x258eb10>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 9
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"It appears that the aircraft is flying in a straight line because we can draw a line between the three points, and we know that aircraft cannot turn on a dime. The most reasonable guess is that $x$=4 at $t$=4. I will depict that below with a green square to depict the predictions."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"scatter ([1,2,3],[1,2,3]);xlim([0,5]);ylim([0,5])\n",
|
||||
"plot([0,5],[0,5],'r')\n",
|
||||
"scatter ([4], [4], c='g', marker='s',s=200)\n",
|
||||
"show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x2bad890>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 10
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"If this is data from a Kalman filter, then each point has both a mean and variance. Let's try to show that by showing the approximate error for each point. Don't worry about why I am using a covariance matrix to depict the variance at this point, it will become clear in a few paragraphs."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"cov = array([[0.005,0], [0,12]])\n",
|
||||
"sigma = sigma=[0.5,1.,1.5,2]\n",
|
||||
"e1 = g.sigma_ellipses(cov, x=1, y=1, sigma=sigma)\n",
|
||||
"e2 = g.sigma_ellipses(cov, x=2, y=2, sigma=sigma)\n",
|
||||
"e3 = g.sigma_ellipses(cov, x=3, y=3, sigma=sigma)\n",
|
||||
"g.plot_sigma_ellipses([e1, e2, e3], axis_equal=True,x_lim=[0,4],y_lim=[0,15])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"axis_equal = False\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x2f765d0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 11
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
|
||||
+105
-26
@@ -1,35 +1,12 @@
|
||||
import numpy as np
|
||||
import math
|
||||
import numpy as np
|
||||
import numpy.linalg as linalg
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def _to_array(x):
|
||||
""" returns any of a scalar, matrix, or array as a 1D numpy array
|
||||
Example:
|
||||
_to_array(3) == array([3])
|
||||
"""
|
||||
try:
|
||||
x.shape
|
||||
if type(x) != np.ndarray:
|
||||
x = np.asarray(x)[0]
|
||||
return x
|
||||
except:
|
||||
return np.array(np.mat(x)).reshape(1)
|
||||
|
||||
def _to_cov(x,n):
|
||||
""" If x is a scalar, returns a covariance matrix generated from it
|
||||
as the identity matrix multiplied by x. The dimension will be nxn.
|
||||
If x is already a numpy array then it is returned unchanged.
|
||||
"""
|
||||
try:
|
||||
x.shape
|
||||
if type(x) != np.ndarray:
|
||||
x = np.asarray(x)[0]
|
||||
return x
|
||||
except:
|
||||
return np.eye(n) * x
|
||||
|
||||
_two_pi = 2*math.pi
|
||||
|
||||
|
||||
def gaussian(x, mean, var):
|
||||
"""returns normal distribution for x given a gaussian with the specified
|
||||
mean and variance. All must be scalars
|
||||
@@ -71,6 +48,108 @@ def norm_plot(mean, var):
|
||||
ys = [gaussian(x,23,5) for x in xs]
|
||||
plt.plot(xs,ys)
|
||||
|
||||
|
||||
def sigma_ellipse(cov, x=0, y=0, sigma=1, num_pts=100):
|
||||
""" Takes a 2D covariance matrix and generates an ellipse showing the
|
||||
contour plot at the specified sigma value. Ellipse is centered at (x,y).
|
||||
num_pts specifies how many discrete points are used to generate the
|
||||
ellipse.
|
||||
|
||||
Returns a tuple containing the ellipse,x, and y, in that order.
|
||||
The ellipse is a 2D numpy array with shape (2, num_pts). Row 0 contains the
|
||||
x components, and row 1 contains the y coordinates
|
||||
"""
|
||||
L = linalg.cholesky(cov)
|
||||
t = np.linspace(0, _two_pi, num_pts)
|
||||
unit_circle = np.array([np.cos(t), np.sin(t)])
|
||||
|
||||
ellipse = sigma * L.dot(unit_circle)
|
||||
ellipse[0] += x
|
||||
ellipse[1] += y
|
||||
return (ellipse,x,y)
|
||||
|
||||
def sigma_ellipses(cov, x=0, y=0, sigma=[1,2], num_pts=100):
|
||||
L = linalg.cholesky(cov)
|
||||
t = np.linspace(0, _two_pi, num_pts)
|
||||
unit_circle = np.array([np.cos(t), np.sin(t)])
|
||||
|
||||
e_list = []
|
||||
for s in sigma:
|
||||
ellipse = s * L.dot(unit_circle)
|
||||
ellipse[0] += x
|
||||
ellipse[1] += y
|
||||
e_list.append (ellipse)
|
||||
return (e_list,x,y)
|
||||
|
||||
def plot_sigma_ellipse(ellipse,title=None):
|
||||
""" plots the ellipse produced from sigma_ellipse."""
|
||||
|
||||
plt.axis('equal')
|
||||
e = ellipse[0]
|
||||
x = ellipse[1]
|
||||
y = ellipse[2]
|
||||
|
||||
plt.plot(e[0], e[1])
|
||||
plt.scatter(x,y,marker='+') # mark the center
|
||||
if title is not None:
|
||||
plt.title (title)
|
||||
plt.show()
|
||||
|
||||
def plot_sigma_ellipses(ellipses,title=None,axis_equal=True,x_lim=None,y_lim=None):
|
||||
""" plots the ellipse produced from sigma_ellipse."""
|
||||
|
||||
if x_lim is not None:
|
||||
axis_equal = False
|
||||
plt.xlim(x_lim)
|
||||
|
||||
if y_lim is not None:
|
||||
axis_equal = False
|
||||
plt.ylim(y_lim)
|
||||
|
||||
if axis_equal:
|
||||
plt.axis('equal')
|
||||
|
||||
for ellipse in ellipses:
|
||||
es = ellipse[0]
|
||||
x = ellipse[1]
|
||||
y = ellipse[2]
|
||||
|
||||
for e in es:
|
||||
plt.plot(e[0], e[1], c='b')
|
||||
|
||||
plt.scatter(x,y,marker='+') # mark the center
|
||||
if title is not None:
|
||||
plt.title (title)
|
||||
plt.show()
|
||||
|
||||
|
||||
def _to_array(x):
|
||||
""" returns any of a scalar, matrix, or array as a 1D numpy array
|
||||
Example:
|
||||
_to_array(3) == array([3])
|
||||
"""
|
||||
try:
|
||||
x.shape
|
||||
if type(x) != np.ndarray:
|
||||
x = np.asarray(x)[0]
|
||||
return x
|
||||
except:
|
||||
return np.array(np.mat(x)).reshape(1)
|
||||
|
||||
def _to_cov(x,n):
|
||||
""" If x is a scalar, returns a covariance matrix generated from it
|
||||
as the identity matrix multiplied by x. The dimension will be nxn.
|
||||
If x is already a numpy array then it is returned unchanged.
|
||||
"""
|
||||
try:
|
||||
x.shape
|
||||
if type(x) != np.ndarray:
|
||||
x = np.asarray(x)[0]
|
||||
return x
|
||||
except:
|
||||
return np.eye(n) * x
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from scipy.stats import norm
|
||||
|
||||
|
||||
Reference in new issue
Block a user