「集合知プログラミング」第28回(1月31日)

2012年1月31日

参加者 今井(読み手)、青木、沼田(記)
範囲 pp. 191 – 200

8章 価格モデルの構築

  • 8.4 クロス評価
  • 8.5 異質な変数
    • 8.5.1 データセットの追加
      • p.193 コード for文の中の4行目
        bottlesize=[375.0,750.0,1500.0,3000.0][randint(0,3)]
        と書くと、375.0~3000.0のどれかひとつがbottlesizeに代入される
    • 8.5.2 次元のリスケール(縮尺変更)
  • 8.6 縮尺の最適化
    • p.197 Pythonセッション 2行目のreloadの後の出力内容
      from ‘numpredict.pyc’となっているが、いつコンパイルされた?numpredict.pyの間違い?
  • 8.7 不均一な分布
    • p.198 第2段落の最後の文
      numericalpredict.pyはnumpredict.pyのあやまり?
    • p.198 最後から2行目
      どうして観測結果が20パーセントの割引となる?
      →半分が4割引だからだろう
    • 8.7.1 確率密度の推測

「集合知プログラミング」第27回(1月27日)

2012年1月27日

参加者 沼田(読み手)、青木(記)

範囲 pp. 180 – 190

8章 価格モデルの構築

  • 8.1 サンプルデータセットの構築
  • 8.2 K近傍法
    • 8.2.1 近傍群の数
      p.184の図8-1について、30年で価格が0になるのでピーク酒齢は25年、よってレーティングは75となるはず。レーティング70、酒齢25をwineprice()で計算すると195.0となる。y軸の単位は何だろう?
    • 8.2.2 類似度を定義する
    • 8.2.3 K近傍法のコード
  • 8.3 重み付け近傍法
    • 8.3.1 反比例関数
    • 8.3.2 減法(引算)関数
      p.188 l3 subtractweiht → subtractweight
    • 8.3.3 ガウス関数
    • 8.3.4 重み付けK近傍法

「集合知プログラミング」第26回(1月24日)

2012年1月24日

参加者 青木(読み手)、沼田、今井(記)
範囲 pp. 173 – 180

7章 決定木によるモデリング

  • 7.11 住宅価格のモデリング
    • 7.11.1 Zillow API
      • p.173 図7-5
        Bath rooms: 3.5 の0.5ってなんだろう?
        → トイレだけらしい。3.5で3フルバスルーム+1トイレ
      • p.175 コード l.4
        引数がないstrip()は何してる? → 文字列の先頭及び末尾の空白文字除去
      • p.175 図7-6
        • トップの 3:3:0 は、3:3.0 の間違いか。
        • useがDuplex, Triplexってなんだろう
          → Duplexは日本の二世帯住宅のように一つの家を二つに区切ってつくられた家らしい。住むのは親世帯、子世帯とはかぎらないようだ。Tirplex, (Fourplex)も同様。
  • 7.12 “Hotness”のモデル化
    • p.176 下 コード l.3
      api_keyを渡すクエリの名前はapp_keyなんだね。
    • p.178 下から l.3, 図7-7
      本文中には、「最上段の中心ノードは性別だ。」とあるが、図では年齢になっている。
  • 7.13 決定木を使うべき場面
  • 7.14 エクササイズ
    • p.180 「3. 早期終了」の初め、ミススペル
      buidtree → buildtree

「集合知プログラミング」第25回(1月20日)

2012年1月20日

参加者 今井(読み手)、青木、沼田(記)
範囲 pp. 165 – 173

7章 決定木によるモデリング

  • 7.6 決定木の表示
    • 7.6.1 グラフィック表示
      • p.167 リーフを出力する際、tree.results.items()をfor文でまわしている(drawnode関数の最後)
        →ここまでの例ではitemはひとつしかないが、7.8節で刈り込みを行うとitemが複数のケースが出てくる
  • 7.7 新しい観測を分類する
  • 7.8 ツリーの刈り込み
  • 7.9 欠落データへの対処
    • p.172 最後のパラグラフ
      mdclassifyの実行結果が「予想通り」とあるが何故?mdclassifyに渡した観測のリファラがどちらもgoogleだから?
  • 7.10 数値による帰結への対処

