Spark with Python: optimization algorithms
##Gradient methods in Spark MLlib Python API
The optimization problems introduced in MLlib are mostly solved by gradient based methods. I will briefly present several gradient based methods as follows
The method is used to minimize a sum of squared function values, e.g., non-linear least square problem
\[f(x) = \sum_{i=1}^{n}f_i(x)^2\]Searching for the root
Newton method aims to find the root of a function \(f(x)\) by iterative update
\[x_{n+1} = x_{n} - [J_f(x_n)]^{-1}f(x_n)\]Methods that replace exact Jacobian matrix \(J_f(x_n)\) are Quasi-Newton methods, e.g., replacing \(J_f(x_n)\) with \(J_f(x_0)\).
Searching for the optima
This is similar to searching for the root where we are looking for the foot of the gradient. The Jacobian matrix is replaced by Heissian matrix. The proposed methods usually exploit the symmetric property of the Heissian matrix.
The key idea is that the Heissian matrix does not need to be inverted. Unlike Newton method which inverts Heissian by solving a system of linear equation, the quasi-Newton methods usually directly estimate the inverted Heissian.
###Stochastic gradient descent (SGD)
###BFGS
Hongyu Su 21 May 2015