度数分布表・ヒストグラムと各種代表値の導出について色々

背景

最近統計学検定2級取得に向けて勉強してるのだが、 過去問とかを見る限り頻出(というかほぼ100%出る)問題っぽいので 理解を深めるためにまとめてみよう的なモチベーションでこの記事を書いている次第である。

目次

0. 使用データ
1. 度数分布表、ヒストグラム
2. 階級数の決め方
3. 期待値、分散、標準偏差、中央値

使用データ

今回、度数分布表とヒストグラムを作成する上で使用したデータは以下の通り。

www.kaggle.com

Udemyの特定分野(Business Finance、Graphic Design、Musical Instrument、Web Design)の講座に関する 受講料金、受講者数、レビュー数などがCSV形式ファイルで提供されている。
今回使用するのは各講座の受講料金データのみで、その他の列の値にはノータッチ。

度数分布表、ヒストグラム

概要

度数分布表とは、データの取りうる範囲をいくつかの区画(階級)に分けたときの 各階級に含まれるデータ数(度数)をまとめた表のことである。 また、度数分布表をグラフ化したものをヒストグラムという。

f:id:yutakata_log:20200529203904p:plain

(左側)Udemy講座の受講料金の度数分布表 (右側)Udemy講座の受講料金のヒストグラム
階級値・・・階級を代表する値(通常は階級内の中央の値が階級値となる)
度数・・・階級に含まれるデータの個数
相対度数・・・データの総数を1としたときの階級に含まれるデータの個数
累積度数・・・1番上の階級から各階級までの相対度数の累積和

級数の決め方

級数を決める時の指標として、以下のスタージェスの公式が知られているらしい。

スタージェスの公式
データの総数を Nとしたとき、階級数 kの目安は

 \displaystyle
k = \log_{2}N + 1
となる

上記のUdemy講座受講料金を例にすると、データの総数は3678なので、階級数 k


\begin{aligned}
k &= \log_{2}3678 + 1 \\
   &= 12.844 \cdots \\
   &\approx 13
\end{aligned}

となる。
スタージェスの公式の有用性については今後(時間があったら)調べていく方針。

期待値、分散、標準偏差値、中央値

上記のような度数分布表のみが与えられている時、期待値、分散、標準偏差値、中央値は以下の計算式で近似的に導出される。

  • 期待値 E[X]
    階級 iにおける階級値を x_i、相対度数を g_iとしたとき、期待値 E[X]

\begin{aligned}
E [ x ] &= \sum_{i=1}^{13} x_i g_i \\
            &= 7.5 \times 0.08 + 23.0 \times 0.31 + \cdots + 192.5 \times 0.12 \\
            &= 65.925
\end{aligned}



\begin{aligned}
V \left[ x \right] &= E \left[ (X-E[ X])^2\right] \\
             &= E \left[ X^2 \right] - (E \left[ X \right])^2 \\
             &= \sum_{i=1}^{13} {x_i}^2 g_i - \left( 65.925 \right)^2 \\
             &= 7769.2775 - 4346.105625 \\
             &= 3423.171875
\end{aligned}



\begin{aligned}
D \left[ X \right] &= \sqrt{V \left[ X \right]}  \\
             &= \sqrt{3423.171875} \\
             &= 58.5078\cdots
\end{aligned}


* 中央値 M(X)
中央値が含まれる階級を i、その階級における最大値・最小値を max(i), min(i)、累積相対度数を h_iとすると、 中央値 M(X)

 
\begin{aligned}
M(X) &= min(i) + \left(max(i) - min(i)\right) \times \frac{h_i - 0.50}{h_i - h_{i - 1}} \\
          &= 31 + (46-31) \times \frac{0.51 - 0.50}{0.51 - 0.40} \\
          &= 32.363636\cdots
\end{aligned}

平均、分散、標準偏差、中央値の計算すべてに階級値を使っているため、当然これらの値は真値からずれた値となる。 ちなみに、上記計算式で導出した近似値と真の値を表にすると以下のようになる。

平均 分散 標準偏差 中央値
真の値 66.049483 3721.70214312 61.005755 45
近似値 65.925 3423.171875 58.5078 32.3636

