Skip to content
This repository was archived by the owner on Dec 3, 2019. It is now read-only.
Tim Thatcher edited this page May 6, 2015 · 13 revisions

Outstanding Features

  • Kernels

    • Add Kernels
      • Periodic kernel: exp(-2sin(π*(x-y)/k.p)^2 / k.ell^2)
      • Automatic Relevance Determination Kernel: one for each euclidean distance and scalar product kernel - can we implement this orthogonal to the scalar kernelize()?
        • Derivatives w.r.t. elements of the weight vector
    • Expand derivatives to the other kernels
      • Laplacian Kernel
      • Rational Quadratic Kernel
      • Multi-Quadratic Kernel
      • Inverse Multi-Quadratic Kernel
      • Power Kernel
      • Log Kernel
      • Linear Kernel
      • Polynomial Kernel
      • Sigmoid Kernel
      • Mercer Sigmoid Kernel
    • Composites of composite kernels
      • Derivatives w.r.t. parameters of subkernels
  • Methods

    • Efficient computation of weighted squared norms/scalar products
      • Efficient computation of derivatives w.r.t. the weights
    • Efficient computation of kernel derivatives
    • Efficient computation of weighted gramians
    • Efficient kernel matrix approximation (this should be last and it's not a hurry)

Style Guide

  • First derivatives are named using the pattern function_d* and second derivatives function_d*d*. For example, kernel_dxdy. Since the name of a function does not change when it is differentiated with respect to a variable, it is redundant to write something like 'function_dfunction_dxdy'
  • Line lengths are variable - aim to keep lines of code under 80 characters but allow the definition of a function to be as long as needed as julia often has long function names/definitions

Optimisation Strategies

  • Don't construct intermediate objects (vectors, matrices) inside loops - this leads to a lot of memory allocation and then the GC slows everything down. Instead, need to write functions such that everything is done in-place.
  • When scanning an array, ensure that the innermost loop corresponds to the leftmost index when accessing an array - Julia's arrays are in column-major order
  • When a function contains two or more loops in succession (not composition) or some set-up code, try to break these into separate functions
  • Avoid operating on multiple arrays at once in Julia (eg. attempt to use BLAS where possible)
  • more?

Notes

Clone this wiki locally