機械学習コース 線形回帰 (Linear Regression)

http://www.ml-class.org/
ビデオが細切れなのと、わからなかったら見返せるのがいいね。すでにぶっ通しでやり続ける忍耐力がない…。

■ Model Representation
Hypothesis:

■ Cost Function
コスト関数:
2乗誤差を最小にするθ0, θ1を求める

■ Cost Function - Intuition I
θ0を0に固定してθ1だけの関数として、(1,1), (2,2), (3,3)のデータに対して手で計算してθ1を求める。

■ Cost Function - Intuition II
グラフを使って説明

■ Gradient Descent (最急降下法)

  • 収束するまで続ける

    • j=0とj=1について
    • 同時に更新する
  • θの初期値によって異なる点に収束する
  • α: learning rate
  • 偏微分項は次のビデオで説明する

■ Gradient Descent Intuition

  • また、θ0は無視してθ1の1変数の場合で説明
  • αは固定でもlocal minimalに収束する
    • ステップを進めるにつれてαを小さくする必要はない

■ Gradient Descent For Linear Regression


  • "Batch" Gradient Descent: 全てのデータを使う
  • 反復なしで求める方法もある

スタンフォードの機械学習コース イントロ

Machine Learning | Coursera 公開されたので、ビデオを見てみる。

■ What is Machine Learning?

  • 2つの大きな分類:教師あり学習と教師なし
    • 他に、強化学習とかレコメンデーションシステムとかあるけど、後で
  • 機械学習を実際の問題への適用方法も教える

■ Supervised Learning

  • 例:家の価格を予測する
  • データは、平米数と販売価格のセット
  • 予測するには、フィットする直線を求めて、それによって販売価格を予測したい家の平米数に対応する価格を得る
    • 直線じゃなくて、フィットする二次曲線を求めることもできる
  • 実際に売買された家の平米数と価格のデータセットから、正しい答えを導く
  • regression problem(回帰問題): 連続した値の予測をする
  • 別の例:医療データから乳がんが悪性かどうか判定する
    • 腫瘍の大きさから悪性か悪性でないかの二値に分類(Classification)する
  • 特徴は1つだけじゃなくて、例えば腫瘍の大きさと年齢から悪性かどうか判定
    • 直線で分割
    • 特徴は無限に扱える

■Unsupervised Learning

スタンフォードのDBコース イントロ

http://www.db-class.org/

  • Database Management System (DBMS)
  • Massive, Persistent, Safe, Multi-user, Convenient, Efficient, Reliable
  • Key Concept:
    • Data model: records, xml, graph
    • Schema and data: types and variables
    • Data Definition Language (DDL)
    • Data manipulation or query language (DML)
  • Key people:
    • DBMS implementer: Builds system
    • Database designer: Establishes schema
    • Database application developer: Programs that operate on database
    • Database administrator: Loads data, keeps running smoothly

「代替医療のトリック」読書感想文

代替医療のトリック
代替医療のトリック
posted at 11.09.27
サイモン シン エツァート エルンスト
新潮社
売り上げランキング: 17711

