プログラマーなら知っておきたい40のアルゴリズム 定番・最新系をPythonで実践!


プログラマーなら知っておきたい40のアルゴリズム 定番・最新系をPythonで実践! impress top gearシリーズ


インプレス


著者:Imran Ahmad
訳者:株式会社クイープ


はじめに

セクション1 基本原理と基本的なアルゴリズム
第1章 アルゴリズムの概要
1.1 アルゴリズムとは何か
1.1.1 アルゴリズムの各フェーズ
1.2 アルゴリズムのロジックを指定する
1.2.1 疑似コード
1.2.2 スニペットを使う
1.2.3 実行プランを立てる
1.3 Pythonのパッケージの概要
1.3.1 Pythonのパッケージ
1.3.2 Jupyter NotebookでPythonを実装する
1.4 アルゴリズムの設計方法
1.4.1 データ次元
1.4.2 計算次元
1.5 性能分析
1.5.1 空間計算量分析
1.5.2 時間計算量分析
1.5.3 性能を評価する
1.5.4 Big O記法
1.6 アルゴリズムを検証する
1.6.1 厳密アルゴリズム、近似アルゴリズム、乱拓アルゴリズム
1.6.2 説明可能性
1.7 まとめ

第2章 アルゴリズムで使われるデータ構造
2.1 Pythonのデータ構造
2.1.1 リスト
2.1.2 タプル
2.1.3 ディクショナリ
2.1.4 セット
2.1.5 DataFrame(データフレーム)
2.1.6 行列
2.2 抽象データ型
2.2.1 ベクトル
2.2.2 スタック
2.2.3 キュー
2.2.4 スタックとキューの背景にある基本的な考え方
2.2.5 木
2.3 まとめ

第3章 ソートアルゴリズムと探索アルゴリズム
3.1 ソートアルゴリズム
3.1.1 Pythonでの変数の入替
3.1.2 バブルソート [No.01]
3.1.3 挿入ソート [No.02]
3.1.4 マージソート [No.03]
3.1.5 シェルソー [No.04]
3.1.6 選択ソート [No.05]
3.1.7 ソートアルゴリズムの選択
3.2 探索アルゴリズム
3.2.1 線形探索 [No.06]
3.2.2 二分探索 [No.07]
3.2.3 内挿探索 [No.08]
3.3 実践的な応用
3.4 まとめ

第4章 アルゴリズムの設計
4.1 アルゴリズムの設計についての基本的な考え方
4.1.1 課題1:設計したアルゴリズムの結果は期待どおりか
4.1.2 課題2:これらの結果を得るための最適な方法か
4.1.3 課題3:さらに大きなデータセットでの性能はどうか
4.2 アルゴリズム戦略
4.2.1 分割統治法 [No.09]
4.2.2 動的計画法
4.2.3 貪欲法
4.3 実践的な応用:巡回セールスマン問題の求解
4.3.1 総当たり戦略を使う [No.10]
4.3.2 貪欲法を使う [No.11]
4.4 PageRankアルゴリズム [No.12]
4.4.1 問題の定義
4.4.2 PageRankアルゴリズムの実装
4.5 線形計画法 [No.13]
4.5.1 線形計画法問題の定式化
4.6 実践的な応用:線形計画法によるキャパシティプランニング
4.7 まとめ

第5章 グラフアルゴリズム
5.1 グラフの表現
5.1.1 グラフの種類
5.1.2 特別な種類のエッジ
5.1.3 エゴセントリックネットワーク
5.1.4 ソーシャルネットワーク分析
5.2 ネットワーク分析理論 [No.14]
5.2.1 最短経路
5.2.2 近傍を作成する
5.2.3 中新世を理解する
5.2.4 Pythonを使って中心性指標を計算する
5.3 グラフの探索
5.3.1 幅優先探索 [No.15]
5.3.2 深さ優先探索 [No.16]
5.4 ケーススタディ:不正分析 [No.17]
5.4.1 単純な不正分析
5.4.2 監視塔手法による不正分析
5.5 まとめ

セクション2 機械学習アルゴリズム
第6章 教師なし学習アルゴリズム
6.1 教師なし学習 [No.18]
6.1.1 データマイニングのライフサイクルでの教師なし学習
6.1.2 教師なし学習に関する最近の研究の動向
6.1.3 実際の例
6.2 クラスタリングアルゴリズム
6.2.1 類似度を数値化する [No.19]
6.2.2 階層的クラスタリング [No.20]
6.2.3 クラスタを評価する
6.2.4 クラスタリングの応用
6.3 次元削減
6.3.1 主成分分析 [No.21]
6.3.2 主成分分析の制限
6.4 相関ルールマイニング
6.4.1 使用例
6.4.2 マーケットバスケット分析
6.4.3 相関ルール
6.4.4 ランキングルール
6.4.5 相関分析のアルゴリズム [No.22,23]
6.5 実践的な応用:同じようなツイートを集める
6.5.1 トピックモデルの構築
6.5.2 クラスタリング
6.6 異常検知アルゴリズム
6.6.1 クラスタリングを使う
6.6.2 密度ベースの異常検知を使う
6.6.3 サポートベクトルマシンを使う
6.7 まとめ