「集合知プログラミング」第24回(1月17日)

2012年1月17日

参加者 沼田(読み手)、今井、青木(記)

範囲 pp. 160 – 165

7章 決定木によるモデリング

  • 7.4 最高の分割を選ぶ
    • 7.4.1 ジニ不純度
    • 7.4.2 エントロピー
  • 7.5 再帰的なツリー構造
  • 7.6 決定木の表示

「集合知プログラミング」第23回(1月13日)

2012年1月13日

参加者 青木(読み手)、沼田、今井(記)
範囲 pp. 150 – 160

6章 ドキュメントフィルタリング

  • 6.10 Akismetを利用する
    • p.151 コード中
      Geckoの読み方は? → Wikipediaによるとゲッコー。
    • p.151 実行例中
      spammer@spam.com は、example.comみたいに特別なドメイン?
      → spam.comにアクセスしたら、ランチョンミートのスパムの会社につながりました。よって特別なドメインではなく、実企業がもっているドメインみたい。こんな例に使っていいのか?
  • 6.11 その他の手法
  • 6.12 エクササイズ

7章 決定木によるモデリング

  • 7.1 サインアップを予測する
    • p.157 訳注
      • rstrip('\n')は、行末のLFを削除している。
      • 2行目のfor分では、ページ数を整数化している。
    • p.157 本分中ほど
      「サインアップ前にどれだけ時間をかけてサイトを読んだか、」とあるが、時間はどうやって求めている?
      → 絶対的な時間ではなく、何ページ見たかのことを言っているのだろう。
  • 7.2 決定木入門
    • p.156 図7-1
      核果とは?
      → 中心に大きな種が一つ入っている果実。(ref. Wikipedia)
  • 7.3 ツリーのトレーニング
    • p.159 コード
      • l.6 typo
        slpit_function → split_function
      • 下方のset1, set2を作るところ
        一つのrowsのループで、split_function(row)がtrueならset1に追加、falseならset2に追加、というコードにしないのはなぜ? 本のコードでは、同じループが同じ判定条件を含んだコードを2回ループするので、効率悪いのではないか。

「集合知プログラミング」第22回(1月6日)

2012年1月6日

参加者 今井(読み手)、青木(記)
範囲 pp. 141 – 150

6章 ドキュメントフィルタリング

  • 6.6 フィッシャー法
    • 6.6.3 アイテムを分類する
      年末年始を挟んだので記憶が飛んでいるが、p.142の2行目のbadへのスコアが0.6以上のものはbadとなると思う。
  • 6.7 トレーニング済みの分類器を保存する
    • 6.7.1 SQLiteを利用する
  • 6.8 Blogフィードをフィルタする
    p.147モンティパイソンについて、迷惑な方のスパムの語源にとPythonに掛かっていておもしろい。
  • 6.9 特徴の検出の改良
    p.149のソースコードの#summaryの単語の組たちを特徴として取得するのブロックはインデントがずれているのではないだろうか。Pythonはインデントがずれると意味がちがってくるので怖いなー。
  • 付録Aサードパーティによるライブラリたち
    • A.4 pysqlite
      付録A.4 pysqliteは読んだような気がしていましたが、やっぱり11回のときに読んでいました。

「集合知プログラミング」第21回(12月27日)

2011年12月27日

参加者 青木(読み手)、沼田、今井(記)
範囲 pp. 135 – 141

