まぃふぇいばりっと

機械学習やってます.Julia大好きです.勉強したことの殴り書きです.

論文実装

Julia 言語 非負テンソルトレイン分解の実装

研究で必要だったので実装しました. 参考にした論文はこちらです. link.springer.com このアルゴリズムでは,NMFが必要になるので取り急ぎ用意しておきます. using LinearAlgebra using Random function KL(A, B) n, m = size(A) kl = 0.0 for i = 1:n fo…

Julia 言語 テンソルリング分解による欠損補完

この論文に出てくる PTRC-RW を実装しました. https://ieeexplore.ieee.org/document/9158539 Folding と Unfolding が肝で,よく分かんないので,stackoverflow の強い人に助けてもらいました. arrays - The inverse operation of tensor circular unfold…

Julia 言語 Ket Augumentation (KA)

行列をreshapeしてテンソルにすることあるじゃないですか.いろいろな reshape が定義できますが,ビジョン系の研究するときは,Ket Augumentation という reshape をすることがよくあるっぽいです. この論文の第五章を読んで,KA実装しました. https://dl…

Julia 言語 テンソル低ランク補完 HaLRTC, SiLRTC

テンソルに低タッカーランク性を課して,欠損値を補完する手法 HaLRTC を実装しました. 参考にした論文はこれ.Algorithm 4 です. pubmed.ncbi.nlm.nih.gov 引用数すげえええ.こういう論文をかけるようになりたいものですね.再現するのは図6の実験です…

Julia 言語 Tensor Ring Decomposition

SVDによるテンソルリング分解を実装しました.テンソルリング分解についてはこちらの論文を参照.テンソルリング分解では,ランクはベクトルです.このベクトルの各要素には自然数がはいっていて,要素数は入力テンソルのオーダーに一致します. arxiv.org …

Julia言語 Nyström method による高速なカーネル回帰

カーネル回帰においてデータ数が多くてカーネル行列が巨大になると,逆行列の計算がボトルネックになる.そういう時は random feature map を用いて前処理行列を構成して線型方程式を反復法で高速に解く処方箋(この文献のアルゴリズム1参照)もあるみたい.…

Julia言語 Nyström method による行列の低ランク近似

ようやく実装できた.参考にした論文は以下の2つ. proceedings.neurips.cc ojs.aaai.org それにしても,こんなに著名な手法のjulia実装でどこにもあがってないのはちょっと驚き. サンプリングの方法はいろいろあるんだけど,最も古典的(?)と思われるラ…

Julia言語 多値のカーネル回帰

通常,カーネル重回帰では入力がベクトル,出力がスカラーの関数を学習する訳ですが,入力も出力もベクトルにしたいことがあります.そんなときに使える手法を次の文献で勉強しました. link.springer.com ieeexplore.ieee.org いろいろ調べても実装している…

Julia言語 Randomizedな方法での固有値計算の高速化のためにSRFTをやってみたけどうまくいかなかった

いままで実装してきたRandomizedな方法での固有値計算(RED)では,アルゴリズム中にランダム行列と入力行列との積を計算する必要がある.これにはO(nmr)かかる訳だけど,SRFTとかいう方法でO(nm log r)に高速化できるらしい.SRFTというのは特別な条件を満た…

Julia言語 Randomized eigenvalue decomposition via Nystrom Method を実装した.

n×nの正定値対称行列Aの固有値を大きい順にr個求めたいです.これを高速に計算するアルゴリズムとしてRandomized eigenvalue decomposition via Nystrom Methodを実装しました.以下の論文のFig.6.を実装しました. arxiv.org 前に実装したREDは固有値を大き…

Julia言語 Randomized eigenvalue decomposition を実装した.

n×nの実対称行列Aの固有値を大きい順にr

Julia言語 Kernel PCA実装

カーネルPCAを実装した.参考にしたのは 赤穂先生のカーネル本とこの修士論文. 「RKHS内でのΦ(x)の平均を簡単のためにゼロにする」という巷の説明をあちこちで見かけるが,無限次元空間でΦ(x)の平均をゼロにする方法は自明じゃない.この修論のappendixがと…

Python αダイバージェンスを小さくするNMF

KLダイバージェンスを最小化するNMFはよく知られていますし,sklearnで'beta_loss=1'にすればすぐに利用できます. 今回はKLダイバージェンスの拡張であるαダイバージェンスを小さくするNMFを実装しました. この論文の更新式をさくっと実装しました. www.s…

Julia言語 補助行列が2つある場合のNon-negative Multiple Matrix Factorization (NM2F)の実装

