大津の二値化(判別分析法)の式変形とか

背景

画像処理の勉強をしていたら「判別分析法」という二値化方法が出てきました。

調べて見ると「大津の二値化」の別名らしく、これを機に中身を勉強してみました。

 

大津の二値化概要  

f:id:kazenoha:20190414153542p:plain

 

二値化はグレースケール画像を「閾値 t」を用いて輝度の異なる二つのクラスに分類します。

ここで大津の二値化(判別分析法)とは、閾値 tをそれっぽくうまく選ぶ手法の一つです。

まず大津の二値化では、クラス内分散S^2_wとクラス間分散S^2 _bを考えます。

 

クラス内分散S^2_w

まずクラス内分散S^2_wは、各クラスの分散 S^2_1 S^2_2を用いて

\begin{align}
S^2_w = \frac{n_1}{n} S^2_1 + \frac{n_2}{n} S^2_2 
\end{align}

と定義されます。

各クラスの分散が小さくシャープになるような閾値 tS^2_wを小さくします。

クラス間分散S^2_b

クラス間分散S^2_bは、各クラスの平均 \mu_1 \mu_2と全体の平均 \muを用いて

\begin{align}
S^2_b = \frac{n_1}{n} (\mu_1 - \mu)^2 +  \frac{n_2}{n} (\mu_2 - \mu)^2
\end{align}

と定義されます。

各クラスの平均値が全体の平均から離れるような閾値 tS^2_bを大きくします。

分離度X

ここで分離度 Xを以下で定義します。 

\begin{align}
X = \frac{S^2_b}{S^2_w}
\end{align}

ここで全分散S^2に対して

\begin{align}
S^2 = S^2_b + S^2_w 
\end{align}

の関係(あとで導出)を用いると

\begin{align}
X = \frac{S^2_b}{S^2 - S^2_b}
\end{align}

となり、S^2閾値 tの位置に依存しないので XS^2_bにのみ依存します。

閾値tの決め方

大津の二値化では分離度 X最大となる時の閾値 tをもっともそれっぽい閾値として選択します。

S^2_b最大の時にXが最大となるので、

S^2_bが最大となる時の閾値 tを探しましょう。

 

数式処理

僕がつまづいたのは

\begin{align}
S^2 = S^2_b + S^2_w 
\end{align}

ってなんだよというところです。

そこで色々式変形のあとを残しておきます

 

S^2_bの式変形

まずS^2_bについて、

\begin{align}
S^2_b &= \frac{n_1}{n} (\mu_1 - \mu)^2 +  \frac{n_2}{n} (\mu_2 - \mu)^2  \\
&= \frac{n_1}{n} \left( \mu_1^2 -2\mu_1 \mu + \mu^2 \right) + \frac{n_2}{n} \left( \mu_2^2-2\mu_2 \mu + \mu^2 \right) \\
&=\frac{1}{n} \left( n_1 \mu_1^2 + n_2 \mu_2^2 \right) +   \frac{n_1 + n_2}{n} \mu^2 -2 \frac{1}{n} \mu \left( n_1 \mu_1 + n_2 \mu_2 \right) 
\end{align}

ここで、 n = n_1 + n_2 n \mu = n_1 \mu_1 +n_2 \mu_2より、

\begin{align}
S^2_b &= \frac{1}{n} \left( n_1 \mu_1^2 + n_2 \mu_2^2 \right) + \mu^2 -2 \mu^2 \\
&= \frac{1}{n} \left( n_1 \mu_1^2 + n_2 \mu_2^2 \right)  - \mu^2
\end{align}

 と表すことができます。上式はあとで使います。

またもうちょっと頑張ると、

