{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Basis Expansions and Regularization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import ipywidgets as widgets\n", "import pandas as pd\n", "import math\n", "from ipywidgets import interact, interact_manual" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Piecewise Polynomials and Splines " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example Figure 5.2 and Equotian 5.3" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "## lets generate an imputvariable stored in x\n", "x = np.arange(0,10,0.1)\n", "y = np.sin(x) \n", "yNoise = y + np.random.normal(0,0.2,len(x))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "## define function for cubic spline\n", "\n", "def cubicSpline(X,ne1,ne2):\n", " \"\"\"compute set of basis functions (cubic spline) for input X\n", " and nodes ne1,ne2\n", " \n", " Parameters\n", " ----------\n", " X : ndarray(1,N) \n", " Input X\n", " ne1 : int\n", " index of knot 1 in X\n", " ne2 : int\n", " index of knot 2 in X \n", " \n", " Return\n", " -------\n", " basis : ndarray(M,len(X))\n", " matrix that contains the basis expansions for Input X with M basis functions\n", " \"\"\"\n", " e1 = X[ne1]\n", " e2 = X[ne2]\n", " # create basis functions\n", " M = 6 # number of bases (4+2 knots)\n", " basis = np.zeros((M,len(X)))\n", " basis[0,:] = np.ones(len(X))\n", " basis[1,:] = X\n", " basis[2,:] = X**2\n", " basis[3,:] = X**3\n", " basis[4,ne1:] = (X[ne1:]-e1)**3\n", " basis[5,ne2:] = (X[ne2:]-e2)**3\n", " \n", " return basis \n", "\n", "def getB(model,y):\n", " \"\"\"compute coefficents b for model via least squares\n", " \n", " Parameters\n", " ----------\n", " model : ndarray(M,len(x))\n", " basis expansions\n", " y : ndarray(1,len(x))\n", " f(x) \n", " Return\n", " -------\n", " b : ndarray(M,1)\n", " coefficients\n", " \"\"\"\n", " b = np.dot(np.dot(np.linalg.inv(np.dot(model,model.T)),model),y)\n", " return b " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "## recreate spline from example (cubic and continous)\n", "# Page 143, Figure 5.3\n", "\n", "# calculate splines\n", "# nodes \n", "ne1 = 33 # number in time array\n", "ne2 = 66\n", "\n", "H = cubicSpline(x,ne1,ne2)\n", "b = getB(H,yNoise)\n", "\n", "# f(x) = b.T * h\n", "spline = b.reshape(len(b),1) * H\n", "spline = sum(spline,0)\n", "\n", "# plot\n", "fig1 = plt.figure()\n", "ax1 = fig1.add_subplot(111)\n", "ax1.plot(x,y)\n", "ax1.plot(x,spline)\n", "ax1.plot(x,yNoise,'o',markersize = 0.7)\n", "ax1.axvline(x[ne1],ls = '--', lw = .5, color = 'C7')\n", "ax1.axvline(x[ne2],ls = '--', lw = .5, color = 'C7')\n", "ax1.legend(['y','Spline','yNoise','e1','e2'], loc = 'lower center', ncol = 6)\n", "plt.tight_layout()\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "Text(0, 0.5, 'Pointwise Variance')" }, "metadata": {}, "execution_count": 5 }, { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "## Pointwise Variance Cov(β^)=σ2(Z′Z)−1\n", "\n", "covB = np.linalg.inv(np.dot(H,H.T))\n", "\n", "var = np.zeros(len(x))\n", "\n", "for i in range(0,len(x)):\n", " var[i] = np.dot(np.dot(H[:,i],covB),H[:,i].T)\n", "\n", "plt.plot(x,var)\n", "plt.xlabel('x')\n", "plt.ylabel('Pointwise Variance')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "interactive(children=(IntSlider(value=49, description='n1', max=99), IntSlider(value=49, description='n2', max…", "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, "model_id": "fafcf3a20bcc47998319514ea0ddc8eb" } }, "metadata": {} } ], "source": [ "## interactive part - get a feeling for placement of knots\n", "\n", "@interact\n", "def show_articles_more_than(n1=(0, 99, 1), n2=(0, 99, 1)):\n", " H = cubicSpline(x,n1,n2)\n", " b = getB(H,yNoise)\n", " fx = b.reshape(len(b),1) * H\n", " fx = sum(fx,0)\n", " \n", " fig2 = plt.figure()\n", " ax2 = fig2.add_subplot(111)\n", " ax2.plot(x,y)\n", " ax2.plot(x,fx)\n", " ax2.plot(x,yNoise,'o',markersize = 0.7)\n", " ax2.axvline(x[n1],ls = '--', lw = .5, color = 'C7')\n", " ax2.axvline(x[n2],ls = '--', lw = .5, color = 'C7')\n", " \n", " return \n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def cubicSpline2(X,k):\n", " \"\"\"compute cubic spline for input X\n", " and nodes ne\n", " \n", " Parameters\n", " ----------\n", " X : ndarray(1,N) \n", " Input X\n", " k : int\n", " number of knots \n", " \n", " Return\n", " -------\n", " basis : ndarray(M,len(X))\n", " matrix that contains the basis expansions for Input X with M basis functions\n", " \"\"\"\n", " interval = len(X)/(k+1)\n", "\n", " # create basis functions\n", " M = 4 + k \n", " basis = np.zeros((M,len(X)))\n", " basis[0,:] = np.ones(len(X))\n", " basis[1,:] = X\n", " basis[2,:] = X**2\n", " basis[3,:] = X**3\n", " for i in range(1,k+1):\n", " nek = int(round(i*(interval),0))\n", " basis[3+i,nek:] = (X[nek:]-X[nek])**3\n", " return basis \n", "\n", "def getB(model,y):\n", " \"\"\"compute coefficents b for model via least squares\n", " \n", " Parameters\n", " ----------\n", " model : ndarray(M,len(x))\n", " basis expansions\n", " y : ndarray(1,len(x))\n", " f(x) \n", " Return\n", " -------\n", " b : ndarray(M,1)\n", " coefficients\n", " \"\"\"\n", " b = np.dot(np.dot(np.linalg.inv(np.dot(model,model.T)),model),y)\n", " return b \n", " " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "interactive(children=(IntSlider(value=40, description='n', max=80), Output()), _dom_classes=('widget-interact'…", "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, "model_id": "a9cecaeac3f146dfb0c27720b76bab4c" } }, "metadata": {} } ], "source": [ "## interactive part - get a feeling for number of knots\n", "\n", "@interact\n", "def show_articles_more_than(n=(0, 80, 1)):\n", " H = cubicSpline2(x,n)\n", " b = getB(H,yNoise)\n", " fx = b.reshape(len(b),1) * H\n", " fx = sum(fx,0)\n", " \n", " fig3 = plt.figure()\n", " ax3 = fig3.add_subplot(111)\n", " ax3.plot(x,y)\n", " ax3.plot(x,fx)\n", " ax3.plot(x,yNoise,'o',markersize = 0.7)\n", " \n", " dx = ((len(x))/(n+1))\n", " for i in range(1,n+1):\n", " nk = int(round(i*dx,0))\n", " ax3.axvline(x[nk],ls = '--', lw = .5, color = 'C7')\n", " return \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Natrual Splines" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "## define functions\n", "\n", "def getDK(X,nek,neK):\n", " \"\"\"compute natural cubic spline for input X\n", " and nodes n\n", " \n", " Parameters\n", " ----------\n", " X : ndarray(1,N) \n", " Input X\n", " nek : int\n", " index knot k\n", " neK : int\n", " index knot K (boundaray knot) \n", " \n", " Return\n", " -------\n", " dk : ndarray(2+n,len(X))\n", " matrix that contains the basis expansions for Input X with 2+nbasis functions\n", " \"\"\"\n", " \n", " dK = np.zeros(len(X))\n", " basis = np.zeros([2,len(X)])\n", " basis[0,X>nek] = (X[X>nek]-nek)**3 \n", " basis[1,X>neK] = (X[X>neK]-neK)**3 \n", " \n", " dK = (basis[0,:] - basis [1,:]) / (neK - nek)\n", " return dK\n", " \n", "def natCubicSpline(X,knots):\n", " \"\"\"compute natural cubic spline for input X\n", " and nodes n\n", " \n", " Parameters\n", " ----------\n", " X : ndarray(1,N) \n", " Input X\n", " knots : int\n", " number of knots \n", " \n", " Return\n", " -------\n", " matBasis : ndarray(2+n,len(X))\n", " matrix that contains the basis expansions for Input X with 2+nbasis functions\n", " \"\"\"\n", " # create basis functions\n", " matBasis = np.zeros((knots,len(X)))\n", " matBasis[0,:] = np.ones(len(X))\n", " matBasis[1,:] = X\n", " \n", " \n", " dx = ((max(X))/(knots+1)) #interval length\n", " \n", " # dk-1\n", " neK1 = (knots-1)*dx\n", " neK = knots*dx\n", " dK1 = getDK(X,neK1,neK)\n", "\n", " for k in range(1,knots-1):\n", " nek = k*dx\n", " dk = getDK(X,nek,neK)\n", " matBasis[1+k,:] = dk - dK1\n", " return matBasis\n", " " ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": true }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "natSpline = natCubicSpline(x,6)\n", "b = getB(natSpline,yNoise)\n", "# f(x) = b.T * h\n", "fx = b.reshape(len(b),1) * natSpline\n", "fx = sum(fx,0)\n", "\n", "# plot\n", "fig4 = plt.figure()\n", "ax4 = fig4.add_subplot(111)\n", "ax4.plot(x,y)\n", "ax4.plot(x,fx)\n", "ax4.plot(x,yNoise,'o',markersize = 0.7)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "interactive(children=(IntSlider(value=11, description='n', max=20, min=2), Output()), _dom_classes=('widget-in…", "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, "model_id": "3985b59edcca4f9cb314f507917f2537" } }, "metadata": {} } ], "source": [ "## interactive part - get a feeling for number of knots in natural cubic splines\n", "\n", "@interact\n", "def show_articles_more_than(n=(2, 20, 1)):\n", " H = natCubicSpline(x,n)\n", " b = getB(H,yNoise)\n", " fx = b.reshape(len(b),1) * H\n", " fx = sum(fx,0)\n", " \n", " fig5 = plt.figure()\n", " ax5 = fig5.add_subplot(111)\n", " ax5.plot(x,y)\n", " ax5.plot(x,fx)\n", " ax5.plot(x,yNoise,'o',markersize = 0.7)\n", " dx = ((len(x))/(n+1))\n", " for i in range(1,n+1):\n", " nk = int(round(i*dx,0))\n", " ax5.axvline(x[nk],ls = '--', lw = .5, color = 'C7')\n", " return " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pointwise Variance\n", "\n", "$Var[f(x_0)] = H(x_0) * cov(β) * H(x_0)$\n", "\n", "with: \n", "\n", "$cov(β)= σ^2(H^T*H)^−1$\n", "\n", "and $σ^2 = 1 \n", "$if we assume the error to be normal distributed" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "### Pointwise Variance\n", " \n", "def getPointVar(model):\n", " \"\"\"computes the pointwise variance for given model\n", " \n", " Parameters\n", " ----------\n", " model : ndarray(p,N) \n", " basis functions \n", " \n", " Return\n", " -------\n", " var : ndarray(1,N)\n", " pointwise variance for each observation\n", " \"\"\"\n", " covB = np.linalg.inv(np.dot(model,model.T)) #covariance via least squares, sigma = 1\n", " var = np.zeros(len(x))\n", " for i in range(0,len(x)):\n", " var[i] = np.dot(np.dot(model[:,i],covB),model[:,i].T)\n", " return var" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "Text(0, 0.5, 'Pointwise Variance')" }, "metadata": {}, "execution_count": 17 }, { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "## plot pointwise variances\n", "\n", "cubicSpline = cubicSpline2(x,2) \n", "natCubSpline = natCubicSpline(x,6)\n", "\n", "varCubic = getPointVar(cubicSpline)\n", "varNat = getPointVar(natCubSpline)\n", "\n", "fig6 = plt.figure()\n", "ax6 = fig6.add_subplot(111)\n", "ax6.plot(x,varCubic)\n", "ax6.plot(x,varNat)\n", "ax6.legend(['cubic Spline, 2 Knots', 'natural cubic Spline, 6 Knots'], loc = 'upper center', ncol = 2)\n", "ax6.set_xlabel('x')\n", "ax6.set_ylabel('Pointwise Variance')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Filtering and Feature Extraction\n", "\n", "## Example: Phoneme Recognition\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "## Reading and preparing data\n", "\n", "phonemData = pd.read_csv('phoneme.csv', index_col='g')\n", "phonemData = phonemData.drop(['speaker'], axis = 1)\n", "phonemData = phonemData.drop(['row.names'], axis = 1)\n", "phonemData = phonemData.T\n", "\n", "x = phonemData[['aa','ao']].to_numpy()\n", "yList = list(phonemData[['aa','ao']].columns.values) \n", "y = np.zeros(len(yList))\n", "\n", "for i in range(0,len(y)):\n", " if yList[i] == 'ao':\n", " y[i] = 0\n", " else:\n", " y[i] = 1\n", "\n", "## natural cubic splines with 12 knots uniformly distributed over frequency vector\n", "f = np.arange(0,256)\n", "H = natCubicSpline(f,12).T\n", "\n", "## Filter data\n", "xFiltered = np.dot(H.T,x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember: \n", "$x^Tβ = x^THθ$\n", "\n", "Filtered x: $x^∗ = H^Tx$\n", "\n", "betaSmoot: $β(f) = h(f)^Tθ$" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "Text(0, 0.5, 'Logistic Regression Coefficients')" }, "metadata": {}, "execution_count": 14 }, { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "## Logistig Regression\n", "from sklearn import linear_model\n", "\n", "logReg = linear_model.LogisticRegression(random_state=0)\n", "logReg.fit(x.T,y)\n", "beta = logReg.coef_\n", "\n", "logRegFilter = linear_model.LogisticRegression(random_state=0)\n", "logRegFilter.fit(xFiltered.T,y)\n", "theta = logRegFilter.coef_\n", "betaSmooth = np.dot(H,theta.T)\n", "\n", "fig7 = plt.figure()\n", "ax7 = fig7.add_subplot(111)\n", "ax7.plot(beta.T)\n", "ax7.plot(betaSmooth)\n", "ax7.set_xlabel('Frequency')\n", "ax7.set_ylabel('Logistic Regression Coefficients')\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.10-final" } }, "nbformat": 4, "nbformat_minor": 4 }