ponkiti's blog

主に自分用、イベント参加メモや備忘録として利用

『集合知プログラミング』メモ(1)

今はなき社内勉強会用に書いたメモ。会社のRedmine上にページを作ったもので、自宅だと閲覧できないためここに移すことにした。

書籍

集合知プログラミング』(2012年)

集合知プログラミング

本書について書かれているWebサイトを見ると、発行年によって正誤箇所が異なるようだ・・・。

環境

  • Python 2.7.6
  • Sublime Text 2 には下記パッケージを入れておく
    • Python PEP8 Lint (構文チェック)
    • Pythonの構文を知らずにパッケージを入れると、半角スペースが入ってないなどのメッセージが出まくり苦労することになる・・・。本当のPython初心者の場合、「コードのスタイルを統一する」なんてことは考えなくていいと思う。

読んだ箇所

1章〜2章2.3.1(p.11)

参考

下記2つのスライドを紹介しているサイト
http://makopi23.blog.fc2.com/blog-entry-26.html

正誤表

以下の正誤表はすべて2章分。テーブルのままだと横幅が足りないので箇条書きに変更。

p9

  • 2.2直前に書かれている実行コードの最後行
  • ","が1つ余計

p10

  • 実行コード2行目
  • 【誤】psqrt(pow(4.5-4,2)+pow(1-1,2))
  • 【正】sqrt(pow(4.5-4,2)+pow(1-2,2))
  • 関数sqrtが"psqrt"となっている、2つ目の関数powの引数が間違っている

p10

  • 実行コード2行目の結果
  • 【誤】3.16227…
  • 【正】1.118033…

p11

  • 実行コード1行目
  • 【誤】1/(1+sqrt(pow(5-4,2)+pow(4-1,2)))
  • 【正】1/(1+sqrt(pow(4.5-4,2)+pow(1-2,2)))

p11

  • 実行コード1行目の結果
  • 【誤】0.240253…
  • 【正】0.472135…

p11

  • sim_distance関数の最後行
  • 【誤】return 1/(1+sum_of_squares)
  • 【正】return 1/(1+sqrt(sum_of_squares))

p11

  • 2つ目の実行コード1行目
  • 【誤】reload(recommendations)
  • 【正】import(recommendations)
  • 基本的に初回にrecommendationsファイルを使用する場合はimport

p11

  • 3つ目の実行コード2行目の結果
  • 【誤】0.148…
  • 【正】0.29429805…

その他

  • recommendatioons.py 先頭に下記の記述を追加しておく
  • この記述が抜けていると「SyntaxError: Non-ASCII character」エラーが出る
# coding: UTF-8

ユークリッド距離

{ \displaystyle
distance = \sqrt{{(x_1-x_2)}^2+{(y_1-y_2)}^2}
}

実行コード

  • 添付した recommendations.py を使用する
  • Pythonの対話モードに入る
$ python
  • os.chdir で recommendations.py を置いたディレクトリを指定する
>>> import os
>>> os.getcwd()
>>> os.chdir("/Users/a_aoyama/Desktop/work_python")
  • 書面には載っていないが、「critics['Toby']['Snakes on a Plane']=3.0」で、値を変更することができる
>>> from recommendations import critics
>>> critics['Lisa Rose']['Lady in the Water']
2.5
>>> critics['Toby']['Snakes on a Plane']
4.5
>>> critics['Toby']['Snakes on a Plane']=3.0
>>> critics['Toby']['Snakes on a Plane']
3.0
>>> critics['Toby']
{'Snakes on a Plane': 3.0, 'Superman Returns': 4.0, 'You, Me and dupree': 1.0}
  • Tobyの「Snakes on a Plane」の値を4.5に戻して
>>> from  math import sqrt
>>> sqrt(pow(4.5-4,2)+pow(1-2,2))
1.118033988749895
>>> 1/(1+sqrt(pow(4.5-4,2)+pow(1-2,2)))
0.4721359549995794