Mathtodon
#julialang

Julia Advent Calendar 2018 qiita.com/advent-calendar/2018 1日目に投稿しました!
XLA.jl を試してみた by antimon2 qiita.com/antimon2/items/ccfb5 #Qiita #Julia #julialang #colaboratory #TPU #XLA

@Sun_Pillar 軽く調査した限りは $10^{2^{17}-1}+1$ までの $100…1$ 型の整数には素数はないっぽい。
$10^{2^{16}}+1$ は の Primes.isprime() 関数で10分くらいかけて素数じゃないと判定された。

今回の資料も面白いよ! < JuliaTokyo #8 - 資料一覧 - connpass juliatokyo.connpass.com/event/

@mathmathniconico
ちなみに、
[1 (2:10)';2:10 Matrix(I,9,9)]
または
[1 (2:10)'
2:10 Matrix(I,9,9)]
とか書くと

$$
\begin{pmatrix}
1&2&3&\dots&10\\
2&1& & & \\
3& &1& &\smash{\llap{\Huge{0}}}\\
\vdots& & &\ddots& \\
10&\smash{\rlap{\Huge{0}}}& & &1
\end{pmatrix}
$$

となります(半分$\TeX$で行列にでっかい`0`を埋め込む練習したかっただけw)。

このときは `hvcat()` という hcat と vcat 両方の機能を持つ関数呼び出しと等価になります。仰る通りよくある行列の書式(例:[1 2;3 4])も内部的に `hvcat((2,2),1,2,3,4)` みたいに解釈されています。


むしろ変なのは[1:10]の挙動の方か? これだけUnitRange{Int64}型になる。

[1:10 2:2:20]はUnitRange{Int64}型の1行2列になってもおかしくない。

mathtod.online/web/statuses/25
@mathmathniconico

[〜;〜]は、配列のconcatenation表記です。`〜`にスカラーまたはベクトル(=1次元配列)を渡すとそれを全て連結したベクトル(1次元配列)を返します。
[1:10;]は、その2つめを指定しなかったことになり、1つのベクトル(に変換できるもの)を渡してベクトルに変換だけを実施して、結果1〜10を要素に持つ配列が返ってきます。

ちなみに[〜;〜]は縦方向の連結(`vcat()`関数の呼び出しに相当)で、`[1:10;2:2:20]` は `vcat(1:10,2:2:20)` と等価(1,…,10,2,4,…20 からなる20要素の1次元配列が返る)です。`[1:10 2:2:20]`と半角スペース区切にすると`hcat(1:10,2:2:20)`と等価になり結果は

$$
\begin{pmatrix}
1&2\\
2&4\\
\vdots&\vdots\\
10&20
\end{pmatrix}
$$
という10x2行列(2次元配列)になります。

古いJulia関連ファイルを全てuninstall

Julia 1.0をinstall

build ImageMagickが失敗する。test Makieも最初の1つ目で落ちる。

解決法:REPLを管理者モードで起動すればビルドが通る。test Makieは11個目で落ちる。

ImageMagickを公式からDLしてinstall。このときパスを通すのと、"Install development headers and libraries for C and C++" にチェックを入れる。

このときtest Makieは通る! が、207中30で失敗する。全部似たようなエラーなので、どこかの書き方に失敗しているのだろうか。

[1:10]だと範囲型の1要素の1次元配列ができる←分かる
[1:10;]だと1, ..., 10を要素に持つ10要素の1次元配列ができる←分からない

このセミコロンの意味って何だ

sympy は でも普通の感じで利用できて便利です。

実1変数函数の微積分のノート
github.com/genkuroki/Calculus

は カーネルの Jupyter notebooks の集合体なのですが、その中で普通に sympy を利用しています。

Julia言語でのsympyの簡単な利用例としても役に立つかも。

久々に記事投稿したらデイリーランキング8位に載った→
qiita.com/takeharu/items/bb154
Julia 0.7-DEV の新しい Iteration に触れてみた。 by antimon2 qiita.com/antimon2/items/8b1a9 #Qiita #Julia #julialang

mathtod.online/@tetu/1041798

おお!素晴らしいです。仕事速すぎ。

メルセンヌツイスターを使っている部分を も採用している dSFMT というメルセンヌツイスターの後継に置き換えることができれば、確実に速くなると思います。

私の計測では、メルセンヌツイスターよりdSFMTは3倍くらい速いです。

2Dイジングでは実用的には $10^{11}\approx 2^{36.5}$ 回以上乱数を発生させるような計算をすることになるので、周期がそれより長い擬似乱数を使わないと、科学的に意味のある計算にならない危険性があります。

dSFMTならその点も大丈夫だし、速いです。

2Dイジング模型のモンテカルロシミュレーションは「擬似乱数の質と生成の速さ」が科学的に非常に重要なことを納得させてくれます。

以前は擬似乱数発生にかかる時間は無視できるほど短いと誤解していた。

mathtod.online/@antimon2/10224

深夜に で

[(p,q,r,s,t,u) for p ∈ 1:5 for q ∈ p+1:6 for r ∈ q+1:7 for s ∈ r+1:8 for t ∈ s+1:9 for u ∈ t+1:10 if mod(p+q+r+s+t+u, 5)==0]

してしまった.

不完全ベータ函数
\begin{align*}
& B_x(a,b)=\int_0^x t^{a-1}(1-t)^{b-1}\,dt, \\
& I_x(a,b)=\frac{B_x(a,b)}{B_1(a,b)}
\end{align*}の数値計算のコードが2千行以上あった件

twitter.com/genkuroki/status/9

twitter.com/genkuroki/status/9

と R で使われている不完全ベータ函数の数値計算は所謂 TOMS 708 のアルゴリズムに基づいています。

github.com/JuliaLang/Rmath-jul

これが2千行以上ある。先人の苦労がよくわかる内容で面白いです。

@satie どんな感じっすか? 面白そうなら、ぼくも試してみようかな。 への翻訳を始める危険があるので避けている(時間が取られる)。

nbviewer.jupyter.org/gist/genk
に新たに付け加わったプロットの例。

ベイズ自由エネルギーBFEとWBICによるモデル選択はほぼ一致している。

WBICのプロットとBFE(Beyesian Free Energy)のプロットの形もほぼ同じになっている。

mathtod.online/media/FBRTK7uHv

nbviewer.jupyter.org/gist/genk
に新たに付け加わったプロットの例。

サンプルを分散を1に固定した正規分布で生成したときの、分散を1に固定したprior_0と固定しない場合のprior_1の比較。

KL情報量KL(真の予測誤差)が小さい方の事前分布の方が予測精度が高い。

分散を1に決め打ちしたprior_0を採用している法が予測精度がおおむね高い。

真の予測誤差KL(これは観測可能量だけから計算できない)とWAIC(これは観測可能量だけから計算できる)によるモデル選択は、それらが逆相関していることが原因で、違いが出る場合がある。違いが出ている場合はWAICが間違っているということ。

同じ色の部分が対応。黄色とcyanの部分でWAICが正しいモデル選択に失敗している。

mathtod.online/media/5xOap4t1X

nbviewer.jupyter.org/gist/genk
正規分布の共役事前分布(正規ガンマ分布)

に「事前分布選択」の節を付け加えました。事前分布をWAIC, LOOCV, WBIC, iWBICで選択する話。

事前分布で一部のパラメーターをある特定の値に固定してしまうこともできるので、これはパラメーターの一部を固定した部分モデルともとのモデルを比較して選択することの特別な場合とみなせる。

この場合には、真の予測誤差(KL情報量)やベイズ自由エネルギーのexplicit formulaeがあります。

たから、真の予測誤差による選択という正解をWAIC、LOOCVによる選択がどれだけ再現できるかもわかる。

あと、ベイズ自由エネルギーの正確な値によるモデル選択とWBICによるモデル選択の違いがどの程度かもわかる。

本当はベイズ自由エネルギーのサンプルを動かしたときの平均でモデル選択できればいいのですが、通常の実験観察ではサンプルは1つだけなので無理。

iWBICは一見 $c$ による補正にあたることをやっているように見えるのですが、私の解釈での実装では、うまく補正できませんでした。

統計学で使われる道具はへたに補正を採用すると、複雑な処理になって何が問題なのかわかり難くなる上に、補正が原因で信頼性が下がるというようなことがありがちなように思えます。

数学的にシンプルな道具をその欠点を承知の上で使う方が安全なような気がします。

具体的には2×2の分割表では何の工夫もしていないカイ二乗検定が結構頑健で良かったという話。

私はG検定は使う気になれないし、フィッシャーの正確検定は正確じゃないので使いたくないし、わざわざその正確じゃない方にカイ二乗統計量を補正するというのも意味がわからん。

添付画像は

nbviewer.jupyter.org/gist/genk

より。WBICとベイズ自由エネルギーの比較の例です。

同一の正規分布で生成した千個のサンプルの各々についてWBICと自由エネルギーを計算し、まとめてプロットしています。大雑把に
$$
\mathrm{WBIC} \approx (\text{自由エネルギー}) - c
$$のような関係になっています。ここで、$c$ は事前分布とサンプルを生成している真の分布だけで決まる定数です。$c$ はサンプルの取り方にはよらない。

この $c$ の正体は何だろうか?

答えを知っている人がいれば教えて下さい。

もしも $c$ で WBIC を補正することが可能ならば素晴らしいことだと思います。 mathtod.online/media/5eyKd_7Ch

nbviewer.jupyter.org/gist/genk
正規分布の共役事前分布(正規ガンマ分布)

は込み入った手計算の結果をJulia言語で書き直したものとモンテカルロ法による計算を比較して誤りが残る可能性を減らすことによって作成されました。

まだバグが残っている可能性があります。見付けたら、教えて下さい。

私が公開しているJupyter notebookをコピー改変したものを公開しても全然問題ありません。そういう自由がないと誤りを見付けてもらい難くなると思う。