Probability

はじめに

おはござ~(・ワ・🌻) 今回は確率論について説明していく🌸ンボ!勉強中だから稚拙なところもあるけどそこは指摘してくれるとうれ椎名!

——

確率の定義

定義に入る前に具体的な確率を見てみます。 例えばコイントスで表裏がでる確率って同様に確からしいとすると \frac{1}{2}です。他にもサイコロの1の目が出る確率は \frac{1}{6}です。このような確率が生じる集合を標本空間(sample space)とよみ、  \Omegaで表します。次に標本空間内の事象(events)の集合を Aとして、関数 P: A  \rightarrow [0, 1]を定めてみます。 このときに以下の性質を満たすとします。

 (i) P(\Omega)=1 \\
(ii)P(A_1 \cup A_2 \cdots A_n) = P(A_1)+P(A_2)+ \cdots + P(A_n)  \quad (A_iは素集合であるとする)

このとき、 (\Omega, A, P)確率空間(probability space)とします。具体例を通して確認してみましょう。

サイコロの具体例

6面ダイスを想像してみます。このとき、標本空間 \Omega = { 1, 2, 3, 4, 5, 6}が表されます。そして、出る目が2の倍数であるときの事象は A = {2, 4, 6}です。 そのため、2の倍数である確率は \frac{3}{6}=\frac{1}{2}となります。

この確率空間は以下の定理を満たすから確認してみます。

確率の命題

命題(proposition)1
(i)P(A^c)=1 - P(A) \quad (A^cはAの補集合) \\
(ii)B \subseteq A \Rightarrow P(B) \leqq P(A) \\
(iii)0 = P(\phi) \leqq P(A) \leqq P(\Omega)=1
命題(proposition)2
P(A \cup B) = P(A) + P(B) - P(A \cap B)
命題(proposition)3
P(A_1 \cup \cdots \cup A_n) \leqq P(A_1) + \cdots P(A_n) \quad (A_iは素集合とは限らない)

条件付き確率

Bという事象が起きたうえで、Aという事象起きるとき、その確率を p(A|B)と表して、

 P(A|B) = \frac{P(A \cap B)}{P(B)}

とかきます。また、次のような定理があります。

命題(proposition)4 (Bayes’ rule)
P(A|B)= \frac{P(B|A)P(A)}{P(B)}

この定理はベイズの定理といい、ベイズ学習の基礎となる定理です。 条件付き確率とベイズの定理も具体例を通して確認してみます。

条件付き確率の具体例

図のような2つの箱があるとします。


A: 1の箱が選ばれる事象 \\
B: 赤玉が取り出される事象

と定義してみると、条件付き確率は次のようになります。

  P(A)=\frac{1}{2} \quad P(B) = \frac{1}{2} \times \frac{3}{4} + \frac{1}{2} \times \frac{1}{2} = \frac{5}{8} \quad P(A \cap B) = \frac{1}{2} \times \frac{3}{4} = \frac{3}{8} \\
条件付き確率の定義より、 \\
P(B|A) = \frac{P(A \cap B)}{P(A)} = \frac{\frac{3}{8}}{\frac{1}{2}} = \frac{3}{4} \\
ベイズの定理より、\\
P(A|B) = \frac{P(B|A)P(A)}{P(B)}= \frac{\frac{3}{4} \times \frac{1}{2}}{\frac{5}{8}} = \frac{3}{5}

確率変数(probability variables)

さっき説明した確率空間だと数値的に確率は扱いにくいと思います。そのために、次は確率分布、確率変数という概念を導入していきます。 確率空間内には、標本空間 \Omegaが存在しています。その \Omegaに対して関数 x:\Omega \rightarrow \mathbb{R}を定めます。この x確率変数といいます。集合だったときに対して、実数で表されるからより扱いやすくなります。

今までの確率はサイコロのように離散的な確率でした。 ここからは連続的な確率も出てくるので紹介していきます。

離散確率変数

