Paalonのブログ

ゲームと物理学と情報学のブログ

確率分布の累積分布関数と確率密度関数

要約

積分布関数は確率分布の累積表現で確率密度関数は確率分布の密度表現なので、それぞれ累積関数と密度関数と呼ぶべき。

確率分布って何?

私は確率分布と言われたときにどういう数学的な対象を指しているのか今の今まで理解していなかった。
その原因は私が今まで測度論的な話に踏み込んだことがなかったことが主だが、それ以外にもある。最たるものは確率論において通用されている諸概念のネーミングの悪さである。

確率分布の形式的な定義

確率空間 {\displaystyle (\Omega, \mathcal{A}, P)} から測度空間 {\displaystyle (S, \mathcal{S})} に対しての確率変数  {\displaystyle X: \Omega \to S} を考えると、測度空間 {\displaystyle S} から実数 {\displaystyle \mathbb{R}} への確率測度 {\displaystyle P \circ X^{-1}} が定まる。これを確率分布といい、{\displaystyle P^X} で表す。

累積表現と密度表現

つまり測度空間 {\displaystyle (S, \mathcal{S})} は晴れて確率空間 {\displaystyle (S, \mathcal{S}, P^X)} へと昇格し、その確率分布 {\displaystyle P^X} の具体的な形は累積分布関数 {\displaystyle F}確率密度関数 {\displaystyle p} で与えることができる。
つまり、累積分布関数 {\displaystyle F} は確率分布 {\displaystyle P^X} の累積表現を与えるのであり、確率密度関数 {\displaystyle p} は確率分布 {\displaystyle P^X} の密度表現を与えるのである。
何が言いたいのかというと累積分布関数も確率密度関数も確率分布の表現なのであるから、両方を分布関数と呼んでもおかしくないはずなのである。
しかし、数学者にとっては累積分布関数の方が一般的に扱いやすいからという理由で累積分布関数を分布関数と呼ぶ伝統になっている。
そのせいで確率分布を与える関数である確率密度関数を分布関数と呼ぶことができなくなってしまっている。
これは良くない。
私はこれから、累積分布関数を単に分布関数と呼ぶことはないだろう。
積分布関数と確率密度関数は確率分布の表現を与えるという意味で対等なものなのだから、表現方法は両者で対等にするべきである。
つまり、確率分布の累積表現関数と確率分布の密度表現関数とでも呼ぶのがふさわしいはずである。
短くするなら累積関数と密度関数とか、確率累積と確率密度とかと呼べばいいのだ。
とにかく、累積関数を分布関数と呼ぶのは気持ち悪い。私は密度関数を分布関数と感じているからだ。
統計学へと応用する視点では確率分布において密度関数の方が本質的であり直感的だと思うのは私だけだろうか?
共感してくれる人がいるならぜひとも累積表現の関数を分布関数呼ぶのをやめて累積関数、せめても累積分布関数と呼んで欲しい。

結局のところ、累積表現というのは積分形であって、密度表現というのは微分形であるというだけなのだが、微分方程式の本はたくさんあっても、積分方程式の本が少ないことが示すように、積分形の方が存在はいえるのかもしれないが、微分形と比べると表現力は乏しくなってしまう。つまりは微分形の方が扱いやすい。その意味では密度関数は累積関数に勝っている。それなのにもかかわらず、同じ分布の表現関数=分布関数である密度関数があたかも分布関数ではないかのように言われるのは言葉の本質を外している。

Macを買ったら初めにすることリスト

新しい Mac を手に入れたのでまた今度新しく Mac をセットアップするときに参考にするために Mac を起動してからやる設定をひたすら書いていく。今回手に入れた MacMacBook Air JISキーボードである。OS は macOS Sierra 10.12.4 である。 

 

アップデート

とにかく初めは App Storeを開いて Apple からきたOSのセキュリティアップデートやその他もろもろを反映させる。

macOS自体の設定

システム環境設定での設定を紹介する。

一般 -> メニューバーとDockを暗くする -> on

一般 -> メニューバーを自動的に隠す/表示 -> on

一般 -> デフォルトのWebブラウザ -> Google Chrome.app (後で設定)

f:id:paalon:20170414160434p:plain

 

Dock -> 画面上の位置 -> 左

Dock -> ウィンドウをしまうときのエフェクト -> ジニーエフェクト

Dock -> Dockを自動的に隠す/表示 -> on

 

f:id:paalon:20170414160725p:plain

トラックパッド -> ポイントとクリック -> タップでクリック -> on

トラックパッド -> ポイントとクリック -> 軌跡の速さ: 6

トラックパッド -> スクロールの方向: ナチュラル -> off

f:id:paalon:20170414161359p:plain

f:id:paalon:20170414161354p:plain

f:id:paalon:20170414161311p:plain

Misson control - hot corner -> mission control

Finderの設定

Finder -> 環境設定 -> 一般 -> デスクトップに表示する項目 -> ハードディスク -> off

