Julia言語
メトロポリス法で,ボルツマンマシンからサンプリングするコードを書きました. とりあえず,状態xを与えたら,エネルギーを返してくれる関数を用意しておきます. using Plots using Random function energy(x,b,w) N = length(b) term_1_body = sum( x .* …
行列をreshapeしてテンソルにすることあるじゃないですか.いろいろな reshape が定義できますが,ビジョン系の研究するときは,Ket Augumentation という reshape をすることがよくあるっぽいです. この論文の第五章を読んで,KA実装しました. https://dl…
ランダムな低ランクテンソルが欲しいときってありますよね. テンソルのランクっていろいろありますが,とりあえずタッカーランクがひくいランダムテンソルを手に入れるコードをかきました. もっとよい方法があったら知りたいです. using LinearAlgebra us…
Julia の TensorToolbox を使うと気軽に CP 分解ができます. github.com 例えば,ランダムな4×4×4×4テンソルXをCP分解するなら using TensorToolbox X = rand(4,4,4,4) F = cp_als(X, 3) でOKです.ここで,ターゲットランクは3にしました.これで,F.lambd…
カーネル回帰においてデータ数が多くてカーネル行列が巨大になると,逆行列の計算がボトルネックになる.そういう時は random feature map を用いて前処理行列を構成して線型方程式を反復法で高速に解く処方箋(この文献のアルゴリズム1参照)もあるみたい.…
ようやく実装できた.参考にした論文は以下の2つ. proceedings.neurips.cc ojs.aaai.org それにしても,こんなに著名な手法のjulia実装でどこにもあがってないのはちょっと驚き. サンプリングの方法はいろいろあるんだけど,最も古典的(?)と思われるラ…
よく研究で使うのでメモがてら,ここにおいておこう. 行列Kの固有値を大きい順にrank個求める. 計算手法としては,lapack, lapack_sym, arpack, nys, randomizedの5種類. lapackとarpack以外は入力行列が対称であるという条件を課しているので注意. nys…
数値計算で逆行列の計算を避けましょうというのはもはや常識と思います.例えば,givenの行列AとBについて,C = inv(A) * B を計算したいときは,左除算演算子\を使って using LinearAlgebra C = A \ B とした方が速いです.実際に using BenchmarkTools n =…
いままで実装してきたRandomizedな方法での固有値計算(RED)では,アルゴリズム中にランダム行列と入力行列との積を計算する必要がある.これにはO(nmr)かかる訳だけど,SRFTとかいう方法でO(nm log r)に高速化できるらしい.SRFTというのは特別な条件を満た…
n×nの正定値対称行列Aの固有値を大きい順にr個求めたいです.これを高速に計算するアルゴリズムとしてRandomized eigenvalue decomposition via Nystrom Methodを実装しました.以下の論文のFig.6.を実装しました. arxiv.org 前に実装したREDは固有値を大き…
n×nの実対称行列Aの固有値を大きい順にr
Julia標準搭載のeigenを使うと,N×N行列Aの固有値分解がO(N^3)になっちゃうと思ってたからArpack使ってたんだけど,Arpackはそもそも疎行列向きっぽい. どうやら入力行列Aが実対称行列ならば val, vec = eigen(A, 1:r) で小さい順に固有値をr個とりだせるみ…
Juliaで,n×m行列Xに,n次元の特徴量がm個格納されていて,これを,trainとvalidに分けたい. 要は,列をランダムにk個選んだn×k行列とn×(m-k)行列をつくりたい. 手っ取り早い方法がわかんないんだけど,いまのところ,暫定のマイベストプラクティスはこん…
カーネル回帰のjulia実装が研究で必要になったから10分で実装した. とりあえず,前に書いたカーネルを呼ぶ式. function rbf_inners(X,Y,c) rbf_inner(x,y,c) = exp( -c*norm(x-y)^2 ) d, n = size(X) d, m = size(Y) K = zeros(m,n) for j = 1:n for i =…
(解決済み) 非深層学習系の提案手法を実装するならJulia一択だと思うのですが,既存の比較手法をすぐに試せないとpython民に戻りたくなりますね..LightGBMで多クラス分類をしようとして,ちょっと詰まったので,二度と再び本件で躓かないためのマイメモ…
カーネルPCAを実装した.参考にしたのは 赤穂先生のカーネル本とこの修士論文. 「RKHS内でのΦ(x)の平均を簡単のためにゼロにする」という巷の説明をあちこちで見かけるが,無限次元空間でΦ(x)の平均をゼロにする方法は自明じゃない.この修論のappendixがと…
BenchmarkToolsって便利ですよね.例のように(10×10)のランダム行列の固有値を計算するのに要した時間を計測したとします. ここから,最小時間37.748とか,中央値47.454とかを取り出すにはどうしたらよいでしょうか,というのがいつも分からなくなるのでメ…
しょっちゅう分からなくなってはTwitterで強い人に教えてもらうので,ここにメモ. CartesianIndexは.Iで添え字を取り出せる.これを'collect'すると所望のvecになる. ただ,これだとちょっと気持ち悪いと思う人もいるようなので, Tuple(CartesianIndex(2,3…
前回,補助行列が一つだけのNMMFの実装を公開した. 今回は同様に,これらの論文にのっとり,補助行列が2つある場合のNMMFを実装した. 行列X,Y,Zを,WH, AH,WBに同時に分解するというタスクである.コスト関数はKL情報量.(LSの場合の更新式ってどこかに…
複合データ分析技術についてこのpdfで勉強してたら,NMMFというものを知った. ちゃんとした議論は,IJCAIでしている. www.ijcai.org 人工知能学会の予稿や論文,絵本のパターン抽出や,和文論文が参考になる. 私も研究で使うことになったのでささっと実装…
一番手っ取り早いのはこんな感じ A = rand(5,5) A[A.<1.0e-10] .= 0 以下,強い人に教わったこと. 絶対値が1e-10以下なら0にする場合に真っ先に思い浮かぶのは X[abs.(X) .≤ 1e-10] .= 0 だけど,これは遅い. やりたいこと分解して, small2zero(x, ε=1e-1…
重み付き非負行列分解というタスクがある.欠損ありのNMFとかに使える. 研究に必要だったので,オーソドックスな次の手法を実装した. www.semanticscholar.org 実装は簡単で普通のNMFの更新式をちょっと変えるだけ. フロベニウスノルム尺度のものとKL尺度…
左確率行列分解(Left-Stochastic Matrix Factorization)というタスクがある.NMFに対称性と列規格化を要請する.これでうまいことクラスタリングができる. 研究で比較実験を行うためにクラスタ数2の場合のみを実装した. jmlr.org アルゴリズム中に確率単…
非負の対称行列を低ランク二重確率行列で近似するタスクに関する論文を読んだ. ここでいう近似は,KL情報量の意味での近似. jmlr.org 論文中のAlgorithm 1を実装した. using LinearAlgebra function D_KL(A,B) (N, M) = size(A) dkl = 0.0 for i=1:N for …
emps = [ [], [], [], [], [] ] みたいなのをつくりたい.そういう時は, N = 5 emps = [[] for i=1:N] とすればよい. An array of empty arrays - First steps - JuliaLang
研究に必要だったので,Julia言語でこの論文のアルゴリズム3を実装した.「KL情報量でCP分解しましょう」って話だけど,中身はポアソン分布とかいろいろ書いてあってちゃんと読んでないから分からん.とりあえず非負のテンソルCP分解の手法の一つ. arxiv.or…
fMRIの出力がniiファイルらしい.良く分からないが,using NIfTI で開ける. using NIfTI ni = niread("hogehoge.nii") ni = niread("foo.nii.gz") でOK.普通の配列にしたかったら convert(Array{Float64}, ni) でOK. github.com
NASAのページからgeotifファイルをダウンロードできるんだけど,juliaでどう開けばよいか分からなかった. 色々調べたけど,多分これが一番良い. github.com using GeoArrays geoarray = GeoArrays.read("hogehoge.tif") 座標をとりだしたかったら, coords…
juliaで using FileIO img = load("hogehoge.png") したあとに,r,g,b要素を取り出したかったら,それぞれ using Colors r = red.(img) g = green.(img) b = blue.(img) とする.ちなみにこのままだとr,g,bはそれぞれ Array{N0f8,2} with eltype FixedPointN…
自然数nに対して,[n] = {1, 2, …, n} として,[I]×[J]×[K]が欲しい時ととかってあるじゃないですか.テンソルの添え字でloop作りたいときとか.そういうときは,IterToolsのproductを使うとよいことに気が付いた. using IterTools I = 2 J = 3 K = 2 for i…