離散確率変数では、 p: X \rightarrow [0, 1]と定められた確率質量関数 p(x)が存在します。このとき、 p(x)は以下の式を満たします。

 \Sigma_{x \in X} p(x) = 1

連続確率変数

連続確率変数では、 p: X \rightarrow [0, 1]と定められた確率密度関数 p(x)が存在します。または確率分布と呼ばれます。そして p(x)は以下の式を満たします。

  (i) \int p(x)dx = 1 \\
(ii) p(x) \geqq 0

確率密度関数で有名なものに、ガウス分布確率密度関数があり、以下の式で表されます。

独立

ここで、新たな概念を紹介します。 P(A \cap B)が次のように表されるとき、 P(A), P(B)独立であるとよばれます。  A, Bは標本空間内の集合であるとしています。

  P(A \cap B) = P(A)P(B)

先ほど導入した確率変数 X, Yを使って書き直してみます。このとき、 p(X, Y)同時確率分布とよばれます。確率変数が互いに独立であるときは、次のように表されます。

  p(X, Y) = p(X)p(Y)

この式は、二つ以上の確率変数が存在するときにも、成り立ちます。実際に \boldsymbol{X} = (X_1, \cdots, X_n)^{T}の確率変数が互いに独立であるときは、同時確率分布は次のように表されます

  p(X_1, \cdots, X_n) = \prod_{i=1}^{n} p(X_i)

同時確率分布 p(X, Y)が存在しているとき、一つの確率変数について和をとる(もしくは積分する)ともう一方の確率分布を得ることができます。

 p(X) = \int p(X, Y)dy

確率の平均・分散共分散

この章では、確率分布の特徴を表す要素となる概念について紹介していきます。確率分布の平均などの計算結果を覚えておく必要はありませんが、覚えておくと後々楽になります。

期待値・平均

まずは、期待値・平均の定義を確認していきます。

確率変数のベクトル \boldsymbol{x}が存在して、その写像 f(\boldsymbol{x})に対して期待値は次のように定義されます。

期待値
\mathbb{E[f(\boldsymbol{x})]} = \int f(\boldsymbol{x}) q(x)d \boldsymbol{x}

 \boldsymbol{x}自身の期待値 \mathbb{E[\boldsymbol{x}]}をとるとき、 \mathbb{E[\boldsymbol{x}]}を確率の平均とします。(以下、 \mathbb{E[\boldsymbol{x}]} = \muと表現します。)

平均
\mathbb{E[\boldsymbol{x}]} = \int xq(x)dx \\
\mathbb{E[\boldsymbol{x}]} = \Sigma xq(x)

平均はデータの中心となる値を数値化したものであるということができます。

分散共分散

分散共分散の定義を確認していきます。

確率変数 Xに対して、分散(variance)は次のように表されます。

分散
 Var(X) =  \mathbb{E[(x - \mu)^2]}

定義のように確率変数の平均と確率変数の差を二乗していることから、分散は平均を基準としたデータの広がり具合を数値化したものであるといえます。

共分散(covariance)は、二つの確率変数の関係を計るときに用いられる数値です。 二つの独立な確率変数 X, Yに対して、次のように定義されます。

共分散
 Cov(X, Y) =  \mathbb{E}[(X - \mu_x)]\mathbb{E}[(Y - \mu_y)]

ここからは多次元での分散共分散の表現方法を確かめていきます。 確率変数のベクトル \boldsymbol{X} = (X_1, \cdots, X_n)^{T}に対して、その平均ベクトル \boldsymbol{\mu} = (\mu_1, \cdots, \mu_n)^{T}が存在するとします。 このとき、以下の計算により分散共分散行列を表現することができます。

分散共分散行列
 \Sigma =  \mathbb{E}[(\boldsymbol{X - \mu})] \mathbb{E}[(\boldsymbol{X - \mu})^T]

この式は、行列となって次のように表されます。


\left(
 \begin{array}{ccccc}
Var(X_1) & \cdots & Cov(X_1, X_n) \\\
\vdots & \ddots & \vdots \\\
Cov(X_n, X_1) & \cdots & Var(X_n) 
\end{array}
\right)