Google日本語入力をインストール

Google日本語入力をインストール

www.google.co.jp

Kalabiner-Elementsをインストール

USキー配列が好きなのでそれっぽくするのと、左親指のキーにCommandを、右親指のキーにBackspaceを持ってくる。

https://pqrs.org/latest/karabiner-elements-latest.dmg

github.com

英数キー -> left_gui(equal to `left_command`)

かなキー -> delete_or_backspace

backslash (\) -> return_or_enter

international1 -> grave_accent_and_tilde (`)

international3 -> backslash (\) 

 

パッケージマネージャ

Macで一般的なパッケージマネージャにはFink, MacPorts, Homebrewなどがある。各々有利不利があるが、Homebrewを入れる。

Homebrew — macOS 用パッケージマネージャー

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

GUIアプリケーション

基本的に一般に広く使われているようなGUIアプリケーションは brew cask などで管理しないほうが良い。caskが推奨されている場合はこの限りでない。公式サイトのインストール方法に従ってインストールする。

Google Chrome をインストール

https://www.google.co.jp/chrome/browser/desktop/

Dropbox をインストール

https://www.dropbox.com/ja/install

Evernote をインストール

https://evernote.com/intl/jp/download/

Atom をインストール

https://atom.io/

 

TeX のインストール

TeX Live をインストールする。

Ghostscriptのインストール

まず Homebrewでghostscriptをインストールする。

brew install ghostscript

MacTexのインストール

次にMacTexをインストールする。

MacTexのパッケージのダウンロードはSafariでやることが強く推奨されている。

http://www.tug.org/mactex/mactex-download.html

パッケージをダウンロードしたら開いてインストーラを起動する。

途中カスタムからGUI-applicationとghostscriptはインストールしない設定にする。

インストールし終わったら、tlmgr (TeX Live Package Mananger) でアップデートする。

sudo tlmgr update --self --all

 

CUIアプリケーション

Ninja build のインストール

brew install ninja

Jupyter のインストール

brew install pyenv

brew install pyenv-virtualenv

~/.bash_profileに次をpyenvの設定を書く。

PYENV_ROOT=~/.pyenv
export PATH=$PATH:$PYENV_ROOT/bin
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)”


source ~/.bash_profile
pyenv versions
pyenv install —list
pyenv install anaconda3-4.3.1

 

Amethyst のインストール

brew tap caskroom/cask

brew cask install amethyst

 

Dockに登録しているアプリケーション

 以上が私の設定である。 個人的な防備録なので参考になるところだけ参考に。

 

Atomのlinter-gccパッケージがヘッダファイルを走査するたびに.gchファイルが生成される問題の解決法

Ubuntu + gccAtom を使って C++ プロジェクトを書いているのだが、文法チェックが欲しいので linter-gcc を入れた。

atom.io

ところが、ヘッダファイルを保存する度に数百MBもある.gchファイルを生成し始めた。これの対策法は実はちゃんと README に書いてあって、 linter-gcc の Settings の C Flags (または C++ Flags) のところに `-fsyntax-only`  とフラグを追加すると .gchファイルを生成しなくなる。ちゃんとREADMEにも記載されているのだが、気付いていなくてちょっと悩んだのでここにメモしておく。

 

Hyper Light Drifter を一周した

スタイリッシュ2Dアクションの Hyper Light Drifter を一周した。

感想を短くまとめてみる。大きなネタバレはしていないので買うかどうか悩んでいる人は参考に。

 

私が一周に要したプレイ時間:7時間強

おすすめ度:★★★★☆

特徴

コントローラのボタンを使いまくって駆使する爽快アクション

良い点

  • グラフィックが綺麗
  • 爽快なアクション
  • 探索が楽しい

何とも言えない点

  • 一周あたりのボリュームが7時間強だということ
  • RPG性は薄い

悪い点

  • そこそこ移動判定系のバグがある

プレイするのをおすすめできる人

  • アクションが好きな人
  • 世界観を楽しむのが好きな人
  • 自由に世界を探索するのが好きな人

期待してはいけないもの

  • RPG的なストーリー

Mac で Hyper Light Drifter が Xbox コントローラを認識してくれなかった話

今朝 Steam を起動すると良さげな世界観のゲームがおすすめされて、Hyper Light Drifter を衝動買いした。

早速起動してみると、コントローラでプレイするのがおすすめ!と表示されるのでこないだ買った Logicool Gamepad F310(買ったときの記事:http://blog.hatena.ne.jp/paalon/paalon.hatenablog.com/edit?entry=10328749687181765512)をMacに繋いで使うことにした。ところが、そのままでは認識してくれなかった。システム環境設定からドライバ(Releases · 360Controller/360Controller · GitHub)の設定画面の Advanced の Spoofing Preferences の Pretend to be an Xbox Controller にチェックを入れると認識するようになった。

Macでゲームパッド(Logicool F310r)を使う

Stardew Valleyをゲームパッドでやりたかったので、LogicoolゲームパッドF310rを買ってMacで使ってみた。 

 

LOGICOOL ゲームパッド F310r

LOGICOOL ゲームパッド F310r

 

 

F310rはXモード(Xboxコントローラと同じ)とDモード(昔からある古い規格)を裏に付いているスイッチで切り替えることができる。USBをMacぶっ挿しただけのデフォルトの状態ではXモードで認識してくれないのでドライバをインストールする必要がある。

調べてみるとXbox360コントローラ向けにgithubでドライバを上げてくれている人がいるみたいなのでそれを使う。

github.com

Installation のところに rereases page へのリンクがあるのでそこからインストーラ(私がやった時は 360ControllerInstall_0.16.4.dmg)をダウンロードしてインストール、Macを再起動する。起動するとシステム環境設定に Xbox 360 Controllers が追加されるはず(右下のところ)。

f:id:paalon:20160901033904p:plain

あとはF310rを接続し、MODEボタンを押してライトが点くかどうか確認できれば正常にXモード機能する。Xbox 360 Controllers のところから細かい設定ができる。

f:id:paalon:20160901034459p:plain

ボタンを押すと反応する。

f:id:paalon:20160901034626p:plain

UnityでJRPGを作りたい記録(1)

今まで OpenGL + C で無理やりオセロゲーム作ったり、Cocos2d + C++マインスイーパーもどきを作ったり、Pixi.js + JavaScript洞窟物語っぽいのを作ろうとしたりしてきた。

Cocos2dで作ったマインスイーパーもどき

いい加減、これまでわざと避けてきたUnityを使ってゲームを作ってみようと思い始めた。目標を決めておかないと迷走間違いなしなので列挙しよう。

  1. Mac, Ubuntu, Windowsで動く
  2. 最低限JRPGのシステムを備える
  3. ドット絵2Dのクォータービュー

というわけで、大抵の人はWindows(またはスマホ)向けにゲームを作ろうとするので、開発環境的な意味ではわりと情報を探すのが大変である。OpenGL + Cはもう多分二度とやらない。Cocos2d + C++はまたやるかもしれないが、自分のC++の理解不足と、Cocos2d特有のObjective-CライクなところとC++なところが混ざったところと、情報不足により詰まった。Pixi.js + JS は環境構築がものすごく楽で書きやすくてよかったがGUIでキャラクターの配置とかできるツールは自作しないと無いため不便だった。あとJS特有のソースコードの分割しにくさでバグだらけになった。振り返ってみると、素材が作れなくて詰んだことと、プログラミング的に技量が足りなくて詰んだこと、どのライブラリをどう使えばいいのか分からなくなって詰んだこと、そもそも適切なライブラリがなくて積んだことなど途中で開発が止まってしまった原因は色々だった。その点Unityは情報量では多分他を圧倒しているので楽に行けるという算段だ。

 

よく詰まったポイントとして、スプライトシート・タイルドマップの読み込み・再生、効果音の管理、BGMの自然なループ再生、当たり判定・衝突応答がある。まずスプライトシートは読み込めないと(目標とする)ゲーム作りは不可能である。次に、当たり判定はそんなに難しくないのだが、衝突応答が激ムズである。半年頑張ったが、未だに不自然なめり込みが残ったままである。効果音の管理・BGMループ再生は適切なライブラリがあるかどうか次第である。この3ヶ所を明確に実装できないとまた詰む。

 

という訳で当分の目標は

  1. スプライトシートを読み込んで再生する
  2. タイルドマップを読み込みレイヤに展開する
  3. BGMを再生する
  4. 効果音を再生する
  5. BGMを任意の位置でループ再生する
  6. 当たり判定を実装する
  7. 当たり応答を実装する

ということにしておく。いきなりクォータービューは難しいと思うのでまずは普通の傾き0°のやつでやる。

 

というわけで、Unity EditorをMacとUbuntu16.04にインストールした。Ubuntuの方はExperimentalであり、UnityEditorをUnityアカウントにログインして起動するにはなんかコマンド打って起動しないとうまくログインしてできない。公式掲示板に解決策が載っていた。

forum.unity3d.com

上記掲示板から引用すると、

" For others with this issue:
First, check if you have "libc6" installed (sudo apt install libc6).
Secondly, run: sudo locate libresolv
This will print a list to where the file is on your disk. For me, I had like three libresolv.so.2 but in different folders.
Then, I ran the command written above and it worked. After signing in to Unity I can just start the program without having to use the above command again.

So for me:
LD_PRELOAD=/lib/x86_64-linux-gnu/libresolv.so.2 /opt/Unity/Editor/Unity "

ということである。

 

が、最新版(Unity 5.50xb1)では普通に起動してログインできたので上記のことは必要なさそうである。昔の設定が残ってたりしてうまく行ったのかもしれないが。動けば良しは正義。

 

ちなみに、Ubuntuの標準?のデスクトップ環境はUnityなのでゲームエンジンのUnityと名前が被ってややこしい。