Sunday, December 30, 2012

statistic modeling: EM algorithm example with 1D mixed normal distribution

EMアルゴリズムの実装。

PRMLでは2次元の正規分布を例として扱っている。

この式は\frac{1}{(\sqrt{2\pi})^m \sqrt{|S|}}\exp\!\left(-\frac{1}{2}(\mathbf{x}-\boldsymbol{\mu})^{T}S^{-1}(\mathbf{x}-\boldsymbol{\mu})\right)

が、ここではよりシンプルにするためにx軸のみ、つまり1次元のものを使う。

この式はf(x)=\frac{1}{\sqrt{2\pi\sigma^{2}}} \exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2} \right)


コードは以下のようになった。

# -------------------------------------------------
#  descripton
#     name : 1d normal distribution
# -------------------------------------------------

# ***********************
#   sub functions
# ***********************

# normal distribution
# same as dnorm() but using var instead of sd
normDist <- function(X,mu,vari) {
 1/sqrt(2*pi*vari)  *  exp( - (X-mu)^2 / (2*vari) )
}

# log liklifood (posterior probability)
logLikelihood <- function(X, mu, vari, Pi, K)
{
  Sum <- 0.0
  N <- length(X) # number of data
  for(n in 1:N)
  {  
    tmp <- 0.0
    for(k in 1:K)
    {
      tmp <- tmp + ( Pi[k] * normDist(X[n],mu[k],vari[k]) )
      # Note: "log" computes natural logarithms
    }
    Sum <- Sum + log(tmp)
  }

  return(Sum)
}


# ***********************
#   main computation
# ***********************

# -----------------------
#   Prepare data
# -----------------------
# load Old Faithful dataset, and normalize
data("faithful");
xx <- scale(faithful, apply(faithful, 2, mean), apply(faithful, 2, sd));
X <- xx[,1] # take only the first column this time.
X <- scale(X) # normalize, so that mean is 0 and var is 1. (why necessary?)
N = length(X)

# nb of distribution
K <- 2

# initialize the parameters
mu <- 0
# Note: vari <- mat.or.vec(1,K) can make zero matrix but in R 
# increasing the array length in loops is OK, so it is not necessary 
# to write like this.
increment <- 2/(K-1) # 2 is from 1 - (-1)
for(k in 1:K)
{
  # separately distribute between (-1, 1)
  mu[k] <- -1 + increment*(k-1)
}

vari <- 0
for(k in 1:K)
{
  # set to 1 for all distribution
  vari[k] <- 1
}

Pi <- 0
for(k in 1:K)
{
  Pi[k] <- 1/K
}

# for analysis
mu_initial <- mu
Pi_initial <- Pi

# prepare responsibility
resp <- mat.or.vec(N,K)

# compute initial log likelihood
like <- logLikelihood(X, mu, vari, Pi, K)

# initialize
likearray <- 0

nbIteration <- 1
while(1)
{
# -----------------------
# E-step:
#   compute the responsibility with the current parameters
# -----------------------
for(n in 1:N)
{
    # prepare denominator
    denominator = 0
    for(k in 1:K)
    {
     denominator <- denominator + Pi[k] * normDist(X[n], mu[k], vari[k])
    }

    # compute responsibility
    for(k in 1:K)
    {
     resp[n,k] <-  Pi[k] * normDist(X[n], mu[k], vari[k]) / denominator
    }
}

# -----------------------
# M-step:
# recompute the parameters with the computed responsibility.
# -----------------------

# initialize
mu_new <- 0
vari_new <- 0 
Pi_new <- 0

for(k in 1:K)
{
  # compute Nk
  Nk <- 0.0
  for(n in 1:N)
  {
    Nk <- Nk + resp[n,k]
  }
                                          
  # recompute mean
  mu_new[k] <- 0.0
  for(n in 1:N)
  {
    mu_new[k] <- mu_new[k] + resp[n,k] * X[n]
  }
  mu_new[k] <- mu_new[k]/Nk
  
  # recompute variance
  vari_new[k] <- 0.0
  for(n in 1:N)
  {
   vari_new[k] <- vari_new[k] + resp[n, k] * (X[n]-mu_new[k])^2
  }
  vari_new[k] <- vari_new[k]/Nk                                        
  
  # recompute mix ratio
  Pi_new[k] <- Nk/N
}   


# -----------------------
# judge of convergence
# -----------------------
like_new <- logLikelihood(X, mu_new, vari_new, Pi_new, K)
Diff <- like_new - like

# debug
likearray[nbIteration] <- like 

like <- like_new
mu <- mu_new
vari <- vari_new
Pi <- Pi_new

#if(nbIteration == 20)
if(Diff < 0.01)
{ 
  # print
  cat("nb of iteration", nbIteration, "\n")

  for(k in 1:K)
  {
  cat( "**** distribution", k, "****", "\n") # paste() is not necessary
  cat( "mean: ", mu[k], "\n")
  cat( "variance: ", vari[k], "\n")
  cat( "pi: ", Pi[k], "\n", "\n")   
  }
  break
}

nbIteration <- nbIteration + 1
} # close "while(1)"



# ***********************
#   Dispaly
# ***********************

# -----------------------------------
#   likelihood conversion bihavoir
# -----------------------------------
windows()
plot(likearray, type="o")
title("likelihood bihavoir")

# -------------------------------------------------------
#   original data and the estimated mixed distribution
# -------------------------------------------------------
windows()
hist(X, breaks=seq(-3,3,0.2), xlim=c(-3,3), ylim=c(0,1), freq=FALSE, 
      main="", xlab="", ylab="")
a <- seq(-5,5,length=1000)
for(k in 1:K)
{
par(new=T)
plot( a, dnorm(a, mu[k], sqrt(vari[k]))*Pi[k], xlab="", ylab="",
      xlim=c(-3,3), ylim=c(0,1), type="l", col=k+1)
}
title(main="data and estimation", xlab="x", ylab="density")

(Rのコンソールに直接張り付ければ良い)

結果は



nb of iteration 14
**** distribution 1 ****
mean:  -1.286364
variance:  0.04316987
pi:  0.3488136

**** distribution 2 ****
mean:  0.6890519
variance:  0.1457242
pi:  0.6511864

log likelihood収束のようす



  • 初期値の影響
Piの初期値が悪い(見た限りたして1以上になる場合)と、最初のiterationでは尤度は下がり、収束条件に引っかかってしまう。

muの初期条件で、十分に離れているものをとると、尤度は単調に増加し、早く収束する。(ここではPiは0.5, 0.5としている)
左: 0.979, 0.011
右: 0.516, 0.861
わかるように、muは均等に配分することで、ずっと早く収束する(コード参照)。


c( rnorm(400, 10, 2), rnorm(100, 2,1) )

  • 参考サイト
Pattern Recognition and Machine Learning: Data Sets
Example 8.41: Scatterplot with marginal histograms (function of the plot with histogram)
R: 24. apply() ファミリー(このせつめい十分)
多変量正規分布(pdf)
混合ガウスモデルとEM(コードはこれをもとにした)
EMアルゴリズム答え合わせ(こちらも少し参考に)
EMアルゴリズムによる混合分布のパラメーター推定の解析計算&実装例 from 「Rによるモンテカルロ法入門」(下のリンクとスライドを参考にした)
都市生活学・ネットワーク行動学研究室のPRML合宿2009(良く見ていないがまとまっていそう)
PRML 読書会 #12 9章 EMアルゴリズム&10章 変分ベイズ(下に英語pdfリンク)


Friday, December 28, 2012

Statistic modeling : EM algorithm

モデルの推定方法-EM algorithmの部分についてのまとめ。(サイトからのつぎはぎ)

ある確率変数 X = {Y , Z} があり,その一部 Y のみが観測でき,残り Z (=潜在変数。下に説明)は観測できない状況を考える.観測データ {y1, y2, . . ., yT } が得られたときに,確率モデル p(x; θ) = p(y, z; θ)のパラメタ θ を推定したいとする(取り扱っている分布が、混合ガウス分布であればθはμ,Σ,πの3つ)。パラメータは、Xの分布からして、最もよさげなもの、というふに考える(最尤法)。p(y; θ) =∫p(y, z; θ)dz


最尤推定値を数値計算で求める代表的な方法
1.ニュートン・ラプソン法
2.Fisherのスコア法
3.EM algorithm

とあるが、Zの存在のために、これが簡単に解けず、EMアルゴリズムを使う(1や2では無理?)。モデルが混合分布でない場合は、このサイトで示しているように、反復なしで解がもとまる。


ステップ0.尤度関数をつくる
最初に、現象を式で表す必要がある。
観測された現象の起こる確率、イコール、観測されたデータについての尤度関数Lをつくる。

Given a statistical model consisting of a set \mathbf{X} of observed data, a set of unobserved latent data or missing values \mathbf{Z}, and a vector of unknown parameters \boldsymbol\theta, along with a likelihood function L(\boldsymbol\theta; \mathbf{X}, \mathbf{Z}) = p(\mathbf{X}, \mathbf{Z}|\boldsymbol\theta), the maximum likelihood estimate (MLE) of the unknown parameters is determined by the marginal likelihood of the observed data
L(\boldsymbol\theta; \mathbf{X}) = p(\mathbf{X}|\boldsymbol\theta) = \sum_{\mathbf{Z}} p(\mathbf{X}, \mathbf{Z}|\boldsymbol\theta)
However, this quantity is often intractable(解決困難)[citation needed].
The EM algorithm seeks to find the MLE of the marginal likelihood by iteratively applying the following two steps:


ステップ1.E step
Eステップでは、完全データの対数尤度関数ln p(X, Z|θ)の期待値を計算する。 最初の試行ではθに初期値を与える必要がある。また、この期待値を計算するために、潜在変数の事後分布p(Z|X, θold)を用いる。

対数尤度関数の期待値、という概念が分かりにくいので、追加説明。
確率論において、確率変数の期待値とは確率と確率変数を掛けた総和を取ったものである(高校数学)。ここでは、確率変数がln p(X, Z|θ)であり、その確率変数が出る確率が、p(Z|X, θold)となる。

wikiでは、
1/ Expectation step (E step): Calculate the expected value of the log likelihood function, with respect to the conditional distribution of \mathbf{Z} given \mathbf{X} under the current estimate of the parameters \boldsymbol\theta^{(t)}:
Q(\boldsymbol\theta|\boldsymbol\theta^{(t)}) = \operatorname{E}_{\mathbf{Z}|\mathbf{X},\boldsymbol\theta^{(t)}}\left[ \log L (\boldsymbol\theta;\mathbf{X},\mathbf{Z})  \right] \,
となっているが、

この表現よりもPRML(equation 9.30, p156)の方が分かりやすい。つまり、

Q(θ, θold) = Σ p(Z|X, θoldln p(X, Z|θ)


ステップ2.M step
Mステップでは、E ステップで求まった尤度の期待値を最大化するようなパラメータを求める。 M ステップで求まったパラメータは、次の E ステップで使われる潜在変数の分布を決定するために用いられる。
具体的には、θ偏微分した式イコール0となる等式を解く。

2/ Maximization step (M step): Find the parameter that maximizes this quantity

\boldsymbol\theta^{(t+1)} = \underset{\boldsymbol\theta}{\operatorname{arg\,max}} \ Q(\boldsymbol\theta|\boldsymbol\theta^{(t)}) \,  


*不完全データ(または隠れ変数、潜在変数)
通常Zで表す。
一般的にZとは、観測できている確率変数Xと区別される、観測できてない確率変数(XとZは対等)。とくに混合分布では、あるデータがどの分布に属するかという情報(ここではとりあえずこの意味に限る)。この場合、zは各xに与えられるK次元ベクトル(Kを分布の数)で、データxがどのガウス分布から生成されたかを表す。属する分布番号のみ1、他は0。

例1.2 次元の正規分布が 6 つ重なった正規混合分布を例に考えよう.この確率分布からデータが得られているとする.この場合,出力されるデータのみからはどの正規分布によって出力されたかが分らない.すなわち,どの正規分布から出力されたかという情報は観測できない.この「どの正規分布から発生したか」という情報が隠れ変数となる.正規混合分布の場合は隠れている確率変数は離散的な確率変数である.


例2今、何カ国かの男性の身長データのサンプルがN個混在してあります。ただし、N個のデータはすべて、どの国の男性の身長データなのか分かっていません(不完全データ)。このとき、EMアルゴリズムを用いて、「何カ国のデータが混在しているのか※1」と、「各国の身長の平均値と分散※2」を同時に求めたいのですが、・・・(省略)



  • 参考本(つぎはぎ元)

パターン認識と機会学習(下) Pattern recognition and machine learning
図解 ベイズ統計学
  • 参考サイト(つぎはぎ元)
多くのサイト(とくにpdfでないもの)はPattern recognition and machine learning (PRML)の9.2章をかみ砕いて解釈したもの、またはそれをコードで実装したもの。

- 説明
対数尤度と最大対数尤度(◎ 対数尤度の説明がスマート。pdf)
最尤推定値を数値計算で求める代表的な方法(あまり丁寧ではない。数式。pdf)
隠れ状態最尤推定と反復解法(◎丁寧な数学的説明、直感的イメージ。pdf)
wikipedia (english) (上の英語の部分)
wikipedia (japanese)

- シンプルな分布の例(M stepが単純)

- コード付き例
混合正規分布でy=ax+uのモデルの場合の最尤法
混合ガウス分布Sage(PRMLに沿って)
『計算統計学の方法 』読書ノート;EMアルゴリズムの練習問題(入門編)(Zは潜在変数ではなく、欠損値なのでシンプル。実際的な数式。)
混合ガウスモデルとEM(PRMLに沿って。解説が丁寧)
EMアルゴリズムによる混合分布のパラメーター推定の解析計算&実装例 from 「Rによるモンテカルロ法入門」(リンクが良い。pythonで実装。ヒストグラム)

- 数学

- その他
混合分布問題(混合分布推定のレビュー)


Wednesday, December 26, 2012

Statistic modeling : introduction

Statistic model(確率モデル)の推定の代表的手順。

1.モデルの推定 : EM algorithm を使う。このとき、パラメータの数を与える必要がある。
2.モデルの評価 : BIC を使う

混合数を低い値から始めて、徐々に増加させていきながら、EMアルゴリズムでモデルを推定し、そのBICの値を計算します。

1.モデルの推定
EMアルゴリズムは反復法の一種であり、期待値(英語expectation, E) ステップと最大化 (英語maximization, M)ステップを交互に繰り替えすことで計算が進行する。 観測不可能な潜在変数に確率モデルが依存する場合に用いられる。Eステップでは、現在推定されている潜在変数の分布に基づいて、モデルの尤度の期待値を計算する。 Mステップでは、E ステップで求まった尤度の期待値を最大化するようなパラメータを求める。 M ステップで求まったパラメータは、次の E ステップで使われる潜在変数の分布を決定するために用いられる。
Wiki (jp)

2.モデルの評価
さて、情報量規準といっても様々なものがあるが、多くの教科書で取り上げられているように、赤池情報量規準(AIC)とベイジアン情報量規準(BIC)がもっとも頻繁に使われているものである。この二つの情報量規準の定義は、以下のように与えられる。
AIC=T*log(s2)+2*K,   BIC=T*log(s2)+K*log(T).
ただし、Tは標本の大きさ、s2はモデルの誤差項の分散推定量で、Kはモデルに含まれる係数の数である(教科書によっては、両辺をTで割って定義することもある)。すなわち、様々なモデルを最小2乗法で推定し、その残差から分散推定量s2が得られれば、AICやBICは簡単に求めることができ、情報量規準を最小化するモデルを選択してやればよいのである。

情報量基準はEMアルゴリズムとだけではなく、k-means法とも使われている。ここここで紹介されているように、これをx-means法とよぶ。


  • 参考サイト

モデル選択とその周辺(統計モデルのレビュー。AICやbootstrapにも言及。 pdf)

統計学におけるモデル―情報量基準の観点から―(◎モデル選択のレビュー。BIC, AICについて。pdf)
ベイズ情報量規準(概要)
尤度とAIC(タイトルのまま)

Friday, July 20, 2012

利益の種類

a) 売上 revenue
自社の本業で販売した商品・サービスの売上金額
$40 billion 


b) 売上原価 sales cost
販売した商品の仕入れ金額。
製造業の場合は、材料費や工場の人件費、それ以外の工場で製品を作るのにかかった原価として、製造原価がこれに相当します。


c) 売上総利益 gross operating income
a) - b)。=粗利益。


d)販売費 および 一般管理費
商品を販売するための営業活動にかかった経費や、会社の運営を管理するためにかかった経費の総称のこと。人件費や広告宣伝費、事務所の家賃などがここに該当します。


e)営業利益 operating income
c) - d)。
$6.3 billion 


f)営業外損益 Non-operating Profit and Loss
本業以外に発生した収入や損失、金融機関との取引で発生した利息(受取利息・支払利息)や配当金。

g)経常利益 Ordinary Profit
e) - f)。


h)特別利益 Extraordinary Profit
臨時的に発生した取引で生まれる利益や損失。


i)税引前当期純利益 Net income before tax
g) - h)。


j)法人税等 Tax
国への法人税、都道府県への住民税、事業税など。


k)当期純利益 Net income
i) - j)。最終利益。
$5 billion 
50億ドル


Other Japanese companies - http://www.ullet.com/search/ranking/301.html
Worldwide - http://ycharts.com/rankings/net_income?p=1&s=calc&d=asc


Reference:
「会社の数字が面白いほどわかる本」
http://goodjob.boy.jp/chirashinoura/id/138.html

Sunday, June 24, 2012

Starting Python

Python can be considered as the same kind of programming environment as MATLAB and R. This is FREE tool and it provide MATLAB-like matrix computation. The following step shows how to install this software.

[1] Install Python
Download the latest python from http://www.python.org/ and install it. You'll see




IDLE (Python GUI) is the same as the MATLAB and R interface. By default, the interface is only shell mode and the editor (functionality to create, edit, save the program) doesn't appear. You need to change a setting: Option > Configure IDLE > General > Startup Preferences --- "Open Edit Window". Click "ok" and restart the IDLE, then you'll see the plain editor.



[2] Install scientific modules (SciPy, NymPy, PyLab)
This is optional but necessary for mathematical use of python. Each module can be downloaded and installed from official site. Many sites are saying that you need to compile after downloading it but now this seems not necessary. The building part is done automatically.
Note that this step can be done automatically by installing python with scientific modules in [1] step.