6章 ドキュメントフィルタリング

  • 6.5 単純ベイズ分類器
    • 6.5.2 ベイズの定理の簡単な紹介
      • p.136 ベイズの定理
        Pr(A|B) = Pr(B|A) x Pr(A)/Pr(B)
        にある’x‘は掛ける?
        → Yes. Wikipediaでは、分母にPr(B|A)Pr(A)、分子にPr(A)というような形で書いてあった。
        Pr(B)Pr(A|B) = Pr(A)Pr(B|A) = Pr(A∩B)
        から、両辺をPr(B)で割ると求まる。ベン図を書いてPr(A∩B)から考えるとわかりやすい(らしい)。
      • p.137 def prob(self,item,cat)内
        catはcategoryの意、catProbはcategory probabilityの意。
        前頁のベイズの定理のPr(B)部分は計算していない。∵prob()は確率値を得たいわけではなく比較に使いたいだけ、かつPr(ドキュメント)はどのカテゴリでも同じなので割らずに比較しても同じ。(コード上方の本文より)
    • 6.5.3 カテゴリの選択
      • p.138 コード 下から2行目
        少なくともここまでのコードでは、

        • self.getthreshold(best)はループ毎にかわりはしないので、ループ外で値を得てそれを用いる方が良い。
        • probs(best)は前のループでmaxに入っているからそれを用いる方が良い。
        • そもそもベスト2も、その前のベスト1を選ぶループで取得しておけば良いのでは?
      • p.138 実行例中
        default=’unknown’を指定しないと’unknown’が表示されるところはNoneが返るが、何が表示されるのだろう。

        >>> None

        >>>

        でした。
  • 6.6 フィッシャー法
    • 6.6.1 特徴たちのカテゴリの確率
      • p.139 下方、三変数の算出の説明中 cprob = clf / (clf + nclf)nclfはどこにも説明が無いが何?
        → 次頁のコードでは、p=clf/(freqsum)になっているので、おそらく Pr(特徴|このカテゴリ以外のカテゴリ) だろう。なぜここだけnclfを使っているかはわからない。
    • 6.6.2 確率を統合する
      • p.140 本文下からl.3行末 誤字
        に立つ。 → に立つ。
      • p.141 コード中、math.exp(-m)は何?
        → 自然対数の底 e の -m 乗
      • p.141 コード中、// は何?
        オペランドが浮動小数点数であっても、除算結果の小数点以下を切り捨てた値を返すオペレータ。
      • p.141 実行例
        cprobは’quick’の、fisherprobは’quick rabbit’のスコアを調べているので、cprobとfisherprobの比較ができないね。

「集合知プログラミング」第20回(12月20日)

2011年12月20日

参加者 今井(読み手)、青木、沼田(記)
範囲 pp. 127 – 135

6章 ドキュメントフィルタリング

  • 6.1 スパムフィルタリング
  • 6.2 ドキュメントと単語
  • 6.3 分類器のトレーニング
  • 6.4 確率を計算する
    • 6.4.1 推測を始める
  • 6.5 単純ベイズ分類器
    • 第2パラグラフ末尾
      …前者の方に”money”という単語より出現しやすい。、では?
    • 6.5.1 ドキュメント全体の確率

「集合知プログラミング」第19回(12月16日)

2011年12月16日

参加者 沼田(読み手)、今井(記)
範囲 pp. 118 – 126

5章 最適化

  • 5.9 嗜好への最適化
    • 5.9.2 コスト関数
      • p.119 リスト l.4
        slotsはp.118と同じだが、作り方がp.118と違う。なぜ?
        どの寮も空きが二つという前提があるからp.118でもできるが、本来各寮によって空き数はちがうだろうから、p.119のように直接つくるのが普通の気もする。
    • 5.9.3 最適化の実行
      • p.119 リストの中ほど
        optimization.geneticoptimize()の戻り値をsに入れていないのはおかしい。
  • 5.10 ネットワークの可視化
    • 5.10.1 レイアウト問題
    • 5.10.2 交差線のカウント
      • p.122 5.10.2のl.4
        ここに限らないが、なぜsolを二次元リストやタプルのリストで表現せず、一次元リストで表現するのだろう。データが表す意味がわかりにくい。
      • p.122 crosscount()の定義
        文章中の交差判定の説明はわかるが、コードが良くわからない。
        → 線分のベクトル表現の外積が0なら並行……云々らしいです。
      • p.123 l.8
        なぜ、左右の余白は違う(左余白は10で右余白は30)のだろう。
        → p.124で解決。座標が文字列の始まりになるので、文字列の長さを考えて右余白を多めにとっているのだろう。
    • 5.10.3 ネットワークの描画
  • 5.11 さらなる可能性
  • 5.12 エクササイズ