対角に分散、それ以外の成分に共分散が表れていることが確認できます。

終わりに

今回は、確率論の基礎となる概念をまとめました。概念をまとめた後は実際に計算してみるとより確率のイメージが湧くと思います。ぜひ計算してみてください。 次回は、いろいろな確率分布を紹介しながら平均、分散を計算していこうと思います。ついでに確率分布の図も紹介しようと思っています。 いずれにしても重要なことは、ド葛本社をみることです、必ずみましょう 最後に参考とした文献をまとめておきます。

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

ベイズ統計の理論と方法

ベイズ統計の理論と方法

確率と統計 (現代基礎数学)

確率と統計 (現代基礎数学)

ISIさんから教えてもらった良いやつ

2018年を振り返ろう

こんばんは、supercell です。今年もそろそろ終わりを迎えますね。なので、2018年の出来事、感想を一月ごとに振り返ってみようと思います。

1月

この頃、僕はまだ浪人生で駿◯に通ってました。国立は東工大で、私立は慶應、早稲田を受ける予定でした。そのため、センター試験の勉強はあまりせず、二次試験ばかりを解いていました。やはり試験が近づいていることがあり、不安定な精神状態でした。ただセンター試験の結果が割と良かったため、人間であることを保つことができました。予備校の先生と相談し、東工大慶應、早稲田を受けることに決定しました。

2月

慶應、早稲田、東工大の入試を受けました。最後の入試が終わったときは、やり遂げたという気持ちでいっぱいでした。結果としては、慶應学門2合格、早稲田基幹理工lll不合格でした。早稲田のほうが解けた感触があっただけ複雑な気持ちでした。

3月

東工大の結果が帰ってきました。結果は1点差で不合格でした....ほんっっっっっっっとうに悔しかったです。何度も結果を見返しました。しかし、結果は同じでした。これ以上浪人するわけにもいかなかったので、慶應に進学することを決めました。この頃は、大学で人工知能やりたいなーぐらいで具体的な計画は立てていませんでした。

4月

いよいよ大学に入学しました。この当時はpcに関してはほぼ素人で、当然webや人工知能の知識もありませんでした。でも、興味はあったので、入学式に配られたサークル一覧表で見たKCS(Keio Computer Society)に入ろうと決めました。素人のくせによく技術サークルに入ろうなんて思いましたね...kcsでは、unity(ゲーム制作が主)班、blender(3DCG制作)班、DTM(音楽制作)班、AI班がありました。当然AIには興味があったのでAI班に入りましたが、unityとblenderにも興味があったので入りました。あと、非公式でpythonの勉強会があったのでそれにも参加しました。

5月

blender講習会の一環として、ペンギンを作りました。さらに個人でイルカを作ってみました。(後に自分のアイコンとなる)unity班ではゲームを制作してみたのですが、C#の文法が分からず頭が?で埋まってました。AI班ではゼロから作るdeep learningを使った講習を受けていました。はえーって感じでした。python講習会が一番実りが大きいと感じました。良かったところは、一方的な講習ではなく、輪講形式だったところです。まあ、pythonがわかりやすかったってこともあります。

6月

blenderはキャラに手を出しましたが、難しすぎて断念しました。unityはほぼ行かなくなり、AIはなんとか食いついて講習を受けていました。(ただし、虚無)この頃、webもやりたいなと思い始めて、html,cssを独学で勉強し始めていました。そして、Ogiwara 神と出会いました。彼のアドバイスを受けて、PHPを触り始めました。

7月

ある程度書籍とprogateでPHPを学んだ後に、フレームワークの概念を教えてもらい、PHPフレームワークであるLaravel を学び始めました。 しかし、テストのせいで7月後半は虚無でした。

8月

夏休みに入りました。 途中で中断したLaravel の学習を再開しました。毎日Laravelを触っていたので、このときは頭がおかしかったのだと思ってます。

9月

KCSの合宿に参加しました。合宿といっても、ただLaravelを触る場所が変化しただけでした。まあ、KCSメンバーとともに開発できたのは割と良かったと思ってます。来年度は観光と開発両方をする合宿が良いですね、個人的な意見です。 9月後半は、大学が始まりました。

10月

10月は、unity班とblender班を実質やめて、AI班に絞りました。また、個人的にwebの勉強をしていました。python講習会は後期kaggle班へと進化(?)しました。後期kaggle班では、python機械学習プログラミングを輪講形式で学習しました。AI班では、三田祭に向けたモデルを作り始めました。ただモデルの作り方が全く分からず、???でした。

11月

Ogiwara神のすすめで、webサービスインターンを受けることにしました。というのも、webサービスの一連の流れがまだわかっていなかったからです。Docker(クジラ)もわからなかったので 3社受けた内、1社受かりインターンに行くことになりました。業務ではVue.js,Djangoを扱いました。あと、化学実験が始まりました。虚無でした。

12月

python機械学習プログラミングを読んでいましたが、所々分からないところがあったので、「確率と統計」を合わせて読み始めました。また、数学の基礎を固める必要性を感じたため、集合と位相や線形代数入門を読み始めました。12月後半(現在も含む)は、Flutterを学び始めました。これは、マルチプラットフォームで、iosandroidのアプリを作成できます。皆さんの予想通り、Ogiwara神のすすめです。

以上が、2018年の振り返りとなります。なかなか濃い一年でした。来年度はPRMLとか読んで機械学習極めたいですね。ここまで読んでいただきありがとうございました。

最近進捗生まれてますか???

はじめに

初めまして、supercellです。最近いろんなことをやってて自分の中で整理したいのでブログ書きました。

最近やってること

  • vue.js+Django
  • 機械学習、深層学習
  • 確率と統計、集合位相
  • ISIさんが作ったKaggleのコンペ
  • 大学の講義色々
  • couseraのandrew ngさんの講義
  • KCS ADC 12/23の記事に向けてのwebアプリ作成

はい、みての通りオーバーワーク感が半端ないです。 Kaggleと深層学習にかける時間が現状あまりないですねー 、年を越しながらやることになりそうです。

vue.js、Djangoは楽しいので良いです。今は vuexの実装とDjangoのmodel部分を作ってます。合わせてADCに載せる用のアプリも作ってます。アプリとしては、簡単なTo doアプリでも作ろうかなと思ってます。buefyのおかげでuiが格段に楽に実装できるので、サーバー上の処理を書けばすぐできそうです。(ほんとか?)

機械学習は書籍でアルゴリズムpythonで実装されたものを写経しながら勉強してますね、正直言って背景の数学何もわからん状態です。 そこで、機械学習に使う数学の基礎を固めようと思って 確率と統計、集合位相の勉強を始めました。 微積分学と線形代数は大学の講義でやってるんでね

大学の講義は現状満足してるものが物理、数学だけですね、それ以外は...。特に化学実験はいらないです。無駄に時間を浪費してるようにしか思えないです。

couseraは、春休みにやろうと計画していたのですが、某サークルのAI班で、来年の一年生への教材でcouseraの講義をまとめたものを利用するとかなんとかで前倒しでやることになりました。一年生が教えるって割と無茶な気がしますけど...まあやるしかないですね、時間はある(ない)ので。

おわりに

自分としては、数学、web、機械学習に力を注いでいくつもりです。あと、春休みはO君にすすめられたDartを勉強予定ですね。現状最も重要であるVTuber鑑賞ができてないため、非常にまずいです。 あーもっと時間が欲しい。

機械学習の一連の流れ

こんにちは、supercellです。Python機械学習プログラミングをまとめていきます。

 

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

 

 

今回は、機械学習の一連の流れについてです。

 

 

前処理:データ整形

データは必ずしもアルゴリズムを最適化するような形式ではないため、データを整形する必要がある。また、データの中から特徴量を抽出した後、その特徴量を同じ尺度に直す必要もある。抽出されたデータの中には、同じような分布であるものもあるだろう。