\begin{align}
S^2_b &= \frac{1}{n} \left( n_1 \mu_1^2 + n_2 \mu_2^2 \right)  - \mu^2 \\
&= \frac{1}{n^2} \left[ n n_1 \mu_1^2 + n n_2 \mu^2 - n^2 \mu^2 \right] \\
&= \frac{1}{n^2} \left[ \left(n_1 + n_2 \right) n_1 \mu_1^2 + \left(n_1 + n_2 \right) n_2 \mu^2_2 - \left( n_1 \mu_1 + n_2 \mu_2 \right)^2 \right] \\
&= \frac{1}{n^2}\left[ n_1 n_2 \mu_1^2 + n_1 n_2 \mu_2^2 + \left( n_1^2 \mu_1^2 + n_2^2
\mu_2^2 \right) - \left( n_1^2 \mu_1^2 + n_2^2 \mu_2^2 + 2n_1 n_2 \mu_1 \mu_2 \right) \right] \\
&= \frac{n_1 n_2}{n^2} \left( \mu_1^2 -2 \mu_1 \mu_2 + \mu_2^2 \right) \\
&= \frac{n_1 n_2}{n^2} \left( \mu_1 - \mu_2 \right)^2
\end{align}

となります。この式はよく見かけますね。実際使うときもこの形が楽です。

 

全分散S^2 = S^2_b + S^2_wの導出

S^2_wについて式変換しておきます。

\begin{align}
S^2_1 &= \frac{1}{n_1} \sum_1 \left( x_i - \mu_1 \right)^2 \\
S^2_2 &= \frac{1}{n_2} \sum_2 \left( x_i - \mu_2 \right)^2 
\end{align}

から、

\begin{align}
S^2_w &= \frac{n_1}{n} S^2_1 + \frac{n_2}{n} S^2_2  \\
&= \frac{1}{n} \left[ \sum_1 \left( x_i - \mu_1 \right)^2 + \sum_2 \left( x_i - \mu_2 \right)^2 \right] \\
&= \frac{1}{n} \left[ \sum_1 \left( x_i^2 -2 \mu_1 x_i + \mu_1^2 \right) + \sum_2 \left( x_i^2 -2 \mu_2 x_i + \mu_2^2 \right) \right] \\
&= \frac{1}{n} \left[ \left( \sum_1 x_i^2 + \sum_2 x_i^2 \right) -2 \left( \mu_1 \sum_1 x_i + \mu_2 \sum_2 x_i \right) + \left( \mu_1^2 \sum_1 1 + \mu_2^2 \sum_2 1 \right) \right] \\
&= \frac{1}{n} \left[ \sum_{all} x_i^2 -2 \left( n_1 \mu_1^2 + n_2 \mu_2^2 \right) + \left( n_1 \mu_1^2 + n_2 \mu_2^2 \right) \right] \\
&= \frac{1}{n} \sum_{all} x_i^2 -\frac{1}{n} \left( n_1 \mu_1^2 + n_2 \mu_2^2 \right)
\end{align}

やっと準備が整いました。 

\begin{align}
S^2_w &= \frac{1}{n} \sum_{all} x_i^2 -\frac{1}{n} \left( n_1 \mu_1^2 + n_2 \mu_2^2 \right) \\
S^2_b &= \frac{1}{n} \left( n_1 \mu_1^2 + n_2 \mu_2^2 \right)  - \mu^2
\end{align}

から、

\begin{align}
S^2_b + S^2_w &= \\
&= \frac{1}{n} \sum_{all} x_i^2 - \mu^2 \\
&= \frac{1}{n} \left[\sum_{all} x_i^2 - n \mu^2 \right] \\
&= \frac{1}{n} \left[\sum_{all} x_i^2 - 2 n \mu^2 + n\mu^2 \right] \\
&= \frac{1}{n} \left[\sum_{all} x_i^2 - 2 n \mu \left( \frac{1}{n} \sum_{all} x_i \right) + n\mu^2 \right] \\
&= \frac{1}{n} \left[\sum_{all} x_i^2 - 2 \mu \sum_{all} x_i + \mu^2 \sum_{all} 1 \right] \\
&= \frac{1}{n} \left[\sum_{all} \left( x_i^2 -2 \mu x_i + \mu^2 \right) \right] \\
&= \frac{1}{n} \sum_{all} \left( x_i - \mu \right)^2 \\
&= S^2
\end{align}