第7章 従来の教師あり学習アルゴリズム
7.1 教師あり学習
7.1.1 教師あり学習の定式化
7.1.2 可能性条件
7.1.3 分類器と回帰器を区別する
7.2 分類アルゴリズム
7.2.1 分類器の課題を定義する
7.2.2 分類器を評価する
7.2.3 分類器のフェーズを定義する
7.2.4 決定機分類アルゴリズム [No.24]
7.2.5 アンサンブル法 [No.25,26]
7.2.6 ロジスティック回帰 [No.27]
7.2.7 サポートベクトルマシン [No.28]
7.2.8 ナイーブベイズアルゴリズム [No.29]
7.2.9 最も高性能な分類アルゴリズムは
7.3 回帰アルゴリズム
7.3.1 回帰器の課題を定義する
7.3.2 線形回帰[No.30]
7.3.3 回帰木アルゴリズム [No.31]
7.3.4 勾配ブースティング回帰アルゴリズム [No.32]
7.3.5 最も高性能な回帰アルゴリズムは
7.4 実際の例:天気を予測する
7.5 まとめ

第8章 ニューラルネットワークアルゴリズム
8.1 人工ニューラルネットワーク
8.2 人工ニューラルネットワークの進化
8.3 ニューラルネットワークの訓練
8.3.1 ニューラルネットワークの構造を理解する
8.3.2 勾配降下法の定義
8.3.3 活性化関数
8.4 ツールとフレームワーク
8.4.1 Keras
8.4.2 TensorFlow
8.4.3 ニューラルネットワークの種類
8.5 転移学習
8.6 ケーススタディ:ディープラーニングを使った不正検知
8.6.1 シャムニューラルネットワークの手法 [No.33]
8.7 まとめ

第9章 自然言語処理のためのアルゴリズム
9.1 自然言語処理
9.1.1 NLPの用語
9.1.2 NLTK
9.2 BoWベースのNLP [No.34]
9.3 単語埋め込み [No.35]
9.3.1 単語の近傍
9.3.3 単語埋め込みの特性
9.4 リカレントニューラルネットワークを使った自然言語処理
9.5 自然言語処理を使った感情分析
9.6 ケーススタディ:映画レビューの感情分析 [No.36]
9.7 まとめ

第10章 レコメンデーションエンジン
10.1 レコメンデーションシステム
10.2 レコメンデーションエンジンの種類
10.2.1 コンテンツベースのレコメンデーションエンジン [No.37]
10.2.2 強調フィルタリングレコメンデーションエンジン [No.38]
10.2.3 ハイブリッドレコメンデーションエンジン [No.39]
10.3 レコメンデーションシステムの制限
10.3.1 コールドスタート問題
10.3.2 メタデータ要件
10.3.3 データの疎性の問題
10.3.4 社会的影響によるバイアス
10.3.5 データが限られている
10.4 実践的な応用
10.5 実際の例:レコメンデーションエンジンの作成
10.6 まとめ

セクション3 高度なトピック
第11章 データアルゴリズム
11.1 データアルゴリズム
11.1.1 データの分類
11.2 データストレージアルゴリズム [No.40]
11.2.1 データストレージ戦略を理解する
11.3 ストリーミングデータアルゴリズム [No.41]
11.3.1 ストリーミングの応用
11.4 データ圧縮アルゴリズム [No.42]
11.4.1 可逆圧縮アルゴリズム
11.5 実際の例:Twitterリアルタイム感情分析
11.6 まとめ

第12章 暗号化に関連するアルゴリズム
12.1 暗号化
12.1.1 最も弱いリンクの重要性を理解する
12.1.2 基本用語
12.1.3 セキュリティ要件を理解する
12.1.4 暗号の基本設計
12.2 暗号法の種類
12.2.1 暗号学的ハッシュ関数
12.2.2 対称鍵暗号 [No.43]
12.2.3 非対称鍵暗号 [No.44]
12.3 例:機械学習モデルをデプロイするときのセキュリティ対策
12.3.1 MITM攻撃
12.3.2 なりすましを回避する
12.3.3 データとモデルを暗号化する
12.4 まとめ

第13章 大規模なアルゴリズム
13.1 大規模なアルゴリズムとは
13.1.1 うまく設計された大規模なアルゴリズム
13.1.2 用語
13.2 並列アルゴリズムの設計 [No.45]
13.2.1 アムダールの法則
13.2.2 タスクの粒度を理解する
13.2.3 負荷分散
13.2.4 局所性の問題
13.2.5 Pythonでの並列処理の実現
13.3 マルチリソースによる並列処理の戦略化
13.3.1 CUDA [No.46]
13.3.2 クラスタコンピューティング [No.47]
13.3.3 ハイブリッド戦略
13.4 まとめ

第14章 実践で留意すべきポイント
14.1 実践的な考察とは
14.1.1 AI Twitterボットの悲話
14.2 アルゴリズムの説明可能性
14.2.1 機械学習アルゴリズムと説明可能性
14.3 倫理とアルゴリズム
14.3.1 学習アルゴリズム
14.3.2 倫理的な考察
14.4 モデルのバイアスを減らす
14.5 NP困難問題への対処
14.5.1 問題を単純化する
14.5.2 同じような問題に対する既知の解をカスタマイズする
14.5.3 確立論的な手法を使う
14.6 アルゴリズムを使う状況
14.6.1 実際の例:ブラックスワンイベント
14.6.2 ブラックスワンイベントにアルゴリズムを適用する
14.7 まとめ

索引

書籍目次

Posted by shi-n