{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "view-in-github", "slideshow": { "slide_type": "skip" }, "tags": [ "no-tex" ] }, "source": [ "\"Open\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "JoW4C_OkOMhe", "slideshow": { "slide_type": "skip" }, "tags": [ "remove-cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "%pip install -q -U gtbook\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "10-snNDwOSuC", "slideshow": { "slide_type": "skip" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import gtsam\n", "\n", "import plotly.graph_objs as go\n", "import plotly.express as px\n", "try:\n", " import google.colab\n", "except:\n", " import plotly.io as pio\n", " pio.renderers.default = \"png\"\n", "\n", "from gtbook.discrete import Variables\n", "from gtbook.display import pretty, show\n", "\n", "# recap from S11:\n", "variables = Variables()\n", "categories = [\"cardboard\", \"paper\", \"can\", \"scrap metal\", \"bottle\"]\n", "Category = variables.discrete(\"Category\", categories)\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "nAvx4-UCNzt2", "slideshow": { "slide_type": "slide" } }, "source": [ "# Learning\n", "\n", "> We can learn prior and sensor models from data we collect.\n", "\n", "\n", "\"Splash" ] }, { "cell_type": "markdown", "metadata": { "id": "tSvXl_mnYeJ_", "slideshow": { "slide_type": "fragment" } }, "source": [ "At various times in this chapter we seemed to pull information out of thin air. But the various probabilistic models we used can be *learned* from data. This is what we will discuss below:\n", "\n", "- In Section 2.1 we talked about priors over state. Here we will estimate prior from counts, and introduce the idea of adding \"bogus counts\" in the case that we do not have a lot of data.\n", "- In section 2.3 we discussed sensor models. Below we estimate those sensor models from counts recorded for each of the possible states.\n", "- Counting works for discrete sensors, but for continuous sensors we have to a bit more work. We will end this section by showing how to fit simple Gaussian sensor models to data.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "HyMNgnbNYeJ_", "slideshow": { "slide_type": "slide" } }, "source": [ "## Estimating a Discrete PMF\n", "\n", "> Count the occurrences for each category." ] }, { "cell_type": "markdown", "metadata": { "id": "ER8xW_d2HmHR", "slideshow": { "slide_type": "skip" } }, "source": [ "In section 1 we introduced the notion of a probability mass function (PMF) to characterize the *a priori* probability of being in a certain state. It turns out that the *normalized counts* we obtain when observing states over a long time period is a good approximation for the PMF. The more samples that go in, the better the approximation.\n", "\n", "As an example, let us assume that, at a *different* trash sorting cell, we observe for a while and note the category for each piece of trash, recording as we go. We might see something like:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "Gmnf89Q7YeJ_", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "data = [1, 1, 1, 2, 1, 1, 1, 3, 0, 0, 0, 1,\n", " 2, 2, 2, 2, 4, 4, 4, 1, 1, 2, 1, 2, 1]\n" ] }, { "cell_type": "markdown", "metadata": { "id": "LtttAWbHZgZ7", "slideshow": { "slide_type": "skip" } }, "source": [ "Using `numpy` we can get the counts using the [`bincount`](https://numpy.org/doc/stable/reference/generated/numpy.bincount.html) function. We then plot the counts using `plotly.express`:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 542 }, "id": "pxBtzSjmZqR0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#| caption: Counts of each category in the data.\n", "#| label: fig:counts_of_categories\n", "counts = np.bincount(data)\n", "px.bar(x=categories, y=counts)" ] }, { "cell_type": "markdown", "metadata": { "id": "c4Jt2Mwrat5Q", "slideshow": { "slide_type": "slide" } }, "source": [ "We can then estimate the probability of each category $c_k$ simply by dividing the count $N_k$ by the number of data points $N$:\n", "\n", "$$P(x_k) \\approx \\frac{N_k}{N}$$\n", "\n", "In our example:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "wLX116r9aNdW", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Counts: [ 3 11 7 1 3]\n", "Estimated PMF: [0.12 0.44 0.28 0.04 0.12]\n" ] } ], "source": [ "estimated_pmf = counts/sum(counts)\n", "print(f\"Counts: {counts}\\nEstimated PMF: {estimated_pmf}\")" ] }, { "cell_type": "markdown", "metadata": { "id": "tTucUZMYbkX5", "slideshow": { "slide_type": "skip" } }, "source": [ "We can now easily turn this into a GTSAM discrete prior for pretty-printing:\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 175 }, "id": "NrfBXCjqbFVa", "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "
\n", "

P(Category):

\n", "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Categoryvalue
cardboard0.12
paper0.44
can0.28
scrap metal0.04
bottle0.12
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prior = gtsam.DiscreteDistribution(Category, estimated_pmf)\n", "pretty(prior, variables)" ] }, { "cell_type": "markdown", "metadata": { "id": "h6s2i0jgaH8I", "slideshow": { "slide_type": "notes" } }, "source": [ "Note that the counts are the only quantities one needs to estimate a PMF: a statistician would say that the counts are a **sufficient statistic** for the purpose of estimating the probability distribution. In fact, GTSAM can just take the counts themselves, as it normalizes internally:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 175 }, "id": "rBzeHJ5tKXna", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "

P(Category):

\n", "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Categoryvalue
cardboard0.12
paper0.44
can0.28
scrap metal0.04
bottle0.12
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prior = gtsam.DiscreteDistribution(Category, \"3/11/7/1/3\")\n", "pretty(prior, variables)" ] }, { "cell_type": "markdown", "metadata": { "id": "huXj9P8DHmHU", "slideshow": { "slide_type": "slide" } }, "source": [ "### Smoothing\n", "\n", "> We make up fake data to deal with sparse data sets." ] }, { "cell_type": "markdown", "metadata": { "id": "buOzOMiVYeKA", "slideshow": { "slide_type": "notes" } }, "source": [ "A trick that statisticians and machine learning practitioners sometimes employ is \"smoothing\", which is especially important when you have very little data. Indeed, sometimes a category value will get zero counts, even though you *know* that occasionally that category will appear in practice. **Smoothing** is the process of letting the estimator know this by adding \"pseudo-counts\". For example, a very common approach is to simply add 1 to every count:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "EcP7Hw3Fc8yh", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "counts, _ = np.histogram(data, bins=5)\n", "smoothed_counts = counts + 1\n", "smoothed_pmf = smoothed_counts/sum(smoothed_counts)\n" ] }, { "cell_type": "markdown", "metadata": { "id": "1LqZGqHEdWmW", "slideshow": { "slide_type": "skip" } }, "source": [ "Comparing the two, we see that the smoothed PMF is more uniform, and accords more probability to \"under-counted\" categories than the raw counts:\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "kUEPj_pXeihi", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
rawsmoothed
cardboard0.120.133333
paper0.440.400000
can0.280.266667
scrap metal0.040.066667
bottle0.120.133333
\n", "
" ], "text/plain": [ " raw smoothed\n", "cardboard 0.12 0.133333\n", "paper 0.44 0.400000\n", "can 0.28 0.266667\n", "scrap metal 0.04 0.066667\n", "bottle 0.12 0.133333" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Some pandas magic to display a nice side-by-side table:\n", "df = pd.DataFrame(\n", " {\"raw\": estimated_pmf, \"smoothed\": smoothed_pmf}, index=categories)\n", "df\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 542 }, "id": "pt1Pj13kdgDx", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/png": "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3GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJnVAQI3qisNMEb+koTvKGTWp2Q4NXjJXj13GyMInhtqDJn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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#| caption: Comparison of the raw and smoothed PMF.\n", "#| label: fig:smoothed_pmf\n", "fig = px.bar(df, x=categories, y=\"raw\", barmode=\"group\", title=\"Smoothed PMF\")\n", "fig.add_bar(x=categories, y=smoothed_pmf, name=\"smoothed\")" ] }, { "cell_type": "markdown", "metadata": { "id": "omL1vG1RYeKA", "slideshow": { "slide_type": "slide" } }, "source": [ "## Modeling a Sensor from Data\n", "\n", "> When learning a conditional distribution, we need to separate out the counts based on the conditioning variable.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "HfVwjRvYKsJX", "slideshow": { "slide_type": "notes" } }, "source": [ "A `gtsam.DiscreteConditional` determines the counts, grouped by the conditioning variable. In our case, `Category` can take on 5 separate values, and hence we have five groups. For example, for a binary sensor:\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 175 }, "id": "aO_N9CQmYeKB", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "

P(Conductivity|Category):

\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Categoryfalsetrue
cardboard0.80.2
paper0.40.6
can0.750.25
scrap metal0.40.6
bottle0.50.5
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Conductivity = variables.binary(\"Conductivity\")\n", "P_Conductivty_Category = gtsam.DiscreteConditional(\n", " Conductivity, [Category], \"80/20 40/60 12/4 100/150 10/10\")\n", "pretty(P_Conductivty_Category, variables)\n" ] }, { "cell_type": "markdown", "metadata": { "id": "PkScfWimLsx0", "slideshow": { "slide_type": "slide" } }, "source": [ "And for a three-valued sensor:\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 175 }, "id": "uiIv70jsLxJV", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "

P(ThreeValued|Category):

\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CategoryValue1Value2Value3
cardboard0.10.70.2
paper0.20.20.6
can0.1250.6250.25
scrap metal0.40.40.2
bottle0.250.250.5
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ThreeValued = variables.discrete(\"ThreeValued\", [\"Value1\", \"Value2\", \"Value3\"])\n", "P_ThreeValued_Category = gtsam.DiscreteConditional(ThreeValued, [Category],\n", " \"10/70/20 20/20/60 2/10/4 100/100/50 5/5/10\")\n", "pretty(P_ThreeValued_Category, variables)\n" ] }, { "cell_type": "markdown", "metadata": { "id": "yXz5j39vMV1y", "slideshow": { "slide_type": "notes" } }, "source": [ "Once again, note that the *rows* are normalized to be proper PMFs, given the conditioning variable. The columns are not, and instead form likelihoods over the category, when a particular value is observed for `ThreeValued` .\n", "\n", "Again, we can add pseudo-counts to all counts if we have very little data, or to specific groups if you only have prior knowledge about a particular setting. If you really know nothing about the behavior of a sensor, adding a pseudo-count of 1 is a good thing to do in general: it prevents according zero probability to a rare event. The downside is that you will have a biased view of the CPT, but this disadvantage quickly goes away as you add more and more data.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "g9BZmNXuYeKB", "slideshow": { "slide_type": "slide" } }, "source": [ "## Fitting a Gaussian\n", "\n", "Recall that a Gaussian distribution is completely specified by two parameters: the mean $\\mu$ \n", "and the varianced $\\sigma^2$.\n", "\n", "If we observe *continuous* data that we suspect is generated from a Gaussian density, then we can easily compute an estimate of the mean $\\hat{\\mu}$ by \n", "\n", "$$\\hat{\\mu} = \\frac{1}{N} \\sum_i x_i.$$ \n", "\n", "The estimate $\\hat{\\mu}$ is sometimes called the **empirical mean**.\n", "The other parameter we need is the variance $\\sigma^2$ defined as the expectation of the squared \n", "deviation from the mean:\n", "\n", "$$E[(x-\\mu)^2].$$\n", "\n", "Estimating the variance can be done after we obtaine the empirical mean $\\hat{\\mu}$, by\n", "\n", "$$\\widehat{\\sigma^2} = \\frac{1}{N-1} \\sum_i (x_i-\\hat{\\mu})^2.$$ \n", "\n", "The standard deviation, $\\sigma$, is defined as the square root of the variance, and hence\n", "an estimate of the standard deviation is given by: \n", "\n", "$$\\widehat{\\sigma} = \\sqrt{\\widehat{\\sigma^2}}.$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "**Note**: Above we divide by $N-1$ and not by $N$. Informally, the reason is that we already \"used up\" one data point by estimating the mean from our samples, and we correct for that to get an \"unbiased\" estimate for the variance.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "XC4a7pdNQcli", "slideshow": { "slide_type": "slide" } }, "source": [ "Below is some python code to do just that, using the `numpy` library. Let us first generate some \"data\" from a Gaussian with known mean and standard deviation:\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "id": "9lB8zHGlQoQ9", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "mean = 200 # grams, say...\n", "stddev = 50 # also in grams\n", "N = 200 # number of samples\n", "data = np.random.normal(mean, stddev, N)\n" ] }, { "cell_type": "markdown", "metadata": { "id": "FiRWQvBLRPwX", "slideshow": { "slide_type": "notes" } }, "source": [ "When we plot a histogram, we can see the typical \"bell curve\" shape emerge (try increasing N), as shown in Figure 2.13\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 542 }, "id": "2gtKGPcdQpL9", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#| caption: Histogram of the generated data.\n", "#| label: fig:histogram-of-generated-data\n", "nbins = N//10\n", "px.histogram(x=data, nbins=nbins)" ] }, { "cell_type": "markdown", "metadata": { "id": "49GNvxAHRjD4", "slideshow": { "slide_type": "slide" } }, "source": [ "The sample mean is easy enough to compute with `np.mean` :\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_Ni9Xu0tRDzH", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "207.15550357698297" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mu_hat = np.mean(data)\n", "mu_hat\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "E9Ye6FDqRrqS", "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/plain": [ "2652.5596880808575" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.var(data, ddof=1)\n" ] }, { "cell_type": "markdown", "metadata": { "id": "WVZQIL3BTK1D", "slideshow": { "slide_type": "skip" } }, "source": [ "Of course we can do this by ourselves as well:" ] }, { "cell_type": "markdown", "metadata": { "id": "AH1yvETERxjQ", "slideshow": { "slide_type": "notes" } }, "source": [ "Note that with 200 samples, even though the histogram is quite \"messy\", the sample mean $\\hat{\\mu}$ is close to the true mean $\\mu=200$.\n", "\n", "There is also a function `np.var` that calculates the sample variance, but we need to take care to provide the `ddof=1` argument to get the unbiased estimate (do `help(np.var)` to find out more)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Here is the code to compute variance:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "FCc_aiKMTOEL", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "2652.5596880808575" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "var_hat = np.sum(np.square(data-mu_hat))/(N-1)\n", "var_hat\n" ] }, { "cell_type": "markdown", "metadata": { "id": "xtuu2iPRTFOK", "slideshow": { "slide_type": "fragment" } }, "source": [ "By taking the square root, we see that it matches our ground truth standard deviation $\\sigma$ quite well:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "TexNM3djHmHW", "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "51.503006592633575\n" ] } ], "source": [ "sigma_hat = np.sqrt(var_hat)\n", "print(sigma_hat)\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Comparison\n", "\n", "We can now plot our estimated Gaussian together with the data in Figure 2.14\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 542 }, "id": "k6mP0n6iSJl5", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#| caption: Comparison of the histogram and the Gaussian distribution.\n", "#| label: fig:histogram-and-gaussian\n", "fig = px.histogram(x=data, nbins=nbins)\n", "X = np.arange(0, 350)\n", "K = N*(400/nbins)/np.sqrt(2*np.pi*var_hat) # expected height of histogram...\n", "fig.add_trace(go.Scatter(x=X, y=K * np.exp(-0.5*np.square(X-mu_hat)/var_hat)))\n", "fig\n" ] }, { "cell_type": "markdown", "metadata": { "id": "TidGLofzJb2C", "slideshow": { "slide_type": "skip" } }, "source": [ "## Summary\n", "\n", "We saw above that learning conditional probability tables amounts to counting the occurrence of certain events. In the case of sensor models, it is really about the co-occurrence of an event: how often do we see a particular sensor reading in a particular state? Finally if the sensor is continuous, we can posit a parametric model. In this case we use the Gaussian, and use techniques from statistics to estimate its parameters. For a Gaussian, we need to only estimate its mean $\\mu$ and its a variance $\\sigma^2$, and we used techniques from statistics to estimate these.\n", "\n", "In the case of discrete sensors we also looked at a very simple form of smoothing to cope with the absence of certain counts, which is common for rare events. In fact, this amounts to introducing what is called a *hyperprior* on the parameters to be estimated - in this case the numbers of a conditional probability table. Hyperpriors can also be used for estimating parameters of a Gaussian, but that is beyond the scope of this section.\n", "\n", "You might think it is a bit of a stretch to call these procedures \"learning\". And indeed, they are simple parameter estimation problems as encountered in a statistics 101 class. However, although we will look at much more sophisticated learning approaches, even these simple algorithms *learn* about the world from data. Based on the sensor models, a robot will change how it acts in the world. Together with a value system, supplied in the form of a cost matrix by its user, the robot will make more optimal decisions by observing how the world behaves." ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "S26_sorter_learning.ipynb", "provenance": [], "toc_visible": true }, "interpreter": { "hash": "c6e4e9f98eb68ad3b7c296f83d20e6de614cb42e90992a65aa266555a3137d0d" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.18" }, "latex_metadata": { "affiliation": "Georgia Institute of Technology", "author": "Frank Dellaert and Seth Hutchinson", "title": "Introduction to Robotics" } }, "nbformat": 4, "nbformat_minor": 1 }