やっとでました。

疲れたよもう 

ValueError : color kwarg must have one color per datasetで詰んだからメモ

エラーの備忘録

Seabornpairplotしたらエラーでグラフが表示されない

ValueError : color kwarg must have one color per dataset

 

コード

Import seaplot as sns

sns.pairplot(df)

いつもの流れ

 

エラー内容

 

ValueError : color kwarg must have one color per dataset

 

問題点

dfの列のデータタイプがobjectになっていた。

 

解決策

df = df.astype(np.float32)

で列のデータタイプを連続値に変換したらなおった

そりゃそうだ

seabornのバージョンが0.9.0だと起きる?

seaborn 0.8.0だとエラーは出なかった。

 

 

最弱リンクモデルとしてのワイブル分布の導出メモ

ワイブル分布は,ある鎖を考えたときに,鎖の最も弱い部分が壊れることで鎖全体が壊れると考えた最弱リンクモデルと見なせます.*1

このような説明がネットで検索すると見つかりますが,最弱リンクモデルの考え方がわかっても具体的に分布の形が導けない問題に当たったので,自分なりの分布の導出を書いておこうと思います.

ワイブル分布を導出してみよう

ワイブル分布の導出において,ある部品にかかる力は瞬間的にかかるのではなく,徐々に大きく負荷がかかって行くと考えます.そこで,確率密度関数PDFではなく,累積密度関数CDFに着目して導出を行います.

 

f:id:kazenoha:20180522234724p:plain

この図のように,Nこのリングからなる鎖に対して,xの力をかけることを考えます.

ここで,一つのリングが割れる確率をP(x)とします.

重要なのは,P(x)は,0からxまで徐々に大きな力をかけ続けたときの累積確率と定義するということです.

また,P(x)の形を以下のように仮定します.

\begin{align}
P(x) = 1 - \exp \left[ - \left( \frac{x}{x_0}\right)^m \right]
\end{align}

 グラフにすると以下のようになります.

f:id:kazenoha:20180523001318p:plain

f:id:kazenoha:20180523001327p:plain

xを大きくしていくと,P(x)は大きくなり,パラメータx_0,mによって,半減期のような形から,シグモイドのような形まで変化することがわかります.部品の故障に関するグラフとして適当であるような感じがします.

 

次に重要なこととして,

鎖はリングのうちどれか一つが壊れた時に破断すると仮定します.これは,「確かに」といった仮定ですよね.これを数学でモデリングすると以下のようになります.

鎖の破断する確率Q(x)は.全事象から全てのリングが壊れない時の確率を引いたものであるから

\begin{align}
Q(x) &= \mbox{(全事象)} - \mbox{(一つのリングが壊れない確率)}^N
&= 1 - (1 - P)^N
\end{align}

となります.

この式にP(x)の式を代入して

\begin{align}
Q(x) &= 1 -\exp \left[ - \left( \frac{x}{x_0}\right)^m \right]^N \\
&= 1 -\exp \left[ -N \left(  \frac{x}{x_0}\right)^m \right] \\
&= 1 -\exp \left[ - \left(  \frac{x}{x_0/\sqrt[m]{N}}\right)^m \right] \\
&= 1 -\exp \left[ - \left(  \frac{x}{n}\right)^m \right] \\
\end{align}

ここで,

\begin{align}
n = \frac{x_0}{\sqrt[m]{N}}
\end{align} 

と置きました. 

 これはワイブル分布の累積密度関数

\begin{align}
F(x) &= 1 - \exp \left[ - \left( \frac{x}{\alpha} \right)^{\beta}  \right]
\end{align}

ですね.

 

参考URL:

ワイブル分布ってなに?~高校数学でわかるワイブル分布~

http://sts-presents.com/STS01/shikujiri/wible/

 

ワイブル分布を使って故障率分析してみた

信頼度工学の分野でワイブル分布を使って部品の故障率を求める方法を学んだので残しておこうと思います.

ワイブル分布とは*1

出どころ

