集合知プログラミング

[cover photo]
  • 2008年07月 発行
  • 392ページ
  • ISBN978-4-87311-364-7
  • フォーマット Print
  • 原書: Programming Collective Intelligence

オライリー・ジャパンで書籍を購入:
定価3,672円


本書は現在注目を集めている「集合知(collective intelligence)」をテーマにした書籍です。機械学習のアルゴリズムと統計を使ってウェブのユーザが生み出した膨大なデータを分析、解釈する方法を、基礎から分かりやすく解説します。本書で紹介するのは「購入・レンタルした商品の情報を利用した推薦システム」、「膨大なデータから類似したアイテムを発見し、クラスタリングする方法」、「数多くの解決策の中から最適なものを探し出す方法」、「オークションの最終価格を予想する方法」、「カップルになりそうなペアを探す方法」、「遺伝的プログラミング」など。del.icio.us、eBayなどが公開しているWeb APIを使用した解説も本書の大きな特徴です。本書のサンプルコードは可読性に優れたPythonを使用していますが、他の言語のプログラマでも理解しやすいようにアルゴリズムを解説しています。日本語版ではYahoo!日本語形態素解析Webサービスを利用した日本語テキスト処理について加筆しました。


関連書籍

Python クックブック 第2版
セマンティックWeb プログラミング

訳者まえがき
はじめに

1章 集合知への招待
	1.1 集合知とは何か?
	1.2 機械学習とは何か?
	1.3 機械学習の限界
	1.4 実生活における例
	1.5 学習アルゴリズムのその他の使用

2章 推薦を行う
	2.1 協調フィルタリング
	2.2 嗜好の収集
	2.3 似ているユーザを探し出す
		2.3.1 ユークリッド距離によるスコア
		2.3.2 ピアソン相関によるスコア
		2.3.3 どちらの類似性尺度を利用すべきなのか?
		2.3.4 評者をランキングする
	2.4 アイテムを推薦する
	2.5 似ている製品
	2.6 del.icio.us のリンクを推薦するシステムを作る
		2.6.1 del.icio.usのAPI
		2.6.2 データセットを作る
		2.6.3 ご近所さんとリンクの推薦
	2.7 アイテムベースのフィルタリング
		2.7.1 アイテム間の類似度のデータセットを作る
		2.7.2 推薦を行う
	2.8 MovieLensのデータセットを使う
	2.9 ユーザベース VS アイテムベース
	2.10 エクササイズ

3章 グループを見つけ出す
	3.1 教師あり学習 VS 教師なし学習
	3.2 単語ベクトル
		3.2.1 ブロガーを分類する
		3.3.2 フィード中の単語を数える
	3.3 階層的クラスタリング
	3.4 デンドログラムを描く
	3.5 列のクラスタリング
	3.6 K 平均法によるクラスタリング
	3.7 嗜好のクラスタ
		3.7.1 データの取得と準備
		3.7.2 Beautiful Soup
		3.7.3 Zeboの結果をすくい取る
		3.7.4 距離の基準を定義する
		3.7.5 結果をクラスタリングする
	3.8 データを2次元で見る
	3.9 クラスタについてその他のこと
	3.10 エクササイズ

4章 検索とランキング
	4.1 検索エンジンとは?
	4.2 シンプルなクローラ
		4.2.1 urllib2を使う
		4.2.2 クローラのコード
	4.3 インデックスの作成
		4.3.1 スキーマの設定
		4.3.2 ページ内の単語を探し出す
		4.3.3 インデックスへの追加
	4.4 問い合わせ
	4.5 内容ベースの順位付け
		4.5.1 正規化関数
		4.5.2 単語の頻度
		4.5.3 ドキュメント中での位置
		4.5.4 単語間の距離
	4.6 インバウンドリンクの利用
		4.6.1 単純に数えあげる
		4.6.2 PageRankアルゴリズム
		4.6.3 リンクのテキストを利用する
	4.7 クリックからの学習
		4.7.1 クリックを追跡するネットワークの設計
		4.7.2 データベースのセットアップ
		4.7.3 フィードフォワード
		4.7.4 バックプロパゲーションによるトレーニング
		4.7.5 トレーニングのテスト
		4.7.6 検索エンジンとつなげる
	4.8 エクササイズ