In addition to these 3 modules, I downloaded "learn" from Scikit (http://scikits.appspot.com/learn) to run the example code. Then, to run this  http://pypi.python.org/pypi/setuptools#downloads

[3] Install editor
The built-in editor seems to be too simple. There seems to be no official better editor, but several editors can be found on the internet. Emcas will be the best but the first setting can be complicated. I chose PyScripter. I don't compare all the script editors available, but this is already good and seems enough.



[4] Run run the example code.
em, a python package for Gaussian mixture models (PDF)
This is the same as this blog http://www.ar.media.kyoto-u.ac.jp/members/david/softwares/em/

This has not been working yet....

Thanks - reference.
(Python) http://www16.plala.or.jp/hiyokogumi/8/801.html
(Science modules) http://d.hatena.ne.jp/r_e10/20100514/1273853687
(pkg_reseources) http://packages.python.org/distribute/pkg_resources.html

Wednesday, May 23, 2012

Leak of technology

Leak of technology - Dilemma without magic bullets
http://business.nikkeibp.co.jp/article/topics/20120518/232279/?P=2

Leak of technology is one of the most critical problem in the industry.
There are 5 cases where technology can leak.
1. Mistake (non-intentional)/ Leak (intentional) of employees.
2. Job changes of employees.
3. Incomplete agreements between companies and employees.
4. Mistake (non-intentional)/ Leak (intentional) from the company that had offered technical service.
5. From the information of the manufacturing machines.

Saturday, April 14, 2012

Insurance Card - Carte Vitale



Life Card:
http://www.lifecard.co.jp/card/service/kaigai/lifedesk/4_03.html#kyoten


List of ATM of insurance in Paris
http://www.evous.fr/Assurance-maladie-de-Paris-toutes,1111713.html

Boston info.


Discount store in US
http://www.rossstores.com/
http://www.marshallsonline.com/
http://www.target.com/


Visiting guide from hub.
http://www.boston.com/travel/boston/
http://www.tripadvisor.fr/Attractions-g60745-Activities-Boston_Massachusetts.html
http://www.tripadvisor.fr/Attractions-g60890-Activities-Cambridge_Massachusetts.html

Fixed-term deposit in France

As my credit card was in my stolen wallet, I had to freeze the card and reorder one. The new one has arrived recently at my closest bank office, so I went to pick it up this morning.

THEN, as there are certain amount of deposits in my ordinary deposit account (Compte depôt), I was advised to put some money to their fixed-term deposit and I followed the advise (I have been receiving a call from the bank for this even before).

There are several deposit types, but what I used to be using was only the ordinary deposit.
  • Compte depôt - ZERO interest

The banker advised me to mix of the following two types besides the ordinary one.
  • Livret developpement durable (LDD) - 2.25% / year interest, ceiling 6000 euros
  • Plan d'Epargne logement (PEL) - 2.5%  / year interest, minimum desposit 225 euros, minimum monthly deposit 45 euros. Ceiling 61200 euros.

There is no "freezing" for taking them back, this can be done even online. The interest is added at every beginning of the year. Having several accounts would also be good from security point of view.


PEL: offers mortgage (loan when buying the main residence) with fixed rate (this seems to be the advantage, because http://allabout.co.jp/gm/gc/10548/), after a minimum of 3 years. The rate is fixed at the moment of the subscription. The more money you save, the more the possibility of the amount of the loan is.


----------------------------------------------
(info available from LCL site after log in)

■ QU’EST-CE QUE C’EST ?
Le Plan Épargne Logement (PEL) est un placement à versements réguliers bénéficiant d’un taux d’intérêt garanti. Il permet, après une phase d’épargne, d’obtenir un prêt épargne logement à un taux prédéfini, en vue de financer votre résidence principale (acquisition, construction, travaux). 

■ POURQUOI SOUSCRIRE ?
•Le PEL cumule à la fois les avantages d’un produit d’épargne garanti et les avantages d’un prêt épargne logement dont le taux est connu à l’avance.
•Plus vous épargnez, plus vous augmentez votre possibilité d’emprunt.

Pour la phase d’épargne :
•Votre capital et le taux de rémunération à la souscription sont garantis pendant toute la durée de votre contrat.
•Le PEL offre une capacité d’épargne jusqu’à 61 200 €, hors intérêts cumulés.
•Vous pouvez modifier le montant et la périodicité de vos versements réguliers. Vous pouvez aussi effectuer des versements exceptionnels.
•Vous pouvez disposer de votre épargne en cas de besoin. Le retrait des capitaux épargnés est gratuit. Il entraîne néanmoins la fermeture du PEL. Avant 4 ans, la rémunération et les droits à prêt sont réduits.
•Les intérêts sont exonérés de l’impôt sur le revenu pendant les 12 premières années. Ils sont soumis chaque année aux prélèvements sociaux.

Pour la phase d’emprunt :
•Après une phase d’épargne d’au minimum 3 ans, vous pouvez effectuer une demande de prêt épargne logement (1). Le recours au prêt suppose alors l’étude préalable et l’acceptation de votre dossier par LCL. 
•Le taux du prêt est fixé au moment de la souscription du PEL. Un crédit vous engage et doit être remboursé. Vérifiez vos capacités de remboursement avant de vous engager.

Thursday, January 5, 2012

Father's recommendation


「都市の論理」羽仁 五郎
「愛するということ」(The art of love) Erich Fromm