ワイブル分布は,ある鎖を考えたときに,鎖の最も弱い部分が壊れることで鎖全体が壊れると考えた最弱リンクモデルと見なせます.

転じて,部品の劣化や寿命のモデルとして使われることが多いみたいです.

 追記:

kazenoha.hatenablog.com

 

定義

ワイブル分布の確率密度関数PDF: f(x),累積分布関数CDF: F(x)は以下で定義されます.

 

\begin{align}
f(x) &= \frac{\beta}{\alpha} \left( \frac{x}{\alpha} \right)^{\beta - 1} \exp \left[ - \left( \frac{x}{\alpha} \right)^{\beta}  \right] \\
F(x) &= 1 - \exp \left[ - \left( \frac{x}{\alpha} \right)^{\beta}  \right]
\end{align}

 ここで \betaはワイブル係数(形状パラメータ), \alphaは尺度パラメータと呼ばれます.

また,故障率 \lambda (x)というものを定義できます.

 

\begin{align}
\lambda (x) = \frac{f(x)}{1 - F(x)} = \frac{\beta}{\alpha ^ \beta} x^{\beta - 1}
\end{align}

 

故障率の定義は,xを大きくして行ったとき,

\begin{align}
\lambda = \frac{x \mbox{ のとき故障する確率}}{\mbox{ある部品が}x\mbox{まで故障せず残っている確率}}
\end{align}

 となっており,あるx時点で故障していない部品を集めて,その中の部品が故障する確率であると言えます.

私たちの持っている故障率のイメージと大体あっていますね.

手順

用いるデータ

まず架空のデータを用意しました.

f:id:kazenoha:20180520154639p:plain

状況としては,ある部品を取り替えてから故障するまでの経過時間の記録が複数存在したのでヒストグラムにしてみた.という感じです.

つまり今回のワイブル分布の変数は x = t  (t:経過時間)ですね.

何がしたいのか

今回すべきことは,このデータに対して,適当なワイブル分布を当てはめることです.つまり,ワイブル分布において,変数を時間tとすると,

\begin{align}
f(t) &= \frac{\beta}{\alpha} \left( \frac{t}{\alpha} \right)^{\beta - 1} \exp \left[ - \left( \frac{t}{\alpha} \right)^{\beta}  \right] 
\end{align}

中の\alpha,\betaを動かして,f(t)がデータに最も適するような\alpha,\betaを求めることに相当します.

その後求めた\alpha,\betaを用いて,故障率

\begin{align}
\lambda (t) = \frac{f(t)}{1 - F(t)} = \frac{\beta}{\alpha ^ \beta} t^{\beta - 1}
\end{align}

が決まるので,故障率と時間の関係から,故障の原因や部品をどの周期で交換すれば一番ベストなのか,等の考察ができます.

やってみよう

ワイブルプロット

ワイブル分布をデータにうまいこと当てはめる技をワイブルプロットというらしいので,ここでも使ってみましょう.

まず,ワイブル分布の積分布関数CDFに着目します.

\begin{align}
F(t) &= 1 - \exp \left[ - \left( \frac{t}{\alpha} \right)^{\beta}  \right]
\end{align}

 ここで,先人が生み出した式変換を以下に紹介します.

\begin{align}
F(t) &= 1 - \exp \left[ - \left( \frac{t}{\alpha} \right)^{\beta}  \right] \\
1 - F(t) &= \exp \left[ - \left( \frac{t}{\alpha} \right)^{\beta}  \right] \\
\ln{ \left[ 1 - F(t) \right] } &= - \left( \frac{t}{\alpha} \right)^{\beta} \\
-  \ln{ \left[ 1 - F(t) \right] } &= \left( \frac{t}{\alpha} \right)^{\beta} \\
\ln{ \left[ \frac{1}{1 - F(t)} \right] } &= \left( \frac{t}{\alpha} \right)^{\beta} \\
\ln{\left[ \ln{ \left[ \frac{1}{1 - F(t)} \right] } \right]} &= \beta \ln{t} - \beta \ln{\alpha} \\
\end{align}

これは

\begin{align}
Y &= a X + b \\
Y &= \ln{\left[ \ln{ \left[ \frac{1}{1 - F(t)} \right] } \right]} \\
X &= \ln{t} \\
a &= \beta \\
b &= - \beta \ln{\alpha}
\end{align}

の形のなっていますね.

つまり,ワイブル分布中の\alpha,\betaをデータから求めるときは,最小二乗法を使えば良いことがわかります.

最小二乗法に関しては,前回の記事

kazenoha.hatenablog.com

を参考にしてみてください.

 

まあ具体的にやってみましょう.

まずデータを累積確率に変換します

f:id:kazenoha:20180521224348p:plain

 その後,このヒストグラムの縦軸F,横軸tを

\begin{align}
Y &= \ln{\left[ \ln{ \left[ \frac{1}{1 - F(t)} \right] } \right]} \\
X &= \ln{t} \\
\end{align}

に変換し,プロットし直します.

f:id:kazenoha:20180521230416p:plain

このデータに対して,最小二乗法を用いて,線を引くと...

f:id:kazenoha:20180521230528p:plain

このように,一次関数が現れますね.この一次関数をワイブルプロットと呼びます.

こうして

\begin{align}
Y &= a X + b \\
a &= 1.48 \\
b &= -2.65 
\end{align}

と求まったので,

\begin{align}
\beta &= a = 1.48 \\
\alpha &= \exp \left( -\frac{b}{\beta} \right) = 5.97
\end{align}

となります.

これでワイブル分布のパラメータ \alpha,\betaが求まったので,データのヒストグラムに求めたワイブル分布を重ねてみましょう.

f:id:kazenoha:20180521232714p:plain

それっぽい形でワイブル分布が求まってますね.

 

故障率も出してみましょう.

f:id:kazenoha:20180521232820p:plain

どうやら,部品は時間とともに故障率が高くなっていることがわかります.

このように,データにワイブル分布を仮定することで,部品の故障率の時間変化を推定することができました.

 

故障率について

故障率の定義

\begin{align}
\lambda (x) = \frac{f(x)}{1 - F(x)} = \frac{\beta}{\alpha ^ \beta} x^{\beta - 1}
\end{align}

をよく見ると,このグラフは\betaが1を境に大きく形を変えることがわかります.

f:id:kazenoha:20180521233434p:plain

ここで,今回求めた故障率はIFRのグラフに該当することがわかります.これは摩耗型故障といって,時間とともに故障率は大きくなっていくパターンとなります.

DFRは初期不良型故障といって,初期に故障率が高いですが,初期不良がない場合故障率は下がっていくことがわかります.

CFRは偶発型故障といって,特に傾向はなく,一定の故障率をとります.

 

このように,ワイブル分布を仮定して, \betaの大小を比較すれば,故障の原因が推定できて,対策を打つことができます.

例えば,

IFR型なら,早く交換する.

DFR型なら,早く交換しすぎるとまずいので,交換時期を長くする.

といった感じですね.

 \beta のバラつきについて

\beta標準偏差は,Nを標本数として,


\sigma_{\beta } = 0.79 \frac{\beta }{\sqrt{N}}

と知られています.

このバラつきを考慮して,グラフ化して見ると...

f:id:kazenoha:20180522000613p:plain

f:id:kazenoha:20180522000637p:plain

のようになります.この程度の標本数では,結構バラつくので,実際にワイブル分布を用いるときは注意したいですね.

まとめ

1.

ワイブル分布を用いることで,部品の故障の原因を推定するとともに,打つべき対策がわかる

2.

ワイブルプロットを行うことで,簡単にパラメータの推定が行うことができる.

3.

パラメータのバラつきも考慮して考察を行いましょう

  

Pythonで実際に行ったコードなどはまた今度まとめます...

 

最小二乗法の導出とイメージ

今回は最小二乗法について,Loss(損失関数,評価関数)を意識しながら説明をしていきます.

私が初めて最小二乗法を知った時,数式処理はわかったけど,何をやってるのかいまいちわからなくて,機械学習や統計としてもう一度学んだ時,なんとなくイメージができた記憶があります.ということで,私以外にも同じようなことで悩んでいる人がいる気がするので記事にしておこうと思います.

 

1.最小二乗法における仮定

下図のように,何かしらのデータ点を持ってきて,Excelかなんかで二次元のグラフ(散文図)にしたとします.この図ではデータ点を真の値として緑点で表しています.

f:id:kazenoha:20180515173418p:plain

ここで,真の値の傾向を察するに,あるyxに対してなんとなく一次関数の形で変化している気がします*1

これを数式で表すと,

 y = ax+b

の仮定をすることに相当します.

ここで,a,bは定数であり,yは一次関数を仮定した時のデータの予測値,tはデータ点であり真の値です.

データを一次関数で精度よく予測したいということは,うまいことa,bの値を決めてやることに相当します.できればデータ点を全て通るような線がひけるとベストですが,今回は一次関数を仮定しているのでデータの点の間を通るような線が限界な気がします.

 

あるモデル(今回は一次関数)から出力された予測値と真の値のズレを測る為に登場するのがLoss(損失関数)です.評価関数とも呼ばれます.

一般的に最小二乗法において定義するLossは予測値と真の値のズレ|t-y|を用いて,簡単に書くと以下のようになります.

 L = \frac{1}{2} (t - y)^2

ここで,LはLossであり,二乗することで,めんどくさい絶対値を外しています. \frac{1}{2}微分した時に計算が楽になるからつけておきます.

機械学習の分野では二乗損失だったり,Squared lossとか言われています.

正確にはデータの点が複数こあると仮定すると,

 L = \frac{1}{2} \sum (t_i - y_i)^2

となります.この式から,Lは予測と真の値のズレ|t-y|が小さくなるほど,言い換えるとモデルがうまくデータを予測できるようになればなるほど小さくなって行くことがわかります.

 

ここで,重要なのがL=L(a,b)であるということです.

つまり,

 L = \frac{1}{2} \sum (t_i - y_i)^2 = \frac{1}{2} \sum (t_i - (ax_i + b))^2 = L(a,b)

ですね.

混乱すると思うので重ねていうと,モデルが完成した時,a,bは定数ですが,モデル作成段階では変数です.

与えられているのはデータ点の組(y_i,x_i)であり,データ自体は変えられませんから(y_i,x_i)は定数です.

a,bをうまいこと決めてLを小さくすることで,より精度の良い一次関数モデルを作っていくというのが最小二乗法の考え方です.

 

モデルを作ろう

下図にLがa,bの値によって減少して行くイメージを載せておきます.本当はLはa,bの関数なので三次元のグラフになりますが,簡単のために二次元にしました.

f:id:kazenoha:20180515180136p:plain

 最初にa,bを適当に決めて,Lを計算した時,図内の初期値のところにいたとします.ここから,Lが小さくなるようにa,bを変化させてやると(このグラフではa,b,を4に近づけることに相当)いつかLが最小になることがわかります.

このLが小さくなるようにa,bを決めて行く過程は最適化や学習と呼ばれており,話がそれてしまうので,ここでは踏み込みません.

色々難しそうですが,実は最小二乗法の場合,Lの最小値=極小値であることが知られています.

つまり,

\displaystyle  \frac{\partial L}{\partial a}=0,\frac{\partial L}{\partial b}=0

の条件を満たすa,bを用いれば,Lossを下げるための難しい理論等を全く意識することなく,最小二乗法における最高精度のモデルが作れることを示しています.

 

初等最小二乗法の記事や教科書では,このようなLossを意識する説明が少ないと思いますが,一歩統計や機械学習の勉強に進む際には重要であると感じています.

あとは計算

ではゴリゴリ計算していきましょう.

