{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# GCV criterion\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definition\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Generalized Cross Validation (GCV) criterion is a very similar method to the [PRESS method](press.ipynb).\n", "GCV is a rotation-invariant form of the PRESS method.\n", "The deriviation of the GCV from PRESS is shown in (Golub, et al. 1979).\n", "\n", "GCV leads to choosing $\\lambda$ as the minimizer of the GCV function $\\mathcal{G}(\\lambda)$, defined by\n", "\n", "$$\n", "\\begin{equation}\n", "\\mathcal{G}(\\lambda)\n", "\\equiv\n", "\\frac{ \\| (\\mathbf{I} - \\mathbf{A}_\\lambda)\\mathbf{B}\\mathbf{b} \\|^2 }\n", " {\\text{tr}(\\mathbf{I} - \\mathbf{A}_\\lambda)^2},\n", "\\end{equation}\n", "$$\n", " \n", "where $\\mathbf{A}_\\lambda \\equiv \\mathbf{B}\\mathbf{T}(\\mathbf{T}^\\mathsf{T}\\mathbf{Q}\\mathbf{T} + \\lambda\\mathbf{H})^{-1}\\mathbf{T}^\\mathsf{T}\\mathbf{B}^\\mathsf{T}$, $\\text{tr}(\\cdot)$ is the trace of a matrix, and\n", "$\\mathbf{Q}=\\mathbf{B}^\\mathsf{T}\\mathbf{B}$.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using [series-expansion form of the solution](inversion.ipynb#Series-expansion-of-the-solution), $\\mathcal{G}(\\lambda)$ can be written as\n", "\n", "$$\n", "\\begin{equation}\n", "\\mathcal{G}(\\lambda)\n", "=\n", "\\frac{\\rho}\n", " {\\left(r - \\sum_{i=1}^r f_{\\lambda,i} \\right)^2}.\n", "\\label{eq:gcv_series}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Deriviation of \\eqref{eq:gcv_series}\n", "\n", "Recalling the [Generalized Tikhonov regularized](./inversion.ipynb#Generalized-Tikhonov-Regularization) solution form and the [series expansion](./inversion.ipynb#Series-expansion-of-the-solution), we obtain the following:\n", "\n", "$$\n", "\\begin{align*}\n", "\\mathbf{A}_\\lambda \\mathbf{B}\\mathbf{b}\n", "&=\n", "\\mathbf{B}\\mathbf{T} \\mathbf{x}_\\lambda\\\\\n", "&=\n", "\\mathbf{B}\\mathbf{T}\\tilde{\\mathbf{V}}\\mathbf{F}_\\lambda\\mathbf{S}^{-1}\\mathbf{U}^\\mathsf{T}\\hat{\\mathbf{b}}\\\\\n", "&=\n", "\\mathbf{U}\\mathbf{S}\\mathbf{F}_\\lambda\\mathbf{S}^{-1}\\mathbf{U}^\\mathsf{T}\\mathbf{B}\\mathbf{b}\\quad(\\because \\mathbf{B}\\mathbf{T}\\tilde{\\mathbf{V}} = \\mathbf{U}\\mathbf{S})\\\\\n", "&=\n", "\\mathbf{U}\\mathbf{F}_\\lambda\\mathbf{U}^\\mathsf{T}\\mathbf{B}\\mathbf{b}.\\\\\n", "\\therefore\n", "\\mathbf{A}_\\lambda &= \\mathbf{U}\\mathbf{F}_\\lambda\\mathbf{U}^\\mathsf{T}.\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we have\n", "$$\n", "\\begin{align*}\n", "\\text{numerator of } \\mathcal{G}(\\lambda)\n", "&=\n", "\\| (\\mathbf{I} - \\mathbf{A}_\\lambda)\\mathbf{B}\\mathbf{b} \\|^2 \\\\\n", "&=\n", "\\| \\mathbf{B}\\mathbf{b} - \\mathbf{B}\\mathbf{T}\\mathbf{x}_\\lambda \\|^2\\\\\n", "&=\n", "\\| \\mathbf{b} - \\mathbf{T}\\mathbf{x}_\\lambda\\|_\\mathbf{Q}^2 = \\rho.\\\\\\\\\n", "\\text{denominator of } \\mathcal{G}(\\lambda)\n", "&=\n", "\\text{tr}(\\mathbf{I} - \\mathbf{A}_\\lambda)^2\\\\\n", "&=\n", "\\left(\n", " \\text{tr}(\\mathbf{I}) - \\text{tr}(\\mathbf{A}_\\lambda)\n", "\\right)^2\\\\\n", "&=\n", "\\left(\n", " \\text{tr}(\\mathbf{I}) - \\text{tr}(\\mathbf{U}\\mathbf{F}_\\lambda\\mathbf{U}^\\mathsf{T})\n", "\\right)^2\\\\\n", "&=\n", "\\left(\n", " \\text{tr}(\\mathbf{I}) - \\text{tr}(\\mathbf{F}_\\lambda)\n", "\\right)^2\n", "\\quad\\left(\n", " \\because \\text{tr}(\\mathbf{U}\\mathbf{F}_\\lambda\\mathbf{U}^\\mathsf{T}) = \\text{tr}(\\mathbf{U}^\\mathsf{T}\\mathbf{U}\\mathbf{F}_\\lambda) = \\text{tr}(\\mathbf{F}_\\lambda)\n", "\\right)\\\\\n", "&=\n", "\\left(\n", " \\sum_{i=1}^r 1 - \\sum_{i=1}^r f_{\\lambda,i}\n", "\\right)^2\\\\\n", "&=\n", "\\left(\n", " r - \\sum_{i=1}^r f_{\\lambda,i}\n", "\\right)^2.\n", "\\end{align*}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example\n", "\n", "The example is shown in [notebooks/non-iterative/gcv.ipynb](../../notebooks/non-iterative/gcv.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Limitation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "GCV is a good method when the noise is unknown and the noise is assumed to be white noise, however,\n", "it often fails to give a satisfactory result when the error is highly correlated.
\n", "See the [example case](../../notebooks/non-iterative/lcurve_vs_gcv.ipynb) for the limitation of GCV." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References\n" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. footbibliography::" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 2 }