そのときは、次元削減を行う。これにより、処理能力を向上させることができる。

 

モデルの学習と選択

様々な機械学習の学習アルゴリズムが開発されているため、モデルを選択する必要がある。その際、たった一つのモデルを試すだけではそのモデルの性能が良いかどうかは判定することができない。そのため、複数のモデルを比較する。モデルの評価の際には、トレーニングセットっとは別のテスト用のデータを用意し、予測性能を評価する。

予測性能を汎化性能という。

 

ライブラリのデフォルトのパラメータでは、良い性能が出ないこともあるだろう。そのため、そのパラメータを最適化する必要がある。このパラメータをハイパーパラメータという。

モデルの評価と予測

学習したモデルを使用して、正解の値と予測値との誤差を調べる。テストデータセットにモデルを適用することで、モデルの予測性能の評価をすることができる。

 

以上が一章のまとめです。

一章は完全に読みもので、前期に学習したことの復習でした。

二章からいよいよ実装に入るので楽しみです。

 

 

 

 

Python機械学習プログラミングを読んで

こんばんは、supercell です。
今回は、Python機械学習プログラミングを読んでみてのまとめです。(要望がありました)

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

まずは1章を簡潔にまとめていきます。
3つの機械学習
教師あり学習
教師なし学習
強化学習
があります。

教師あり学習について

この学習の目的は、トレーニングデータからモデルを学習し、未知のデータも予測できるようにすることです。
データが離散値(スパムメールか否か、など)の場合、データを分類することになります。離散値はラベルを持ち、このラベルを予測していきます。
データが連続値の場合は、回帰と呼ばれます。複数の予測変数と応答変数の変数の関係を探っていきます。
具体的には、平均二乗誤差です。これは、変数の差を2乗した値を平均して、その値が最小となるように重みを求める手法です。

強化学習について

この学習では、環境とやりとりをして改善していく学習です。このシステムをエージェントと呼びます。エージェントが行動を起こすと、環境からエージェントへと報酬が送られます。その報酬に応じてエージェントが行動を改善していきます。一般的には、報酬が最大になることが目標とされています。

教師なし学習について
この学習では、不明なデータ構造をグループ化します。
その手法はクラスタリングと呼ばれます。グループ間では相違が大きく異なるようになっています。
具体例として、マーケティング担当者が売るものを選定するとします。その時、教師なし学習によって顧客のニーズに合わせて顧客をグループ化することができます。

以上が3つの機械学習です。
個人の感想としては、強化学習が面白そうです。環境に適応していくのは人間っぽい(?)ですし。
具体的な実装はまだですが、非常に楽しみです。

作成中のwebアプリケーションについて

※このブログはただの活動報告です

こんばんは、supercell です。ここでは、現在作成中のwebアプリケーションの現状を報告します。

まず、大まかなデザインというかイメージは決まっていて、こんな感じです。雑なところは大目にみてください

f:id:undermountainafu:20181010201104j:plain

では、説明していきます。
まず、twitter アカウントでログインできるようにしようと思ってます。理由はtwitterでこのアプリを宣伝するからです。

次に肝心の To doを表示するページについてです。
デザインは某ステルスゲームのデザインを参考にするつもりです。

次にシステム面です。
未完了、完了でタブを分けて表示させます。
また、to doが表示される四角い部分には、「完了」ボタン、達成度の%表示を実装するつもりです。

次にサーバについてです。
これに関しては無知すぎて全く決まってないです...
来る時が来たとき考えます。

以上が説明となります。webアプリケーションの名前はまだ未定です(募集してます)

現状は、デザイン部分を作成しています。いつ終わるか全然わからないです笑
最低でも○○祭までには間に合わせたいですね...

何かアドバイスなどがあれば教えてください。

名前:supercell
趣味:クラクラ(ゲーム)、VTuber鑑賞
夏休みの3つの望み
・(実現可能性90%) Laravelでwebサービス第一号を作成
・(実現可能性50%) 統計学を完全理解
・(実現可能性10%) Javaもちょっと触ってみたい