{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fisher Scoring Demo for Advanced Section 3: GLM's\n", "\n", "### Nick Stern | AC209a | October 9th, 2019" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following code implements the Fisher Scoring algorithm to solve for the optimal parameters in a simple logistic regression. The data we are using are the O-ring measurements that were taken leading up to the Challenger disaster in 1986. The space shuttle burned up on the launch pad because one of the O-rings failed due to the cold temperatures. We're going to regress temperature on O-ring failure to see if we can find a correlation.\n", "\n", "The data were obtained [here](https://gist.github.com/jtrive84/835514a76f7afd552c999e4d9134baa8).\n", "\n", "This example is originally found [here](http://www.jtrive.com/estimating-logistic-regression-coefficents-from-scratch-python-version.html)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "## Imports\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import time\n", "from IPython import display\n", "import seaborn as sns\n", "sns.set(style='white')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FLIGHTTEMPERATUREPRESSUREO_RING_FAILUREINTERCEPT
01665001
12705011
23695001
34685001
45675001
\n", "
" ], "text/plain": [ " FLIGHT TEMPERATURE PRESSURE O_RING_FAILURE INTERCEPT\n", "0 1 66 50 0 1\n", "1 2 70 50 1 1\n", "2 3 69 50 0 1\n", "3 4 68 50 0 1\n", "4 5 67 50 0 1" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## Implementation of Fisher Scoring algorithm for simple logistic regression\n", "df = pd.read_csv('Challenger.csv')\n", "df['INTERCEPT'] = 1\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "## Setup X and y\n", "X = df[['INTERCEPT', 'TEMPERATURE']].values\n", "y = df['O_RING_FAILURE'].values" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def fisher_scoring(design_matrix, response_vector, epsilon=.001):\n", " \"\"\"\n", " Determine Logistic Regression coefficents using Fisher Scoring algorithm.\n", " Iteration ceases once changes between elements in coefficent matrix across\n", " consecutive iterations is less than epsilon.\n", " # =========================================================================\n", " # design_matrix `X` => n-by-(p+1) |\n", " # response_vector `y` => n-by-1 |\n", " # probability_vector `p` => n-by-1 |\n", " # weights_matrix `W` => n-by-n |\n", " # epsilon => threshold above which iteration continues |\n", " # =========================================================================\n", " # n => # of observations |\n", " # (p + 1) => # of parameterss, +1 for intercept term |\n", " # =========================================================================\n", " # U => First derivative of Log-Likelihood with respect to |\n", " # each beta_i, i.e. `Score Function`: X_transpose * (y - p) |\n", " # |\n", " # I => Second derivative of Log-Likelihood with respect to |\n", " # each beta_i. The `Information Matrix`: (X_transpose * W * X) |\n", " # |\n", " # X^T*W*X results in a (p+1)-by-(p+1) matrix |\n", " # X^T(y - p) results in a (p+1)-by-1 matrix |\n", " # (X^T*W*X)^-1 * X^T(y - p) results in a (p+1)-by-1 matrix |\n", " # ========================================================================|\n", " \"\"\"\n", " X = np.matrix(design_matrix)\n", " y = np.matrix(response_vector).T\n", "\n", " # initialize logistic function used for Scoring calculations =>\n", " def pi_i(v): return (np.exp(v) / (1 + np.exp(v)))\n", "\n", " # initialize beta_0, p_0, W_0, I_0 & U_0 =>\n", " beta_0 = np.matrix(np.zeros(X.shape[1])).T\n", " p_0 = pi_i(X @ beta_0)\n", " W_pre = (np.array(p_0) * np.array(1 - p_0))\n", " W_0 = np.matrix(np.diag(W_pre[:, 0]))\n", " I_0 = X.T @ W_0 @ X\n", " U_0 = X.T @ (y - p_0)\n", "\n", " # initialize variables for iteration =>\n", " beta_old = beta_0\n", " iter_I = I_0\n", " iter_U = U_0\n", " iter_p = p_0\n", " iter_W = W_0\n", " fisher_scoring_iterations = 0\n", " \n", " # iterate until abs(beta_new - beta_old) < epsilon =>\n", " coeffs = [np.array(beta_old).flatten()]\n", " while True:\n", " # Fisher Scoring Update Step =>\n", " fisher_scoring_iterations += 1\n", " beta_new = beta_old + iter_I.I * iter_U\n", " coeffs.append(np.array(beta_new).flatten())\n", " \n", " if np.all(np.abs(np.array(beta_new)-np.array(beta_old)) < epsilon):\n", " break\n", "\n", " else:\n", " iter_p = pi_i(X * beta_new)\n", " iter_W_pre = (np.array(iter_p) * np.array(1 - iter_p))\n", " iter_W = np.matrix(np.diag(iter_W_pre[:, 0]))\n", " iter_I = X.T * iter_W * X\n", " iter_U = X.T * (y - iter_p)\n", " beta_old = beta_new\n", "\n", " return coeffs" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "betas = fisher_scoring(X, y)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def log_likelihood(X, y, betas):\n", " '''\n", " Calculates log-likelihood for logistic regression\n", " Input shapes:\n", " X - n x (p + 1)\n", " y - n x 1\n", " betas - (p + 1) x 1\n", " '''\n", " return np.sum(y*np.log(np.exp(X @ betas)/(1+np.exp(X @ betas))) + (1 - y)*np.log(1/(1+np.exp(X @ betas))))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def animate():\n", " '''\n", " Animates parameter estimate convergence\n", " '''\n", " b1s = [x[1] for x in betas]\n", " xs = np.linspace(np.min(b1s)-.2, np.max(b1s), 100)\n", " ys = [log_likelihood(X, y, [betas[-1][0], b]) for b in xs]\n", " fig, ax = plt.subplots(figsize=(10, 6))\n", " ax.plot(xs, ys)\n", " for i, b in enumerate(b1s):\n", " ax.scatter(b, log_likelihood(X, y, [betas[-1][0], b]), c='r')\n", " ax.plot([b]*100, np.linspace(np.min(ys), log_likelihood(X, y, [betas[-1][0], b]), 100), 'r--')\n", " ax.set_ylabel('Log-Likelihood', fontsize=15)\n", " ax.set_xlabel('beta1', fontsize=15)\n", " ax.set_title(f'Fisher Scoring Algorithm: Iteration {i+1}', fontsize=20)\n", " display.clear_output(wait=True)\n", " display.display(fig)\n", " time.sleep(.4)\n", " display.clear_output(wait=True)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "animate()" ] }, { "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.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }