サマリー
Pythonは、簡単に学べること、読みやすいコードを書けること、広範囲にわたるアプリケーションに使えることなどの、多くの優れた特徴を持つ汎用プログラミング言語となる。Pythonは、1991年にGuido van Rossumによって開発されている。
Pythonは、比較的新しい言語であるため、オブジェクト指向プログラミング、手続き型プログラミング、関数型プログラミング等の様々な効果的なプログラミング手法を利用することができる。また、多くのライブラリやフレームワークが用意されているため、Webアプリケーション、デスクトップアプリケーション、科学技術計算、機械学習、人工知能などの分野に広く使われている。さらに、クロスプラットフォームであり、Windows、Mac、Linuxなどの多くのオペレーティングシステムで動作するという特徴を持つ。Pythonは、インタープリタ言語であるため、コンパイルの必要がなく、REPL的な仕組みを持つため、開発サイクルが早くなる。
ここでは「機械学習プログラミング達人データサイエンティストによる理論と実践」をベースにpythonを用いた機械学習のトピックについて述べている。
今回は読書メモについて述べる。
pythonによる機械学習
本書は『Python Machine Learning』の翻訳書であり、機械学習の理論とPython実践法を網羅的に解説した技術書となる。この中では、機械学習の方法について背景にある理論や特徴を解説した上で、Pythonによる実装法を説明している。また対応する内容としては初期の機械学習アルゴリズムから取り上げ、前処理や次元削減、Webへの展開のほか、終盤ではディープラーニングについて述べられている。またpythonの機械学習ライブラリとして著名なscikit-learnの説明書としても有用なものとなる。
内容は以下のものとなる。
第1章 「データから学習する能力」をコンピューターに与える 1.1 データを俊樹に帰る「知能機械」 1.2 3種類の機械学習 1.3「教師あり学習」による未来予測 1.3.1 クラスレベルを予測するための分類 1.3.2 連続値を予測するための知識 1.4 強化学習による対話問題の解決 1.5「教師なし学習」による隠れた構造の発見 1.5.1 クラスタリングによるグループの発見 1.5.2 データ圧縮のための次元削減 1.6 基本用語と表記法 1.7 機械学習システムを構築するためのロードマップ 1.8 前処理: データ整形 1.8.1 予測モデルのトレーニングと選択 1.8.2 モデルの評価と未知のインスタンスの予測 1.9 機械学習にPythonを用いる 1.9.1 Pythonパッケージのインストール まとめ 第2章 分類問題 - 機械学習アルゴリズムのトレーニング 2.1 人工ニューロン - 機械学習の前史 2.2 パーセプトロンの学習アルゴリズムをPythonで実装する 2.3 Irisデータセットでのパーセプトロンモデルのトレーニング 2.4 ADALINEと学習の収束 2.5 勾配降下法によるコスト関数の最小化 2.5.1 ADALINEをPythonで実装する 2.6 大規模な機械学習と確率的勾配降下法 まとめ 第3章 分類問題 - 機械学習ライプラリscikit-learnの活用 3.1 分類アルゴリズムの選択 3.2 scikit-learn活用へのファーストステップ 3.2.1 scikit-learnを使ったパーセプトロンのトレーニング 3.3 ロジスティック回帰を使ったクラス確率のモデリング 3.3.1 ロジスティック回帰の直感的知識と条件付き確率 3.3.2 ロジスティック関数の重みの学習 3.3.3 scikit-learnによるロジスティック回帰モデルのトレーニング 3.3.4 正則化による過学習への対応 3.4 サポートベクトルマシンによる最大マージン分類 3.4.1 最大マージンを直感的に理解する 3.4.2 スラック変数を使った非線形分離可能なケースへの対処 3.4.3 scikit-learnの代替実装 3.5 カーネルSVMを使った非線形問題の求解 カーネルトリックを使った分離超平面を高次元空間で特定する 3.6 決定木学習 3.6.1 情報利得の最大化 : 出来るだけ高い効率を得る 3.6.2 決定木の構築 3.6.3 ランダムフォレストを使って弱い学習アルゴリズムと強い学習アルゴリズムを結合する 3.7 K近傍法 怠惰学習アルゴリズム まとめ 第4章 データ前処理 より良いトレーニングセットの構築 4.1 欠測データへの対処 4.1.1 欠測値を持つサンプル/特徴量を取り除く 4.1.2 欠測値を補完する 4.1.3 scikit-learnの推定器API 4.2 カテゴリデータの処理 4.2.1 順序特徴量のマッピング 4.2.2 クラスラベルのエンコーディング 4.2.3 名義特徴量でのone-hotエンコーディング 4.2 データセットをトレーニングデータセットとテストデータセットに分割する 4.4 特徴量の尺度を整える 4.5 有益な特徴量の選択 4.5.1 L1正則化による疎な解 4.5.2 逐次特徴選択アルゴリズム 4.6 ランダムフォレスト特徴量の重要度にアクセスする まとめ 第5章 次元削減でデータを圧縮する 5.1 主成分分析による教師なし次元削減 5.1.1 共分散行列の固有値を求める 5.1.2 特徴変換 5.1.3 scikit-learnの主成分分析 5.2 線形判別分析による教師ありデータ圧縮 5.2.1 変動行列を計算する 5.2.2 特徴変換 5.2.3 新しいデータを投射する 5.2.4 sci-kit-learnによるLDA 5.3 カーネル主成分分析を使った非線形写像 5.3.1 カーネル関数とカーネルトリック 5.3.2 Pythonでカーネル主成分分析を実装する 5.3.3 新しいデータ点を射影する 5.3.4 scikit-learnのカーネル主成分分析 まとめ 第6章 モデルの評価とハイパーパラメータのチューニングのベストプラクティス 6.1 パイプラインによるワークフローの効率化 6.1.1 Breast Cancer Wisconsinデータセットを読み込む 6.1.2 パイプラインで変換器と推定器を結合する 6.2 k分割交差検証を使ったモデルの性能の評価 6.2.1 ホールドアウト法 6.2.2 k分解交差検証 6.3 学習曲線と検証曲線によるアルゴリズムの検証 6.3.1 学習曲線を使ってバイアスとバリアンスの問題を診断する 6.3.2 検証曲線を使って過学習と学習不足を明らかにする 6.4 グリッドリサーチによる機械学習モデルのチューニング 6.4.1 グリッドサーチを使ってハイパーパラメータをチューニングする 6.4.2 入れ子式の交差検証によるアルゴリズムの検証 6.5 様々な性能評価指標 6.5.1 混同行列を解釈する 6.5.2 分類モデルの混合率と再現率を最適化する 6.5.3 ROC曲線をプロットする 6.5.4 他クラス分類のための性能指標 まとめ 第7章 アンサンブル学習 - 異なるモデルの組み合わせ 7.1 アンサンブルによる学習 7.2 単純な多数決分類器の実装 7.2.1 多数決方式の分類アルゴリズムを組み合わせる 7.3 アンサンブル分類器の評価とチューニング 7.4 バギング: ブートストラップ標本を使った分類器アンサンブルの構築 7.5 アダブーストによる弱学習器の活用 まとめ
コメント
[…] pythonによる機械学習 […]