5章 最適化
	5.1 グループ旅行
	5.2 解の表現
	5.3 コスト関数
	5.4 ランダムサーチ(無作為探索)
	5.5 ヒルクライム
	5.6 模擬アニーリング
	5.7 遺伝アルゴリズム
	5.8 実際のフライトを検索する
		5.8.1 Kayak API
		5.8.2 minidomパッケージ
		5.8.3 フライト検索
	5.9 嗜好への最適化
		5.9.1 学寮の最適化
		5.9.2 コスト関数
		5.9.3 最適化の実行
	5.10 ネットワークの可視化
		5.10.1 レイアウト問題
		5.10.2 交差線のカウント
		5.10.3 ネットワークの描画
	5.11 さらなる可能性
	5.12 エクササイズ

6章 ドキュメントフィルタリング
	6.1 スパムフィルタリング
	6.2 ドキュメントと単語
	6.3 分類器のトレーニング
	6.4 確率を計算する
		6.4.1 推測を始める
	6.5 単純ベイズ分類器
		6.5.1 ドキュメント全体の確率
		6.5.2 ベイズの定理の簡単な紹介
		6.5.3 カテゴリの選択
	6.6 フィッシャー法
		6.6.1 特徴たちのカテゴリの確率
		6.6.2 確率を統合する
		6.6.3 アイテムを分類する
	6.7 トレーニング済みの分類器を保存する
		6.7.1 SQLiteを利用する
	6.8 Blogフィードをフィルタする
	6.9 特徴の検出の改良
	6.10 Akismetを利用する
	6.11 その他の手法
	6.12 エクササイズ

7章 決定木によるモデリング
	7.1 サインアップを予測する
	7.2 決定木入門
	7.3 ツリーのトレーニング
	7.4 最高の分割を選ぶ
		7.4.1 ジニ不純度
		7.4.2 エントロピー
	7.5 再帰的なツリー構築
	7.6 決定木の表示
		7.6.1 グラフィック表示
	7.7 新しい観測を分類する
	7.8 ツリーの刈り込み
	7.9 欠落データへの対処
	7.10 数値による帰結への対処
	7.11 住宅価格のモデリング
		7.11.1 Zillow API
	7.12 "Hotness"のモデル化
	7.13 決定木を使うべき場面
	7.14 エクササイズ

8章 価格モデルの構築
	8.1 サンプルデータセットの構築
	8.2 K近傍法
		8.2.1 近傍群の数
		8.2.2 類似度を定義する
		8.2.3 K近傍法のコード
	8.3 重み付け近傍法
		8.3.1 反比例関数
		8.3.2 減法(引算)関数
		8.3.3 ガウス関数
		8.3.4 重み付けK近傍法
	8.4 クロス評価
	8.5 異質な変数
		8.5.1 データセットの追加
		8.5.2 次元のリスケール(縮尺変更)
	8.6 縮尺の最適化
	8.7 不均一な分布
		8.7.1 確率密度の推測
		8.7.2 確率のグラフ化
	8.8 実データの利用  eBay API
		8.8.1 ディベロッパキーの取得
		8.8.2 コネクションのセットアップ
		8.8.3 検索する
		8.8.4 アイテムの詳細を得る
		8.8.5 価格予測器の構築
	8.9 K近傍法はどこで使うべきか
	8.10 エクササイズ

9章 高度な分類手法:カーネルメソッドとSVM
	9.1 matchmakerデータセット
	9.2 このデータセットの難点
		9.2.1 決定木による分類器
	9.3 基礎的な線形分類
	9.4 カテゴリーデータな特徴たち
		9.4.1 Yes/Noクエスチョン
		9.4.2 「興味があるもの」リスト
		9.4.3 Yahoo! Mapsを使って距離を決定する
		9.4.4 新たなデータセットの作成
	9.5 データのスケーリング
	9.6 カーネルメソッドを理解する
		9.6.1 カーネルトリック
	9.7 サポートベクトルマシン
	9.8 LIBSVMを使う
		9.9.1 LIBSVM の入手
		9.9.2 セッション中での使用例
		9.9.3 SVMをmatchmakerデータセットに適用する
	9.9 Facebookでのマッチ
		9.9.1 Developer Keyを取得する
		9.9.2 セッションを作成する
		9.9.3 友人データをダウンロードする
		9.9.4 マッチのデータセットを作る
		9.9.5 SVMモデルを構築する
	9.10 エクササイズ

10章 特徴を発見する
	10.1 ニュースのコーパス
		10.1.1 情報源の選択
		10.1.2 情報源をダウンロードする
		10.1.3 行列に変換する
	10.2 これまでのアプローチ
		10.2.1 ベイジアン分類器
		10.2.2 クラスタリング
	10.3 非負値行列因子分解
		10.3.1 行列に関する数学の簡単な紹介
		10.3.2 これは記事の行列とどのような関わりがあるの?
		10.3.3 NumPyを使う
		10.3.4 アルゴリズム
	10.4 結果を表示する
		10.4.1 記事を表示する
	10.5 株式市場のデータを使用する
		10.5.1 取引量とは何か?
		10.5.2 Yahoo! Financeからデータをダウンロードする
		10.5.3 行列の準備
		10.5.5 NMFを走らせる
		10.5.6 結果を表示する
	10.6 エクササイズ

11章 進化する知性
	11.1 遺伝的プログラミングとは?
		11.1.2 遺伝的プログラミング VS 遺伝アルゴリズム
	11.2 ツリー構造のプログラム
		11.2.1 Pythonでツリーを表現する
		11.2.2 ツリーの構築と評価
		11.2.3 プログラムを表示する
	11.3 最初の集団を作る
	11.4 解決法をテストする
		11.4.1 単純な数学的テスト
		11.4.2 成功の度合いを計測する
	11.5 プログラムの突然変異
	11.6 交叉(Crossover)
	11.7 環境を作り上げる
		11.7.1 多様性の大事さ
	11.8 シンプルなゲーム
		11.8.1 ラウンドロビントーナメント
		11.8.2 実際の人間とプレイしてみる
	11.9 さらなる可能性
		11.9.1 数学的な関数を増やす
		11.9.2 メモリ
		11.9.3 さまざまなデータタイプ
	11.10 エクササイズ

12章 アルゴリズムのまとめ
	12.1 ベイジアン分類器
		12.1.1 トレーニング
		12.1.2 分類
		12.1.3 ベイジアン分類器のコードの使用
		12.1.4 強みと弱み
	12.2 決定木による分類器
		12.2.1 トレーニング
		12.2.2 決定木分類器の利用
		12.2.3 強みと弱み
	12.3 ニューラルネットワーク
		12.3.1 ニューラルネットワークのトレーニング
		12.3.2 ニューラルネットワークのコードの利用
		12.3.3 強みと弱み
	12.4 サポートベクトルマシン
		12.4.1 カーネルトリック
		12.4.2 LIBSVMの利用
		12.4.3 強みと弱み
	12.5 K近傍法
		12.5.1 スケーリングと過剰変数
		12.5.2 K 近傍法コードの利用
		12.5.3 強みと弱み
	12.6 クラスタリング
		12.6.1 階層的クラスタリング
		12.6.2 K平均法クラスタリング
		12.6.3 クラスタリングコードの利用
	12.7 多次元尺度構成法
		12.7.1 多次元尺度構成法のコードの利用
	12.8 非負値行列因子分解
		12.8.1 NMFコードの利用
	12.9 最適化
		12.9.1 コスト関数
		12.9.2 模擬アニーリング
		12.9.3 遺伝アルゴリズム
		12.9.4 最適化コードの利用

付録A サードパーティによるライブラリたち
	A.1 Universal Feed Parser
	A.2 Python Imaging Library
	A.3 Beautiful Soup
	A.4 pysqlite
	A.5 NumPy
	A.6 matplotlib
	A.7 pydelicious

付録B 数式
	B.1 ユークリッド距離
	B.2 ピアソン相関係数
	B.3 加重平均
	B.4 Tanimoto係数
	B.5 条件付き確率
	B.6 ジニ不純度
	B.7 エントロピー
	B.8 分散
	B.9 ガウス関数
	B.10 ドット積

付録C 日本語のテキスト処理
	C.1 形態素解析ツール
	C.2 Yahoo!日本語形態素解析Webサービス

索引

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]