上の表を見る限り、中央値のずれが思っていた以上に大きくて、 それ以外の値は素人目には大体いい線いってるんじゃないといった感想。

上記中央値の近似計算では、階級内でデータが均等に分布していると仮定した上での計算であるため、 階級内でデータの分布に偏りがある場合には、近似値と真の値が大幅にずれてしまう。
実際に、中央値が含まれる階級内(31〜46)のデータの分布をヒストグラムで表してみると、 以下の図のようになる。

f:id:yutakata_log:20200529205208p:plain

はい、全然均等に分布していないですね。 また、階級(31〜46)には全データを昇順に並べた時の前半41%〜51%のデータが含まれるため、 階級内の後半の値である45が真の中央値となることが直感的に理解できます。

Fitbitデバイスのクロックフェイスを自作する

準備するもの

  • Fitbitユーザアカウント
  • Fitbit OSが搭載されたデバイス or WindowsMac上で動くFitbit OSシミュレータ
  • Android用Fitbitアプリ or iOS用Fitbitアプリ or Windows Phone用アプリ
  • Fitbit Studio
  • Wi-Fi環境

手順

step.1 ログイン

f:id:yutakata_log:20200521001828j:plain

  • ログイン画面でFitbitユーザアカウント情報を入力し、ログイン

f:id:yutakata_log:20200521002226j:plain

step.2 新規プロジェクトを作成
  • 新規プロジェクト名を入力し、テンプレートプロジェクト「Digital Clock」を選択し、「create」ボタンを押す

f:id:yutakata_log:20200521011609j:plain

step.3 Developer Bridgeの有効化
  • Fitbitデバイス上で[設定 ] -> [Developer Bridge]を選択し、ステータスが「connected to server」になるまで待機

  • Fitbit Studioの画面上部のToolbarから[Select a phone]を選択し、メニューから自身のFitbitデバイスを選択する(インジケータが緑色になれば成功)

f:id:yutakata_log:20200521011827j:plain

step.4 画像アップロード
  • 各Fitbitデバイスごとに以下のサイズのjpg、png画像を用意する
バイス サイズ(px)
Fitbit Ionic 348x250
Fitbit Versa, Fitbit Versa Lite, Fitbit Versa 2 300x300
  • クロックフェイスに使用する画像をresourceフォルダにアップロード f:id:yutakata_log:20200521012024j:plain
step.5 index.gui、style.css編集
  • index.guiにimageタグ追加 f:id:yutakata_log:20200521005933j:plain

  • style.cssで文字サイズ、文字色、フォント、時刻位置などの修正 f:id:yutakata_log:20200521010332j:plain

step6. Fitbitデバイスへ反映

画面上部Toolbarで「Run」を選択し、console欄にエラーログなどが出力されなければ反映成功 f:id:yutakata_log:20200521010838j:plain

【勉強ログ】ベイズの識別規則について

はじめに

はじめましての方しかいないと思うのではじめまして(強制)。

ユタカタと申します。

本ページは、最近学習を進めている書籍「はじめてのパターン認識」(通称はじパタ本。機械学習コミュニティ内で初学者向けとして認知されている本)の第二章のベイズの識別規則について、学習内容の整理と定着をはかるための自分用勉強ログとなっています。

この分野は素人なので内容に誤りなどがありましたら指摘していただけるとありがたいです(^^)

(注:  自称素人教授とかではないです)

 

ベイズの識別規則とは?

 ベイズの識別規則とは一言で言うと、「ベイズの定理内に現れる事後確率を指標とした識別方法」です。

説明をしやすくするために、以下の図のような状況を考えます。

  

f:id:yutakata_log:20191004215157p:plain

 

クラス C_1, C_2は実数を要素として持つ集合で、xをどちらかのクラスから抽出された観測データとします。また、観測者は観測データ xがどのクラスから抽出されたデータなのかは分からないものとします。 

 

ここで、クラス C_iの事前確率を P(C_i)、観測データ xに関する周辺確率を  P(x)、観測データ xが与えられた上でのクラス C_iに関する尤度関数を P(x|C_i)としたとき、ベイズの定理は以下の等式で表現される。

 

 \begin{align} ^{\forall}x \in \mathbb{R},\,\, C_i\in \{C_1,\, C_2\}、P(C_i | x)  = \frac{P(x | C_i)\, P(C_i)}{P(x)} \tag{1} \end{align}

 