\begin{align}
L &= \frac{1}{2} \sum (y_i - t_i)^2 \\
&= \frac{1}{2} \sum (ax_i + b - t_i)^2 \\
&= \frac{1}{2} \sum (a^2 x_i^2 + b^2 + t_i^2 + 2abx_i - 2bt_i -2ax_i t_i) \\
&= \frac{1}{2} \left(a^2 \sum x_i^2 + nb^2 +\sum t_i^2 + 2ab\sum x_i -2b\sum t_i -2a \sum x_i t_i \right)
\end{align} 

 ここで,

 \displaystyle \sum 1 = n

としました.

\displaystyle  \frac{\partial L}{\partial a}=0,\frac{\partial L}{\partial b}=0

から,

\begin{align}
\frac{\partial L}{\partial a} &= a \sum x_i^2 + b \sum x_i - \sum x_i t_i =0 \\
\frac{\partial L}{\partial b} &= nb + a \sum x_i - \sum t_i = 0
\end{align} 

であり,

\begin{align}
b &= \frac{1}{\sum x_i} \left( \sum x_i t_i - a\sum x_i^2 \right) \\
a &= \frac{1}{\sum x_i} \left( \sum t_i - nb \right)
\end{align} 

bについて,aを代入して,

\begin{align}
b\sum x_i &= \sum x_i t_i - a\sum x_i^2 \\
&= \sum x_i t_i -\frac{1}{\sum x_i} \left( \sum t_i - nb \right) \sum x_i^2 \\
&= \sum x_i t_i - \frac{\sum t_i}{\sum x_i} \sum x_i^2 + \frac{\sum x_i^2}{\sum x_i} nb\\
b \left( \sum x_i - \frac{\sum x_i^2}{\sum x_i}n \right) &= \sum x_i t_i - \frac{\sum x_i^2}{\sum x_i}\sum t_i \\
\frac{b}{\sum x_i} \left( n\sum x_i^2 - \left(\sum x_i \right)^2\right) &= \frac{1}{\sum x_i} \left(\sum t_i \cdot  \sum x_i^2 - \sum x_i \cdot \sum x_i t_i  \right) \\
\end{align}  

すなわち

\begin{align}
b = \frac{\sum t_i \cdot  \sum x_i^2 - \sum x_i \cdot \sum x_i t_i}{ n\sum x_i^2 - \left(\sum x_i \right)^2} 
\end{align} 

 

aについて,

\begin{align}
a \sum x_i &= \sum t_i - nb \\
&= \sum t_i - n \left( \frac{\sum t_i \cdot  \sum x_i^2 - \sum x_i \cdot \sum x_i t_i}{ n\sum x_i^2 - \left(\sum x_i \right)^2} \right) \\
a &= \frac{1}{ n\sum x_i^2 - \left(\sum x_i \right)^2} \cdot \frac{1}{\sum x_i} \left( n \sum t_i \cdot \sum x_i^2 - \sum t_i \cdot \left( \sum x_i \right)^2 - n \sum x_i^2 \cdot \sum t_i + n \sum x_i t_i \cdot \sum x_i \right)
\end{align} 

すなわち,

\begin{align}
a = \frac{n \sum x_i \cdot \sum t_i - \sum x_i \cdot \sum t_i }{n\sum x_i^2 - \left(\sum x_i \right)^2}
\end{align} 

まとめると,

\begin{align}
a &= \frac{n \sum x_i \cdot \sum t_i - \sum x_i \cdot \sum t_i }{n\sum x_i^2 - \left(\sum x_i \right)^2} \\
b &= \frac{\sum t_i \cdot  \sum x_i^2 - \sum x_i \cdot \sum x_i t_i}{ n\sum x_i^2 - \left(\sum x_i \right)^2} 
\end{align}  

となります.

 

まとめ

1,

最小二乗法ではLossの形が簡単なため,最適化手法などを意識することなく,Lossの最小値を解析的に求めることができる.

2,

Lossの形を二乗損失と仮定している.場合によっては自分の好きなようにLossを決められるので,同じ最小二乗法を用いていても仮定したLossによって異なる結果が得られる

3,

係数a,bの詳細な導出を頑張って書いたので参考にどうぞ 

 

一般化線形モデルとかはまた気が向いたら書こうと思います.

 

