インプレス[コンピュータ・IT]ムック プログラマーなら知っておきたい40のアルゴリズム 定番・最新系をPythonで実践!
インプレス / 2021年10月19日 / 全367ページ
さまざまなアルゴリズムを一挙に把握できる。問題解決力、データ活用力を養成!>>本書は、アルゴリズムの基本から始まり、検索やソートなどの実例を示します。より複雑なアルゴリズムとしては、線形計画法、ページランキング、グラフアルゴリズムを説明。機械学習アルゴリズム背後のロジックも理解できるようにします。不正分析やレコメンデーションエンジンのケーススタディを取り上げ、データ処理・大規模処理・暗号化のアルゴリズムも紹介。本書は、さまざまなアルゴリズムを活用したい方にとってその手掛かりとなるガイドブックです。
目次
- サンプルコード・正誤表・免責など
- 献辞
- 著者・レビューア紹介
- はじめに
- 目次
- セクション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 基本原理と基本的なアルゴリズム
- 第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 NLTK9.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 まとめ
- 索引
- 著者・翻訳者プロフィール
- 奥付
※このデジタル雑誌には目次に記載されているコンテンツが含まれています。それ以外のコンテンツは、本誌のコンテンツであっても含まれていません のでご注意ください。
※電子版では、紙の雑誌と内容が一部異なる場合や、掲載されないページがある場合があります。