前回,補助行列が一つだけのNMMFの実装を公開した. 今回は同様に,これらの論文にのっとり,補助行列が2つある場合のNMMFを実装した. 行列X,Y,Zを,WH, AH,WBに同時に分解するというタスクである.コスト関数はKL情報量.(LSの場合の更新式ってどこかに…

Julia言語 Non-negative Multiple Matrix Factorization (NMMF)の実装

複合データ分析技術についてこのpdfで勉強してたら,NMMFというものを知った. ちゃんとした議論は,IJCAIでしている. www.ijcai.org 人工知能学会の予稿や論文,絵本のパターン抽出や,和文論文が参考になる. 私も研究で使うことになったのでささっと実装…

Julia言語 Non-Negative Tucker Decomposition の実装 [完全版] LSエラー, KLエラー

昨日の記事の完全版.Nonnegative Tucker Decomposition の Julia 実装. 重要なアルゴリズムと思うけど,Julia版は探しても見つからなかったので,自分で書いた. ieeexplore.ieee.org Python版はすでに実装があるみたい.これはSVDで初期化しているっぽい…

Julia言語 Non-Negative Tucker Decomposition の実装 [LSエラー版]

↓ こっちのほうが役に立つと思う genkaiphd.hatenablog.com ↑ こっちのほうが役に立つと思う 研究に必要なので,非負テンソルのタッカー分解の論文をjuliaで実装した.とりあえず,コスト関数がLSエラーのものを実装した.KLダイバージェンスの場合について…

Julia言語 重み付き非負行列因子分解

重み付き非負行列分解というタスクがある.欠損ありのNMFとかに使える. 研究に必要だったので,オーソドックスな次の手法を実装した. www.semanticscholar.org 実装は簡単で普通のNMFの更新式をちょっと変えるだけ. フロベニウスノルム尺度のものとKL尺度…

Julia言語 二重確率行列分解

非負の対称行列を低ランク二重確率行列で近似するタスクに関する論文を読んだ. ここでいう近似は,KL情報量の意味での近似. jmlr.org 論文中のAlgorithm 1を実装した. using LinearAlgebra function D_KL(A,B) (N, M) = size(A) dkl = 0.0 for i=1:N for …

Julia言語 非負テンソルをKL情報量でCP分解.CP-APRによる低ランク近似の実装

研究に必要だったので,Julia言語でこの論文のアルゴリズム3を実装した.「KL情報量でCP分解しましょう」って話だけど,中身はポアソン分布とかいろいろ書いてあってちゃんと読んでないから分からん.とりあえず非負のテンソルCP分解の手法の一つ. arxiv.or…

Julia言語 L1ノルムでのテンソルランク1近似の解析解

3階のテンソルをL1ノルムの尺度で近似するランク1テンソルを見つけます,という論文を実装した.論文のタイトルにexact solutionがあるけど,L1ノルムの意味での最良1ランク近似をしてるわけではないので注意(かなり混乱した). arxiv.org 最近,L1が流…

C++ 行列バランシング

行列バランシングと言えば,sinkhornですが,今回はこの論文を実装しました. arxiv.org (論文では自然勾配法使ってますが,ここでは,1次までしか実装してないです) #include <iostream> #include <Eigen/Dense> #include <vector> #include <cmath> #include <time.h> #include <cstdio> #include <fstream> using names</fstream></cstdio></time.h></cmath></vector></eigen/dense></iostream>…

Julia言語 高速3階テンソル1ランク近似手法SeROAPの実装

3階のテンソルTをST-HOSVD, T-HOSVDより正確に高速に1ランク近似できる手法をJulia言語で実装した. あ,ここでいう階っていうのは,rank(T)じゃなくて,ndims(T)ね.3-waysとか,3-orderってこと.日本では,ndimsを階っていうので,(CP)ランクと混ざっ…

Julia言語 高速非負値行列因子分解lraNMFを実装した.

すごく速くNMFができるらしい2012年の論文を実装しました. ieeexplore.ieee.org epsilon を 0 にするとロスがNaNになるので注意.しばしばロスがNaNになるので使うときはverbose=trueにして様子を見ること推奨. using LinearAlgebra using Random using Ar…

Julia言語 テンソルのKLダイバージェンス, αダイバージェンス

この論文の式(8)の実装になんと午前中を全て費やしてしまった... Nonnegative Tucker decomposition with alpha-divergence - IEEE Conference Publication テンソルの計算は慣れないなぁ. α=0,1でKLダイバージェンスになるんだけど,テンソルに対するKLダ…

Julia言語 αβダイバージェンスでの非負値行列因子分解

αダイバージェンスやβダイバージェンスでのNMFを一般化するために,αβダイバージェンスというものを定義します.入力行列と出力低ランク行列間のαβダイバージェンスが小さくなるようなNMFアルゴリズムをJuliaで実装しました.αβダイバージェンスやアルゴリズ…

Julia言語 αダイバージェンスで非負値行列因子分解

こないだのJuliaでNMFしたコードを一般のαダイバージェンスの尺度でNMFできるようにしました. αダイバージェンスの定義はここを参考にしました. 更新式はこの論文の2節に書いてあります.なんと更新式の一部をα倍したり1/α倍したりするだけ,簡単! using …