#数楽 #Julia言語

gist.github.com/genkuroki/5be2…
ランダム直交行列

①固有値の偏角の分布は一様分布っぽくなる。n=2000
②しかし同じn=2000の一様分布のサンプルとは様子がだいぶ違う
③④bins=50のヒストグラムは一様分布のn=10^5のサンプルに近い感じ。 ImageImageImageImage
#Julia言語 #数楽

ランダムな直交行列はランダム行列のQR分解で生成している。

function rand_orthogonal(n)
Q, R = qr(randn(n, n))
Q * diagm(sign.(diag(R)))
end

単にQを使うと失敗する。
#Julia言語 #数楽

n=200のランダム直交行列の固有値の分布(左)と円周上の一様分布のサンプル(右)の比較。

偏角のヒストグラムを見ると、ランダム直交行列の固有値達はほぼ等間隔に並んでいることがわかる。 Image
#Julia言語 1つ前のツイートと同じことをRandomMatrices.jlを使って行う方法。

rand(Haar(1), n) なんてが使える。

Haar測度!

dev RandomMatrices してProject.tmplを編集して、他のパッケージのバージョンダウンが起こらないようにして使っている。 Image

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with 黒木玄 Gen Kuroki

黒木玄 Gen Kuroki Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @genkuroki

18 Feb
#数楽 #統計 以下のようなゲームを2人で行う。

①k=0,1,2,…,10に対応する11個の数p_k達の表を作って互いに交換する。

各p_kは「10回中k回成功」というデータが得られたときの真の成功確率qの推定値とみなされるので、0以上1以下の実数であるとする。

例えば、最尤推定ならp_k=k/10となる。続く
#数楽

②相手の推定法の数表を受け取った2人は、その推定法が失敗しそうな真の成功確率qを選んでコンピュータに入力する。

qの選択では次の③のステップに配慮することが重要である。例えば、受け取った数表が

0.05, 0.1, 0.2, …, 0.9, 0.95

の場合には、q=0.43とするのがほぼベストになる。続く
#数楽

③コンピュータは、成功確率qの10回のベルヌーイ試行での成功回数kに関するKL(q, p_k)を1000回分足し上げ、得られた数値×1万円を推定法p_kに対する罰金の金額とする。ここで

KL(q, p) = q log(q/p) + (1-q)log((1-q)/(1-p))

はKL情報量である。KL(q, p)≥0で等号とp=qは同値。

続く
Read 24 tweets
17 Feb
尤度函数を最大化することに必然性はないです。実際、比較基準を明確にしたとき、最尤法は最良の方法にならないことが多いです。

モデルを固定して、正則性などの条件を仮定して、サンプルサイズ→∞とすれば(非現実的!)、最尤法によってモデル内で可能な最良の結果が得られることは証明できます。
尤度の定義は「モデル内でデータと同じ数値が生成される確率または確率密度」であり、「モデルのデータへの適合度」の指標にはなりますが、「もっともらしさ」ではないし、「最大化するべき量」でもありません。

最尤法以外にも沢山の方法があり、条件を変えるごとにどれが良い方法であるかは変わる。
ダメな考え方:尤度は英語でlikelihoodであり、もっともらしさを表す。最尤推定はもっともらしさを最大化する推定法である。得られたデータと同じ数値が生成される確率を最大化することは非常にもっともらしい推定法だろう。

↑非論理的な考え方の典型例

最尤法は沢山ある方法の中の1つにすぎない。
Read 4 tweets
17 Feb
#統計 統計学関連の文献で、「不偏」(unbiased)という条件を付けて「〇〇法が最良」というようなことを述べる行為が普通に行われていますが、不偏性は数学的にものすごく強い制限で、その制限の中で「最良」と言われても、「どうせ、井の中の蛙だろ?」という印象がどうしても出て来てしまう。
#統計 不偏性(unbiasedness)の条件は座標依存なので、座標をちょっと変えただけで維持されなくなってしまう。

例えば、統計学入門で習う不偏分散は真の分散の不偏推定量になっているのですが、不偏分散の平方根は真の標準偏差の不偏推定量にはなっていません。
#統計 不偏性はおそろしく強い数学的条件であり、実用的には問題がない小さな不偏性の崩れを許容した方が良い場合の方が多いと思う。

不偏性を仮定すると数学的に強い結果を出し易いのですが、「実用的には不偏性の条件の維持にこだわることは不合理である」と正直に言うべきだと思う。
Read 5 tweets
17 Feb
#Julia言語 私が自分の勉強用に作ったパッケージ

github.com/genkuroki/Meta…
MetaUtils.jl
↓使い方
nbviewer.jupyter.org/github/genkuro…

添付画像1:print_tree(AbstractMatrix)←これの出力結果を見れば、Juliaが多彩な行列の型を持っていることが分かる。他の事柄についても同様。ジャングル的な複雑さ。 ImageImage
#Julia言語

print_tree(Number), print_tree(AbstractVector) の結果

行列だけではなく、数やベクトルの型も沢山ある。

パッケージを読み込むとこれらの内容がさらに増える。

型の継承がツリー型階層構造に限ることが原因で生じる設計上の困難は Holy traits を使えば解消される。 ImageImage
#Julia言語 数の型ぐらいは全部覚えられても、ベクトルや行列の型はとても覚え切れない。そういう複雑な型の世界の構築はベクトルや行列の効率的な計算に必要。

しかし、一般ユーザー側はベクトルや行列の型を無理に覚えることなく、効率的な計算が可能である。そういうユーザーフレンドリーな設計。 ImageImageImage
Read 6 tweets
16 Feb
#数楽

この手の「下からの評価」や「上からの評価」は非常に基本的。

30以上を示せだと簡単ですが、次の問題なら「良い問題」かも。

問題: ∫_2^4 x^x dx > 100 を証明せよ。e > 2.7 と log 3 < 1.1 を既知としてよい。

真の問題: 既知とすると良い事実でシンプルなものは他に何があるか?
#数楽

∫_2^4 x^x dx = 111.2851854… らしいです。

wolframalpha.com/input/?i=%E2%8… Image
#数楽

既知とするのは、

e > 2.7, log 2 < 0.7, log 3 < 1.1

の3つにしておいた方が選択肢が増えてよかったかな。

選択肢が増えた方が楽しい。
Read 24 tweets
16 Feb
楽な方法で高速に計算できたらうれしい人達は潜在的に非常に沢山いるはずで、Python + NumPy とか、R + Stan のような組み合わせは潜在的な需要に応える道具だったので広く普及したのだと思います。

そして、Juliaがやって来た。
Juliaが掘り起こしそうな潜在需要は、プログラミングの素人がC, C++, Fortranで書かれたライブラリ並の計算速度を持つパッケージの開発者側に回ること。

プログラミングが素人の各分野の専門家が、自分の専門に役に立つ高速計算の道具を自分で作って配布したいという欲望を持つ場合は少なくないはず。
欲望はあっても、C, C++, Fortranでライブラリを書いて、PythonやRで使えるようにするというようなことはやる気になれないのでやらないということになりがちだと思う。

JuliaをマスターしていればJuliaだけで高速計算できるパッケージを作れます。
Read 4 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!