*1:教科書や記事によっては一般化線形モデルやら二次元正規分布を仮定しているやらありますが,ここでは難しいことは考えないこととします.

お久しぶりです.

コミケでサークル風の葉ブースにきてくてた方々.ありがとうございました.

今回は18/20部売ることができました!

f:id:kazenoha:20180318021305p:plain こんな本を売りました.

次回の夏コミにも申し込んだので行けるといいな...

 

現在もしっかり活動しています.

f:id:kazenoha:20180318023029j:plain

うどんくんは今,Deepanalyticsという機械学習コンテストサイトを使って勉強しています.

Deeplearningが楽しいとのことです.嬉しいことですな...

 

あと今年から,サークルを二週間に一回と位置付けて,サークルの日には講義マンがパワポを用意することにしています.

今回の風景がこちら!

f:id:kazenoha:20180318024128j:plain

コメダでサークルが夢だったのでやっと叶いましたね...

1時間半かけたパワポlatexも5分程度しか持たなくて悲しかったです.

 ちなみに今回のネタは,

バッチ学習

Dropout

重み減衰

重み上限

でした.

 

以上

今年もよろしくお願いします.

サークル活動一回目の記録(8月上旬)

講義マンです.

今回は記録もかねて,サークル活動一回目についてかいておこうと思います.

 

そもそもうどんくんと私、講義マンは幼馴染で、定期的に講義マン家に集まって、一緒にゲームやらなんかをするという会がかれこれ20年は続いてます.しかし、最近家で集まってやるゲームもなくなってしまって、集まってもやることないじゃんみたいな状況でした。

 

1.すべての始まり

ちょうどうどんくんが大学をひまそうにしているので、距離計をつくってほしいと依頼したのが始まりでした.

f:id:kazenoha:20171104175147j:plain

https://www.yupiteru.co.jp/products/golf_laser/agf-laser1/

↑こういうやつですね

 

うどんくんは高専で電子回路基板を勉強したらしいので、ちょうどいいし、私は化学工学が好きで、ちょうど化学機械の反応に対する装入物の分布の影響を考察していたので距離を測る装置が必要、全部辻妻が合うじゃん、二人で協力して、論文でもかこうじゃないかということです.

 

2.ちょうど大学にRaspberry pi 3売ってた

ちょうど大学に「らずべりーぱい」なるものがうってました.私は電子回路にあまり明るくないんですが、サークル立ち上げでお土産にするにはもってこいだと思って買ってみました

Raspberry Pi 3 Model B 1GB

https://www.kiwi-electronics.nl/raspberry-pi-3-model-b

3.ついに始まったサークル活動

 

f:id:kazenoha:20171104183917j:plainf:id:kazenoha:20171104191142j:plain

↑距離計一号機(実は0号機の画像がなかった)

基本的にうどんくんが電子工作をがんばり、私は化学機械から新しい課題を見つけることや、最近かじった機械学習を教えたり、こうしてブログを更新したりしてます.

 

4.距離計の仕様について

 

今回のサークルにて失敗したことと、進捗をまとめます

「失敗」

1.ラズベリーパイ買ったけど電源とマイクロSDはたまたモニターと接続するケーブル忘れた

 

これは困ったね.しょうがないからふて寝して次の日にエディオンいって買ってきたよね.ラズパイ含めて一万くらいかかったね

f:id:kazenoha:20171104203410j:plain

2.ブレッドボードかってないし、ジャンパー線ないじゃん!

 

そもそもなんやねんそれってかんじだったんですが、

ブレッドボードArduino(互換機)キット - ウインドウを閉じる

https://www.rt-shop.jp/index.php?main_page=product_info&products_id=1012

この白いボードと、カラフルな線のことみたいです.

たしかにさすだけで配線は楽そうですね.

 

3.進捗

距離系を用いて、一点の距離を測ることができました.

しかし、超音波センサーなので、指向性に難ありらしく、何回も図るとたまに意味わからん距離が出力されてしまうという問題点がでました。

これには次回取り組んでみようと思います.