関連サイト
本書の関連ページが用意されています。
内容紹介
さまざまなアルゴリズムを一挙に把握できる。問題解決力、データ活用力をレベルアップ!
ソートや検索といった基本的なアルゴリズムから、大規模処理・暗号化、機械学習・説明可能性の手法など最新系もカバー。
本書は、アルゴリズムの基本事項から始まり、検索やソートなどの実例を示します。より複雑なアルゴリズムとしては、線形計画法、ページランキング、グラフアルゴリズムを説明。機械学習アルゴリズム背後のロジックも理解できるようにします。
ケーススタディとして、不正分析やレコメンデーションエンジンを取り上げ、さらには大規模処理・並列処理・暗号化のアルゴリズムも紹介します。
本書は、さまざまなアルゴリズムを活用したい方にとってその手掛かりとなる格好のガイドブックです。
書誌情報
- 著者: Imran Ahmad(著), 株式会社クイープ(訳)
- 発行日: 2021-10-19 (紙書籍版発行日: 2021-10-19)
- 最終更新日: 2021-10-19
- バージョン: 1.0.0
- ページ数: 368ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: インプレス
対象読者
アルゴリズムの背景にある考え方を学びたい方、さまざまなアルゴリズムを知りたい方。
著者について
Imran Ahmad
Google認定インストラクター。長年にわたってGoogleとLearning Treeで講師をしており、Python、機械学習、アルゴリズム、ビッグデータ、ディープラーニングなどの指導を行っている。博士課程の研究では、線形計画法に基づくATSRAという新しいアルゴリズムを提案した。ATSRAはクラウドコンピューティング環境においてリソースを最適に割り当てるために利用できるアルゴリズムである。この4年間はカナダ連邦政府のAdvanced Analytics Solution Centerで機械学習プロジェクトに取り組んでいる。このプロジェクトは入国管理手続きを自動化できる機械学習アルゴリズムとして注目されている。現在は、複雑な機械学習モデルの訓練においてGPUを最適に活用するアルゴリズムの開発に取り組んでいる。
株式会社クイープ
目次
はじめに
目次
セクション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 アルゴリズムを選ぶ
- 1.5.5 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.2 単語埋め込みの特性
- 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 まとめ