{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Lecture 0.5: Matrices & vectors" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## The course\n", "Now we can get to the course itself :)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## What is a matrix\n", "\n", "A matrix is a two-dimensional table. \n", "Here is an example of a $3 \\times 3$ matrix\n", "\\begin{equation}\n", "A = \\begin{pmatrix}\n", "a_{11} & a_{12} & a_{13} \\\\\n", "a_{21} & a_{22} & a_{23} \\\\\n", "a_{31} & a_{32} & a_{33}\n", "\\end{pmatrix}\n", "\\end{equation}\n", "\n", "A vector is a $n \\times 1$ vector (there are **row** and **column** vectors)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## What we can do with matrices and vectors \n", "\n", "1. Add them: $a = b + c$\n", "2. Multiply by numbers" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Matrix as a linear operator\n", "Matrix is typically used to encode a **linear operator**:\n", "$$ y = A x,$$\n", "called matrix-by-vector product, in the index form \n", "$$y_i = \\sum_{j=1}^m A_{ij} x_j, \\quad i = 1, \\ldots, n.$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Linear dependencies\n", "Many physical models are formulated as **linear equations**:\n", "\n", "- Newton law $F = ma$\n", "- Hookes law $F = kx$\n", "\n", "which is based on the fact that if the change is small, everything can be approximated by a linear function:\n", "$$\n", " f(x + \\delta x) \\approx f(x) + \\delta x f'(x).\n", "$$\n", "Of course, nonlinearities may come into play, but even in this case the numerical methods **linearize** the problem around the current approximation. But matrices and linear dependence also play important role in data analysis as well." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Linear dependencies in real life\n", "Matrix encodes linear dependence. \n", "Linear dependence is the simplest and often very efficient model for the data. We will give two illustrations: \n", "- Principal component analysis\n", "- Independent component analysis" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Demo: principal component analysis\n", "One of the basic factor models, factor analysis: \n", "$y_1, \\ldots, y_P$ are vectors (data points), that are observed. We think of the as **linear mixture**. We generate random points on a plane and then rotate them\n", "by a certain mixture." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We generate a sequence of random points in two dimensions, and setup a rotation matrix $A$." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nwTW31jqWAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.decomposition import PCA\n", "import numpy as np\n", "\n", "P = 1000\n", "points = np.random.randn(P,2)\n", "A = [[2, 1], [0, 1]] \n", "A = np.array(A)\n", "plt.plot(points[:, 0], points[:, 1], ls='', marker='o')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We can also plot the rotated points: look at how they are \"skewed\"." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nOnAAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "R = np.dot(points, A)\n", "#plt.plot(R[:, 0], R[:, 1], ls='', marker='o')\n", "u, s, v = np.linalg.svd(R, full_matrices=False)\n", "R1 = R.dot(v)\n", "plt.plot(R1[:, 0], R1[:, 1], ls='', marker='o')\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We can also rotate them back by finding **principal components**, which is equivalent to singular value decomposition (SVD). If you do not know what it is, do not worry now " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "%matplotlib inline\n", "u, s, v = np.linalg.svd(R, full_matrices=False)\n", "unrotated = R.dot(v.T)\n", "plt.plot(unrotated[:, 0], unrotated[:, 1], ls='', marker='o')\n", "plt.plot(points[:, 0], points[:, 1], ls='', marker='x')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Demo: Cocktail party problem\n", "The linear models and the factors may have a real physical meaning. \n", "One of the most interesting illustrations is the **cocktail party problem**, which is defined as follows.\n", "We have a set of sources $x(t)$ (people talking) and a set of microphones. \n", "At each microphone we record a **linear mixture**:\n", "$$\n", " y = A x(t) + \\eta(t),\n", "$$\n", "where $\\eta(t)$ is some noise. \n", "We do not know $A$ and want to recover it. \n", "\n", "[Demo](bss1.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Questions?" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open(\"./styles/custom.css\", \"r\").read()\n", " return HTML(styles)\n", "css_styling()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }