1/21 パターン認識(2),その他



試験について


前回の感想,質問より

Q.
align.rbの最初の部分について、
def g()
  -2
end
とギャップをゼロ変数関数として定義していますが、
g=-2
のように普通の変数として定義しては駄目ですか?
A.
ギャップの値はいろいろな関数で使われますが,変数の形で関数の外で
g=-2
と書くと,irbでloadした時に
irb(main):005:0> g
g
NameError: undefined local variable or method `g' for main:Object
        from (irb):5
        from /usr/bin/irb:12:in `
'
のように参照されないという問題があるので,教科書では定数関数として定義してます. ギャップの値を使うそれぞれの関数の最初に
g=-2
と書けば良いというのは確かですが,「-2」という値を書き換える必要が生じた時に,書き換える場所が分散しているのは避けた方が良いので,おすすめしません.
Q.
ロードができませんでした。なぜでしょう。
irb(main):1020:0> load("./align_rec.rb")
./max.rb:1: warning: else without rescue is useless
SyntaxError: ./max.rb:1: syntax error, unexpected tIDENTIFIER, expecting kDO or '{' or '('
endnd yxx,y)
                            ^
./max.rb:1: syntax error, unexpected kEND, expecting $end
endnd yxx,y)
                                                      ^
A.
http://lecture.ecc.u-tokyo.ac.jp/~ktanaka/is14/1029.html の2番めの質問と同じ原因(改行コードが「LF(Unix)」ではなく「CR(Mac)」になっている)と思われます.max.rb の改行コードを確認してみてください.
Q.
一致不一致ギャップのスコアによって人間的感覚にあうかどうかがだいぶ変わる気がした。しかしこれは個人によっても違うからしょうがないんだろう。
A.
「類似度」は「目的に合うかどうか」で定義されます.DNAの類似度はともかく,人間のパターン認識を真似ることを目的としたパターン認識では,今回の例の「ギャップのスコア」のようなパラメータを人間の認識結果を教師として調整する「教師あり(機械)学習」が用いられることが良くあります.この手の機械学習はGPS将棋などの強いコンピュータ将棋を作るのにも役に立っているので,興味をもった人は調べてみると面白いかもしれません.
Q.
一つ質問ですがrubyに010と入力してエンターを押すと8が返されるのはなぜですか?
irb(main):028:0> 010
=> 8
A.
良く気がつきましたね.Ruby言語(や他のいくつかの言語)では,0で始めると 8進数だとみなして解釈します.したがって,010は 1 * 8**1 = 8, 0170は 1 * 8**2 + 7 * 8 ** 1 = 64 + 56 = 120 になります.他に,以下の様な入 力もできます.
irb(main):014:0> 0b1100 # 2進数
0b1100
=> 12
irb(main):015:0> 0x8a   # 16進数
0x8a
=> 138
irb(main):016:0> 0o70   # 8進数の別の表記
0o70
=> 56

前回の課題について


投票システム

vote.rbをダウンロードして,ホームディレクトリに保存してください.ドックからターミナルを起動して,
ruby vote.rb 選択肢番号
のように使います.

今日の練習,投票


教科書の補足


今日の課題