サイモン・シンの本が出ていたのをずっと見逃していた。
ホメオパシーとか鍼とかカイロプラクティックとかが実際に効果があるのかについて書かれた本。検証については科学的に、「よくなった気がする」とかじゃなくてちゃんと検証する。その際には、二重盲検法という、患者にはもちろん、医者にも実際の薬か偽薬かを秘密にして効果を確かめるのが重要だそうで。患者がわかってしまうとプラセボ効果が、医者が偽薬かどうか知っていると観測者バイアスがかかってしまうもしくは察しの良い患者が気づいてしまう可能性があって、結果が歪められてしまうおそれがある。これらを取り除いた結果優位な差があれば、初めて科学的に効果が実証されたということになる。
初めに昔の医療について、昔は瀉血といって皮膚を切ったりヒルに吸わせたりして悪い血を出して病気を治そうとしてたとかいう話で、医者に見せると逆に悪くなって最悪死ぬという、ひどい状況だったらしい。主流な治療法で19世紀頃まで普通に行われてたとかいうのを知って唖然とした。もっとこう、科学って段階的に着実に進歩してきたのかと思ってたので。
ナイチンゲールが統計情報を使って、衛生状態の工場が生存率を高めることを裏付けたとか。タバコと肺ガンの関係性の立証とか フィッシャーと喫煙と肺がんと - counterfactualの日記。あとは、プラセボ効果は実際にすごい効果があるよ!という話とか。ホメオパシーは、毒成分を取り入れることで逆に体制によって回復を促す?的な考えだけど、百倍希釈を30回=100^30倍に薄めると元の成分残ってませんとか、何を言っているのか分からねー(
本編はまあ、そこそこ面白い、けど結論ありきなように感じてしまうこともない。実際に効果があるんだったら結局本当の医療として取り入れられるはずなので、だから代替医療なんだっちゅうことで。

健康はいつの世でも万人の願い、ってことで動く金も大きいだろうから注目度も高い、けどみなさん自分の立場によってポジショントークだか本当にそう思ってるのか願ってるのか、日本でもアメリカでもいろいろ意見があって面白い。

秘書問題

秘書問題で、一番能力が高い候補者を獲得できる割合のグラフ

n/e人を無条件で見送って、その後今まで以上の候補者を獲得するのがベストとのこと。最高の候補者を獲得できる確率も100/e%ってのが面白いね。

一番能力が高い人じゃなくて、獲得できる能力の期待値のグラフ

引越し先の選び方 @ val it: α → α = funに書いてあるように、√n人を無条件で見送って、その後今まで以上の候補者を獲得するのがベストっぽい。グラフによれば91点くらいの能力の人を取れる見込み。
一番能力が高い人を取れる確率が一番高い場合が、期待値的には最大ではないのは面白い。

続きを読む

マルコフ作文2

「圧縮新聞」を作った - phaの日記には「4単語の連なりを1セットとして記録しています」と書いてある。前の状態にだけ依存するのがマルコフ連鎖っていうらしいので変わってしまうけど、その方がもっともらしい文章になりそうなのでやってみる。
前回のは品詞を考慮してなかったのと、行末の扱いがちゃんとなっていなかった。

#!/usr/bin/ruby -Ku

require 'MeCab'

def create_chain_n(f, num)
  begin
    c = MeCab::Tagger.new(ARGV.join(" "))

    chain = Hash.new {|h, k| h[k] = Hash.new(0)}
    prev = []
    while f.gets()
      n = c.parseToNode($_.chomp + '$')
      while n
        info = n.feature.split(',')
        curr = [n.surface, info[0..3].join(',')]
        unless prev.empty?
          chain[prev][curr] += 1
        end

        prev = (prev.size < num ? prev : prev[1..-1]) + [curr]
        if curr[0] == '$'
          prev = []
        end
        n = n.next
      end
    end

    return chain
  rescue
    puts "RuntimeError: ", $!
  end
end


def markov(chain, start, stop, num)
  sentence = []
  key = [[start, 'BOS/EOS,*,*,*']]
  loop do
    table = chain[key]
    sum = table.inject(0) {|s, t| s + t[1]}
    r = rand(sum)
    nex = nil
    table.each do |k, v|
      if (r -= v) < 0
        nex = k
        break
      end
    end

    break if nex[0] == stop
    sentence.push(nex[0])

    key = (key.size < num ? key : key[1..-1]) + [nex]
  end
  return sentence
end


def put_chain(chain)
  chain.keys.sort.each do |key|
    puts key.inspect
  end
end


if $0 == __FILE__
  len = 3

  chain = create_chain_n($stdin, len)
  if chain
    25.times do
      puts markov(chain, '', '$', len).join
    end
  end
end

4単語にするとあまり突飛な文章にならなくて面白くなかったので3単語で:

 セリヌンティウスは、徐々に釣り上げられてゆく友の両足に、齧りついた。群衆は、どよめいた。あっぱれ。ゆるせ、と口々にわめいた。セリヌンティウスは無言で首肯き、メロスをひしと抱きしめた。友と友の間は、それでよかった。セリヌンティウスの縄は、ほどかれたのである。ありがたい。メロスは起きてすぐ、花婿の家を訪れた。そうして、少し事情があるから、結婚式を明日にしてほしい。」
「その、いのちが欲しいのだ。そんなに急ぐ必要も無い。」メロスは走りながら尋ねた。
「疑うのが、たまらなく口惜しいのだ。信実とは、決して空虚な妄想ではなかった。どうか、わしの心に勝ったのだ。そんなに急ぐ必要も無い。十六の妹も、きょうは兄の代りに羊群の番をしている者には、雨も止み、日は高く昇って、そろそろ暑くなって来た。路で逢った若い衆をつかまえて、何が平和だ。」
「おどろいた。国王は乱心か。」
「私だ、刑吏! 殺されるのは、翌る日の午前、陽は既に西に傾きかけている。ぜいぜい荒い呼吸をしながら峠をのぼり、のぼり切って、ほっとした時、メロスは幾度となく眩暈を感じ、これではならぬ。おまえだって、いまに、磔になっていよう。少しでも永くこの家に愚図愚図とどまっていたかった。メロスは、まごついた。佳き友は、おまえたちだ。人の命も問題でないのだ。」と大声で刑場の群衆にむかって叫んだつもりであった。呼吸も出来ず、二度、三度、口から血が噴き出た。見える。はるか向うに小さく、シラクスの市の塔楼が見える。塔楼は、夕陽を受けてきらきら光っている。日没までには、わしの心に勝ったのだ。世の中の、正直者とかいう奴輩にうんと見せつけてやりたい。けれども私は、信頼に報いなければならぬ。メロスが帰って来たのだ。約束を破る心は、みじんも無かった。信じては、ならぬ。」
「メロス、君は、まっぱだかじゃないか。早くそのマントを着るがいい。ひょっとしたら、間に合わぬものでもない。走るがいい。おまえの兄は、たぶん偉い男なのだから、決して寂しい事は無い。
「ああ、王は悧巧だ。自惚れているがよい。私は、きっと佳い夫婦になるだろう。私にはいのちの他には何も無い。その、たった一つの命も、これから王にくれてやるのだ。私が逃げてしまって、三日目には日没までに帰って来た。約束のとおり、いま、帰って来ます。」その若い石工も、メロスは足もとに視線を落し瞬時ためらい、「ただ、私に望み給うな。放って置いてくれ。どうでも、いいのだ。天を仰いで、くやし泣きに泣き出した。ああ、神々も照覧あれ! 濁流にも負けぬ愛と誠の力を腕にこめて、押し寄せ渦巻き引きずる流れを、なんのこれしきと掻きわけ掻きわけ、掻きわけ、掻きわけ、
 メロスは激怒した。満身の力を腕にこめて、押し寄せ渦巻き引きずる流れを、なんのこれしきと掻きわけ掻きわけ、
 ひとりの少女が、緋のマントをメロスに捧げた。メロスは、それゆえ、花嫁の衣裳やら祝宴の御馳走やらを買いに、はるばる市にやって来たのだから、訪ねて行くのが楽しみである。
「いいえ、乱心ではございませぬ。」
 眼が覚めたら、すぐに市に出かける。大切な用事があるのだ。王の奸佞邪智を打ち破る為に走るのだ。そんなに急ぐ必要も無い。女房も無い。」メロスは眼に涙を浮べて言った。「罪の無い人を殺します。」その若い石工も、メロスは足もとに視線を落し瞬時ためらい、「ただ、私に望み給うな。放って置いてくれ。どうでも、いいのだ。」
「はは。いのちが大事だったら、おくれて来い、と耳打ちした。初夏、満天の星である。メロスは、わが身に鞭打ち、ついに出発を決意した。あすの日没までに帰って来い。おくれたら、身代りを殺して、何が平和だ。」とメロスは悪びれずに答えた。
「ばかな。」と暴君は、嗄れた声が幽かに出たばかり、群衆は、ひとりとして彼の到着に気がつかない。すでに磔の柱が高々と立てられ、縄を打たれたセリヌンティウスは、縄打たれた。暴君ディオニスは静かに、けれども威厳を以て問いつめた。その身代りを、きっと殺すぞ。ちょっとおくれて来るがいい。ひょっとしたら、間に合わぬは問題でないのだ。君を欺くつもりは、みじんも無かった。いまだって、君は私を信じられないならば、よろしい、この市にセリヌンティウスという石工がいます。私の命なぞは、問題ではない。死んでお詫び、などと気のいい事は言って居られぬ。私は、醜い裏切り者だ。どうとも、勝手にするがよい。三日の間、たった一度だけ、ちらと君を疑った。君が若し私を殴ってくれなかったら、あの佳い友達が、私のために私は、今宵、殺される。若い時から名誉を守れ。さらば、ふるさと。若いメロスは、ぶるんと両腕を大きく振って、雨中、矢の如く走り出た。
 それを聞いて王は、民の忠誠をさえ疑って居られる。」
「ありがとう、友よ。」二人同時に言い、ひしと抱き合い、それから嬉し泣きにおいおい声を放って泣いた。
「メロス、君は私を信じてくれるにちがい無い。いや、それも私の、ひとりよがりか? ああ、もういっそ、悪徳者として生き伸びてやろうか。村には私の家が在る。ちょっと一眠りして、てれていた村人たちは野に出て仕事をはじめていたのだな。」
「私にはいのちの他には何も無い。女房も無い。女房も無い。」メロスは胸の張り裂ける思いで、赤く大きい夕陽ばかりを見つめていた。メロスほどの男にも、宝といっては、ならぬ。」
「やめて下さい。いまはただその一事だ。走れ! メロス。
「フィロストラトスでございます。貴方のお友達セリヌンティウス様の弟子でございます。」その若い石工も、メロスは幾度となく眩暈を感じ、これではならぬ。そうして、うるさく兄に質問を浴びせた。
「言うな!」と猛然一撃、たちまち、三人を殴り倒し、残る者のひるむ隙に、さっさと走って峠を下った。一気に峠を駈け降りて来た。路で逢った若い衆をつかまえて、何が平和だ。」
 聞いて、メロスの叫びをせせら笑う如く、ますます激しく躍り狂う。浪は浪を呑み、捲き、煽り立て、そうして時は、刻一刻と消えて行く。今は此のシラクスの市にやって来た。メロスほどの男にも、やはり未練の情というものは在る。今宵呆然、歓喜に酔っているらしい花嫁に近寄り、
「その、いのちが欲しいのだ。いちどだって、暗い疑惑の雲を、お互い胸に宿したことは無かった。信じてくれ! 私は信頼されている。ぜいぜい荒い呼吸をしながら峠をのぼり、のぼり切って、ほっとした時、メロスは、すぐに市に出かける。大切な用事があるのだ。私が逃げてしまって、三日目の日暮まで、ここに帰って来い。結婚式は、真昼に行われた。暴君ディオニスは静かに、けれども威厳を以て問いつめた。その王の顔は蒼白で、眉間の皺は、刻み込まれたように深かった。
 私は信頼されている。私の一家も笑われる。私は、正義の士として死ぬ事が出来るぞ。ああ、あなたは遅かった。おうらみ申します。ほんの少し、もうちょっとでも、早かったなら!」$「なんの為の平和だ。自分の地位を守る為か。」こんどはメロスが嘲笑した。泳ぎ切るより他に無い。ああ、待っているだろう。ありがとう、セリヌンティウス。よくも私を信じて居りました。王様が、さんざんあの方をお助けになることは出来ぬ、どうか明日にしてくれない。夜明けまで議論をつづけて、やっと、どうにか婿をなだめ、すかして、説き伏せた。結婚式も間近かなのである。身仕度は出来た。さて、メロスは疾風の如く刑場に突入した。「とんでもない嘘を言うわい。逃がした小鳥が帰って来るというのか。」こんどはメロスが嘲笑した。泳ぎ切るより他に無い。ああ、神々も照覧あれ! 濁流にも負けぬ愛と誠の偉大な力を、いまこそ発揮して見せる。メロスは、悠々と身仕度をはじめた。雨も、いくぶん小降りになっている。日没までには、何か小さく囁きながら清水が湧き出ているのだが、と質問した。初夏、満天の星である。その泉に吸い込まれるようにメロスは身をかがめた。水を両手で掬って、一くち飲んだ。ほうと長い溜息が出て、野を越え山越え、十里はなれた此のシラクスの市で、石工をしている。もう既に日も落ちて、まちの暗いのは当りまえだが、と質問した。必ず、かの邪智暴虐の王を除かなければならぬ。おまえだって、いまに、磔になってみると、私は村で結婚式を挙げさせ、必ず、ここへ帰って神々の祭壇を飾り、祝宴の席を調え、間もなく床に倒れ伏し、呼吸もせぬくらいの深い眠りに落ちてしまったから、ちょっとご免こうむって眠りたい。眼が覚めたら、すぐに市に出かける。大切な用事があるのだ。信じられているから走るのだ。だらしが無い。笑ってくれ。」
「万歳、王様万歳。」
 路行く人を押しのけ、跳ねとばし、メロスは走ったのだ。私は、なんだか、夜のせいばかりでは無く、市全体が、やけに寂しい。のんきなメロスも、だんだん不安になってみると、私は王の言うままになってから、泣いて詫びたって聞かぬぞ。」

MeCabのインストール

形態素解析させてみたいということで、MacMeCabをインストールしてみる。

インストール先のディレクトリは特に自分のホームにしなくてもデフォルトのまま通った。でスクリプトとのバインディングということでRubyのを入れてみた、がtest.rbでエラーが出た:

mecab-ruby-0.98 $ ruby test.rb 
0.98
RuntimeError: tagger.cpp(150) [load_dictionary_resource(param)] param.cpp(71) [ifs] no such file or directory: ./dicrc

ググッたら、

extconf.rbの$CFLAGの下に
  $LDFLAGS = '-L/usr/local/lib'
を加える

とのこと。その通りにしたら動いた。