※ちなみに、上記等式は同時分布 P(x, C_i)の定義よりすぐに求まる。

 P(x, C_i) = P(x) P(C_i\, |\, x) = P(C_i) P(x\, |\, C_i)

 

上記ベイズの定理を用いて再度説明すると、『ベイズの識別規則とは、ベイズの定理式 (1)の左辺が最大となる時のクラス  C^{\ast }を観測データ xの所属クラスとして判別する規則』となります。

すなわち、ベイズの識別規則により推定されるクラス C^{\ast }は以下の等式を満たすものです。

 \begin{align} C^{\ast } = \underset{C_i \in \{C_1,\, C_2\} }{argmax} P(C_i | x) \\ = \underset{C_i \in \{C_1,\, C_2\}}{argmax}  \frac{P(x | C_i)\, P(C_i)}{P(x)}\end{align}

 

さらに、上記ベイズの定理中では、 P(x)は固定値であるため

 \begin{align} C^{\ast } = \underset{C_i \in \{C_1,\, C_2\}}{argmax}\frac{P(x | C_i)\, P(C_i)}{P(x)}\\ = \underset{C_i \in \{C_1,\, C_2\}}{argmax} P(x | C_i)\, P(C_i)\end{align}

 

と式変形できます。

 

ベイズの識別境界

まず、事後分布 P(C_1\, |\, x)、P(C_2\, |\, x)に関して以下の等式 (2)が成立する xを考えます。

 

 \begin{align}P(C_1\, |\, x) = P(C_2 \, |\, x)\tag{2} \end{align}

 

また、 (2)式は以下の (3)式へと変形することができます。

 

 P(x\, | \, C_1)\, P(C_1) = P(x\, |\, C_2)\, P(C_2)\tag{3}

上記等式 (3)を満たす xのことをベイズの識別境界と呼び、所属クラスを判別する際の一種の基準となります。

 

以下、具体例となります。

 

具体例1)

クラス C_1を『平均 -1、分散 1正規分布  f(x) = \frac{1}{\sqrt{2\pi } }\exp \left\{- \frac{(x + 1)^2}{2} \right\}から発生する実数の集合』、クラス C_2を『平均 1、分散 1正規分布  g(x) = \frac{1}{\sqrt{2\pi }}\exp \left\{- \frac{(x - 1)^2}{2} \right\} から発生する実数の集合』としたとき、

 \begin{align}P(x | C_1) = \frac{1}{\sqrt{2\pi } }\exp \left\{- \frac{(x + 1)^2}{2} \right\},\,\,\, P(x | C_2) = \frac{1}{\sqrt{2\pi }}\exp \left\{- \frac{(x - 1)^2}{2} \right\}\end{align}

と表現することができます。

さらに、事前確率 P(C_1),\, P(C_2)をそれぞれ

 \begin{align}P(C_1) = \frac{1}{2},\,\,\, P(C_2) = \frac{1}{2}\end{align}

と仮定した時、識別境界は以下の等式 (4)を満たす xとなります。

 \begin{align} \frac{1}{2}\, \frac{1}{\sqrt{2\pi } }\exp \left\{- \frac{(x + 1)^2}{2} \right\} = \frac{1}{2}\, \frac{1}{\sqrt{2\pi }}\exp \left\{- \frac{(x - 1)^2}{2} \right\} \tag{4} \end{align}

実際に、識別境界を図示したグラフは以下のようになります。

 

f:id:yutakata_log:20191005195733p:plain

上図から、ちょうど x = 0のラインで二つの曲線 P(x | C_1)\,P(C_1),\,P(x | C_2)\, P(C_2)が交わっていることがわかります。この x = 0ベイズの識別境界です。(実際に等式(4)に x = 1を代入してみても成立することがわかるかと思います。) 識別境界 x = 0よりも左側( x \lt 0)の領域では、観測データはクラス C_1に所属しているものと判別し、 識別境界 x = 0よりも右側( x \gt 0)の領域では、観測データはクラス C_2に所属しているものとして判別されます。