File failed to load: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/extensions/TeX/AmsMath.js

January 29, 2009

PowerPoint 2008 の固定ガイドを使う

メニュー→表示→ガイド→固定ガイド ⌘+G

青い線が入り配置に役立つ。
optionを押しながらガイドをドラッグ&ドロップすると複数のガイドを作成できる。
消すときはドラッグして一番端に持っていく。一本のときは消えない。(正式なやり方かわからない)
commandを押しながらオブジェクトを移動するとガイドは無視。

Mactopia Japan : PowerPoint tips | 複数のガイドを使ってレイアウトを整える。
http://www.microsoft.com/japan/mac/officesolution/tips/powerpoint/09.mspx

Mactopia Japan - PowerPoint のオンラインヘルプ
http://www.microsoft.com/japan/mactopia/help.mspx?app=3&qu2=

January 22, 2009

Bloggerのタイトルを変更

Bloggerでのタイトルは「(名前) : (記事のタイトル)」がデフォルトだが、この順番やらを変更するにはレイアウトのHTMLをいじればいいらしい。

http://itfun.jp/2008/09/blogger_14.html

January 19, 2009

WordPressをローカルにインストールしたときに起きたエラー

Mac OS X Server 10.4.11にWordPress 2.6.1をインストールする方法
を参考にWordPressを入れた。

WordPressで、
Error establishing a database connection
というエラー。

phpMyAdminで、
#2002 - The server is not responding (or the local MySQL server's socket is not correctly configured)
というエラー。

いろいろ探したら、どうやらMySQL server version 5.1.30を新たに入れたために起こったエラーのようだ。
Leopardのデフォルトのphpのバージョンではソケットの場所を"/var/mysql/mysql.sock"としているのに対して、自分で入れたMySQLでは"/tmp/mysql.sock”という場所を使っている。

解決方法は、Mac OS X Server 10.4.4: Apache/PHP/MySQL の相互動作の機能強化の下半分を参考に。以下引用。

以下の手順に従って、以前の MySQL ソケットの場所を使うように PHP 構成ファイルを修正します。
  1. もしなければ、“/etc/php.ini”を作成します(このためには、“/etc/php.ini.default”を“/etc/php.ini”にコピーします)。
  2. “/etc/phi.ini”構成ファイルをエディタで開き、[MySQL] セクションにある以下の行、

    mysql.default_socket = /var/mysql/mysql.sock

    これを、以下のように変更します。

    mysql.default_socket = /tmp/mysql.sock

  3. Web サーバを再起動し、新しい PHP の設定を有効にします。このとき、MySQL を再起動する必要はありません。
その後、Mac OS X Server にプリインストールされている

/var/mysql/mysql.sock

を利用する MySQL のバージョンを使いたくなった場合は、

/etc/php.ini

ファイルから上の行を削除するか、または行の内容を元に戻してください。

January 15, 2009

Pythonで大規模疎行列計算

scipy.splinalg.eigen

scipy.sparse.linalg.eigen
になったのかな。

http://handasse.blogspot.com/2008/02/python-scipyarpack.html
http://projects.scipy.org/pipermail/scipy-svn/2008-February/001910.html

January 14, 2009

隠れマルコフモデルの例 その2

隠れマルコフモデルの例のつづき。

さて、たとえば、友人が初日に「散歩」二日目に「買い物」三日目に「掃除」という順で行動したら、その観測結果が得られる確率はいくらでしょうか、そして、このような観測結果が得られたとき三日間の天気はどのようであったでしょうか。前の疑問に対しては前向きアルゴリズム、後の疑問についてはビタビアルゴリズムを利用できます。(観測された事象系列を結果として生じる隠された状態の最も尤もらしい並びをビタビ経路と呼びます。)これらは、同じコードで実装することができます。以前のエントリーと同様、状態遷移図は次のように書けるとします。


まずアルゴリズムを理解するために初日に「散歩」したという情報のみがある場合を考えます。
初日の状態確率は(添字は何日目かを表すとします)

Pr(雨0)=0.6, Pr(晴れ0)=0.4

初日「雨」で「散歩」する確率は

Pr(雨0,散歩)=Pr(雨0)*Pr(散歩|雨0)=0.6*0.1=0.06

このとき次の日「雨」の確率は

Pr(雨0,散歩,雨1)=Pr(雨0,散歩)*Pr(雨1|雨0)=0.06*0.7=0.042

同様に初日「晴れ」で「散歩」して次の日が「雨」の確率は

Pr(晴れ0,散歩,雨1)=0.4*0.6*0.4=0.096

つまり初日に「散歩」して次の日が「雨」であるとき

Pr(散歩,雨1)=Pr(雨0,散歩,雨1)+Pr(晴れ0,散歩,雨1)=0.042+0.096=0.138

となります。Pr(雨0,散歩,雨1)<Pr(晴れ0,散歩,雨1) であることから、「晴れ→雨」であった可能性が高い、ということがわかります。

二日目が「晴れ」である場合についても計算すると「雨」「散歩」「晴れ」は

Pr(雨0,散歩,晴れ1)=0.6*0.1*0.3=0.018

「晴れ」「散歩」「晴れ」は

Pr(晴れ0,散歩,晴れ1)=0.4*0.6*0.6=0.144

つまり「散歩」して次の日が「晴れ」になるとき

Pr(散歩,晴れ1)=0.018+0.144=0.162

となり、また「晴れ→晴れ」でありそうだということがわかります。

これらを併せて考えれば、「散歩」をする全体確率は

Pr(散歩)=0.138+0.162=0.3

このときビタビ経路は「晴れ→晴れ」となります。

では初日に「散歩」、二日目に「買い物」した場合はどうなるでしょう。全体確率とビタビ経路を求めます。
初日に「散歩」したとき、二日目の「雨」である確率は0.138、「晴れ」である確率は0.162であるとわかっています。
また、「雨」に至るまでの尤もな経路は「晴れ→雨」、「晴れ」に至るまでの尤もな経路は「晴れ→晴れ」だとわかっています。


(つづく?)

Viterbi algorithm わかりやすくなってる!!!
→ 実装(コピペ)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Viterbi algorithm
# http://en.wikipedia.org/wiki/Viterbi_algorithm
#
# > python viterbi.py
# 0 1 2
# Rainy: 0.06000 0.03840 0.01344
# Sunny: 0.24000 0.04320 0.00259
# (0.01344, ['Sunny', 'Rainy', 'Rainy'])
# HMM
states = ('Rainy', 'Sunny')
observations = ['walk', 'shop', 'clean']
start_probability = {'Rainy': 0.6, 'Sunny': 0.4}
transition_probability = {
'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},
'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},
}
emission_probability = {
'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},
'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},
}
# Helps visualize the steps of Viterbi.
def print_dptable(V):
print " ",
for i in range(len(V)): print "%7d" % i,
print
for y in V[0].keys():
print "%.5s: " % y,
for t in range(len(V)):
print "%.7s" % ("%f" % V[t][y]),
print
def viterbi(obs, states, start_p, trans_p, emit_p):
V = [{}]
path = {}
# Initialize base cases (t == 0)
for y in states:
V[0][y] = start_p[y] * emit_p[y][obs[0]]
path[y] = [y]
# Run Viterbi for t > 0
for t in range(1,len(obs)):
V.append({})
newpath = {}
for y in states:
(prob, state) = max([(V[t-1][y0] * trans_p[y0][y] * emit_p[y][obs[t]], y0) for y0 in states])
V[t][y] = prob
newpath[y] = path[state] + [y]
# Don't need to remember the old paths
path = newpath
print_dptable(V)
(prob, state) = max([(V[len(obs) - 1][y], y) for y in states])
return (prob, path[state])
print viterbi(observations,
states,
start_probability,
transition_probability,
emission_probability)
view raw viterbi.py hosted with ❤ by GitHub