Pythonとか使わず手軽にSQLで機械学習してみるよ.
単純な最急降下法
最急降下法は以下の式のとおり反復的に更新を行い$ f(\mathbf{x})の極小値を求める.
$ \mathbf{x} \leftarrow \mathbf{x} - \eta\nabla f(\mathbf{x})
... 再帰クエリで計算できそう.
例: $ \mathcal{f}(x) = x^2 - 6x + 9
$ f'(x) = 2x - 6なので更新式は $ x \leftarrow x - 0.01*(2x - 6) (ここでは適当に$ \eta=0.01).
終了の条件は更新回数が1000を超えるか,$ xを更新した際の$ f(x)の変化量が$ 0.001以下になることとしました.
code: sql
with
recursive gd(iter, x, y) as (
select
0, 0.00000, 10.00000
union all
select
iter+1, x-0.01*(2.0*x-6.0), pow(x-0.01*(2.0*x-6.0),2)-6*(x-0.01*(2.0*x-6.0)) + 9
from
gd
where
iter < 1000
and y - (pow(x-0.1*(2.0*x-6.0),2)-6*(x-0.1*(2.0*x-6.0)) + 9) > 0.001
)
select * from gd order by iter desc limit 1
table:result
iter x y
200 2.94726 0.00278
できた!
TODO: 線形回帰,ロジスティック回帰なんかも書く予定