【本書の概要】
機械学習やデータサイエンスを扱う現場では、Pythonの高機能で利用しやすい数学・科学系ライブラリが活用されています。本書は、その中でも機械学習・データサイエンスの現場でよく利用されているNumPyをピックアップ。Numpyの基本から始まり、現場で使える実践的な高速データ処理手法について解説します。特に、配列の処理に力点を置いています。最終章では機械学習における実践的なデータ処理手法について解説します。
【第2版の変更点】
・Python 3.11に対応
・NumPy 1.25に対応
・各種ライブラリのアップデート
【NumPy(ナンパイ)とは】
NumPyは、機械学習・データサイエンスの現場で扱うことの多い多次元配列(行列やベクトル)を処理する高水準の数学関数が充実しているライブラリです。Python単体では遅い処理であっても、C言語なみに高速化できるケースもあり、機械学習・データサイエンスにおけるデータ処理に欠かせないライブラリとなっています。
【対象読者】
・機械学習エンジニア
・データサイエンティスト
【目次】
Chapter1 NumPyの基本
Chapter2 NumPy配列を操作する関数を知る
Chapter3 NumPyの数学関数を使う
Chapter4 NumPyで機械学習を実装する
【著者プロフィール】
吉田拓真(よしだ・たくま)
データサイエンス関連のサービスを提供する株式会社Spot 代表取締役社長。Webメディア『DeepAge』編集長。
尾原 颯(おはら・そう)
東京大学工学部機械工学科所属。大学ではハードウェア寄りの勉強が多め。趣味はアカペラとテニス。基本的に運動が好き。最近、ランニングを始める。
NumPyの基本からNumPy配列を操作する関数について解説します。
NumPyに用意されている数学関数に触れながら、データ処理の方法を解説します。
NumPyを使い機械学習の基本を解説します。またNumPyの数学関数を利用したニューラルネットワークと強化学習の構築方法についても解説します。
Chapter 1 NumPyの基本
1.1 NumPyの基本とインストール方法
1.1.1 NumPy入門
1.1.2 Pythonのインストール
1.1.3 NumPyのインストール方法
1.1.4 NumPyチュートリアル
1.2 多次元データ構造ndarrayの基礎
1.2.1 ndarray
1.2.2 属性(attributes)
1.2.3 Memory Layout
1.2.4 ストライド
1.2.5 ブロードキャスト
1.3 ブロードキャスト
1.3.1 ブロードキャストとは
1.3.2 ブロードキャストでは何が起こっているのか
1.4 スライシング
1.4.1 スライシングとは
1.4.2 スライシングの使い方
1.4.3 多次元への拡張
1.5 軸(axis)と次元数(ndim)について
1.5.1 ndarrayの次元数(ndim)とは何か
1.5.2 axisについて
1.5.3 関数の引数としてのaxis
1.6 ndarrayの属性(attribute)shape
1.6.1 ndarray.shape
1.7 要素のデータ型(dtype)の種類と指定方法
1.7.1 dtypeが必要な理由
1.7.2 データ型
1.8 コピー(copy)とビュー(view)の違い
1.8.1 そもそもcopyとviewとは何なのか
1.8.2 操作による違い
1.8.3 配列の1次元化
1.8.4 fancy indexing
1.8.5 copyかviewか確かめる方法
Chapter2 NumPy配列を操作する関数を知る
2.1 配列を形状変換するreshape
2.1.1 np.reshape
2.1.2 np.resize
2.1.3 ndarray.resize
2.1.4 np.reshapeとnp.resizeなどとの違いのまとめ
2.2 配列末尾へ要素を追加するappend
2.2.1 Pythonのlistのappendメソッド
2.2.2 np.append
2.2.3 速度比較
2.3 配列の真偽判定に役立つallとany
2.3.1 np.all
2.3.2 np.any
2.4 条件を満たす要素のインデックスを取得するwhere
2.4.1 np.where
2.4.2 条件の指定
2.4.3 np.whereを使った三項演算子
2.5 最大値、最小値を抜き出すamax、maxとamin、min
2.5.1 np.amax
2.5.2 np.ndarray.max
2.5.3 np.amin
2.5.4 np.ndarray.min
2.6 配列の最大要素のインデックスを返すargmax
2.6.1 np.ndarray.argmax
2.6.2 np.argmax
2.6.3 np.ndarray.argmin
2.6.4 np.argmin
2.7 配列の軸の順序を入れ替えるtranspose
2.7.1 「軸のデータを入れ替える」とはどういうことなのか
2.7.2 np.ndarray.transpose
2.7.3 np.transpose
2.7.4 np.ndarray.T
2.8 ソートをするsortとargsort
2.8.1 np.sort
2.8.2 np.argsort
2.8.3 kindで指定可能なquicksort、mergesort、stable、heapsortについて
2.8.4 引数orderについて
2.8.5 np.sortとnp.ndarray.sort
2.9 配列同士を連結する、 NumPyのvstackとhstackの使い方
2.9.1 np.hstack
2.9.2 np.vstack
2.10 データを可視化するmatplotlibの使い方
2.10.1 matplotlibのインストール方法
2.10.2 matplotlibを利用する環境の準備
2.10.3 サイン波のプロット
2.10.4 いろいろなグラフのプロット
2.10.5 複数のサイン波を重ね合わせたプロット
2.11 要素がゼロの配列を生成する関数のまとめ
2.11.1 np.zeros
2.11.2 np.emptyとnp.zerosとの違い
2.11.3 np.zeros_like
2.12 要素が1の配列を生成するones
2.12.1 np.ones
2.12.2 np.ones_like
2.13 連番や等差数列を生成するarange
2.13.1 Pythonのrange関数
2.13.2 等差数列
2.13.3 np.arange
2.14 線形に等間隔な数列を生成するlinspace
2.14.1 np.linspace
2.15 単位行列を生成するeyeとidentity
2.15.1 単位行列と正方行列
2.15.2 2つの関数の違い
2.15.3 np.eye
2.15.4 np.identity
2.16 未初期化の配列を生成するempty
2.16.1 np.empty
2.16.2 他の生成関数との比較
2.17 randomモジュールを使った配列操作・乱数生成方法
2.17.1 一様乱数を生成
2.17.2 生成する乱数を固定する
2.17.3 リストからのランダムな抽出、リストのシャッフル
2.17.4 リストのシャッフル
2.17.5 特定の確率分布に従った乱数の生成
2.17.6 ヒストグラムを使った分布の確認
2.18 配列を1次元に変換するflatten
2.18.1 np.ndarray.flatten
2.18.2 パフォーマンス
2.19 loadtxtとsavetxtを使ってテキストファイルを読み書きする
2.19.1 それぞれの関数の特徴
2.19.2 np.loadとnp.saveの特徴
2.19.3 np.loadtxtとnp.savetxtの特徴
2.19.4 np.loadtxt
2.19.5 np.savetxt
2.19.6 np.genfromtxt
2.20 配列データをそのまま読み書きするloadとsave
2.20.1 np.save
2.20.2 np.load
2.21 bufferをndarrayに高速変換するfrombuffer
2.21.1 np.frombuffer
2.21.2 音声ファイルを配列に収納する時間を比較
2.22 非ゼロ要素を抽出するnonzero
2.22.1 np.nonzero
2.22.2 np.ndarray.nonzero
2.22.3 np.where、np.argwhereとの比較
2.23 flattenよりも高速に配列を1次元化するravel
2.23.1 np.ravel
2.23.2 np.ndarray.ravel
2.23.3 引数orderについて
2.23.4 numpy.ndarray.flattenとの違い
2.24 配列をタイル状に並べるtile
2.24.1 np.tile
2.24.2 np.tileとブロードキャスト
2.25 新しく配列に次元を追加するnp.newaxisオブジェクト
2.25.1 np.newaxisオブジェクトを用いた次元追加
2.25.2 np.reshapeでの代用
2.25.3 np.newaxisとnp.reshapeの比較
2.26 要素の差分と足し合わせを計算するdiffとcumsum
2.26.1 np.diff
2.26.2 np.cumsum
2.26.3 np.ndarray.cumsum
2.27 多次元配列の結合を行うnp.c_とnp.r_オブジェクト
2.27.1 np.c_とnp.r_の特徴
2.27.2 np.r_
2.27.3 np.c_
Chapter 3 NumPyの数学関数を使う
3.1 NumPyの数学関数・定数のまとめ
3.1.1 四則演算
3.1.2 累乗(np.power)・平方根(np.sqrt)
3.1.3 三角関数
3.1.4 指数関数、対数関数
3.1.5 双曲線関数(hyperbolic)
3.1.6 切り捨て、切り上げ、四捨五入
3.1.7 複素数
3.1.8 絶対値
3.1.9 数学的な定数の呼び出し
3.2 要素の平均を求めるaverageとmean
3.2.1 np.average
3.2.2 np.mean
3.2.3 np.ndarray.mean
3.2.4 np.averageとnp.meanの違い
3.3 要素の中央値を計算するmedian
3.3.1 中央値(メジアン)
3.3.2 np.median
3.4 要素の和を求めるsum
3.4.1 np.sum
3.4.2 np.ndarray.sum
3.5 標準偏差を計算するstd
3.5.1 標準偏差
3.5.2 np.std
3.6 分散を求めるvar
3.6.1 分散
3.6.2 np.var
3.7 共分散を求めるcov
3.7.1 共分散
3.7.2 np.cov
3.8 相関係数を求めるcorrcoef
3.8.1 相関係数
3.8.2 定義
3.8.3 np.corrcoef
3.9 配列の要素から格子列を生成するmeshgrid
3.9.1 格子点
3.9.2 np.meshgrid
3.9.3 グラフでの利用
3.10 内積を計算するdot
3.10.1 数学(ベクトルの内積や行列の積)のおさらい
3.10.2 shapeの変化について
3.10.3 np.dot
3.11 行列式を求めるlinalg.det
3.11.1 行列式について
3.11.2 np.linalg.det
3.12 行列の固有値や固有ベクトルを求めるlinalg.eig
3.12.1 固有値と固有ベクトル
3.12.2 固有値、固有ベクトルの求め方
3.12.3 np.linalg.eig
3.13 行列の階数(ランク)を求めるrank
3.13.1 行列の階数(ランク)
3.13.2 np.linalg.matrix_rank
3.14 逆行列を求めるinv
3.14.1 逆行列とは
3.14.2 逆行列の求め方
3.14.3 np.linalg.inv
3.15 直積を求めるouter
3.15.1 直積(outer)とは
3.15.2 np.outer
3.16 外積を求めるcross
3.16.1 外積とは
3.16.2 np.cross
3.17 畳み込み積分や移動平均を求めるconvolve
3.17.1 np.convolve
3.17.2 畳み込み積分(コンボリューション積分)
Chapter 4 NumPyで機械学習を実装する
4.1 配列の正規化(normalize)、標準化をする方法
4.1.1 データの正規化
4.1.2 z-score normalization(標準化)
4.1.3 min-max normalization
4.1.4 ベクトルなどの正規化
4.2 線形回帰をNumPyで実装する
4.2.1 線形回帰とは
4.2.2 損失関数の設定
4.2.3 学習の進め方
4.2.4 NumPyで実装する
4.2.5 関数で多項式フィッティングを行う
4.2.6 まとめ
4.3 NumPyでニューラルネットワークを実装する: 基本編
4.3.1 本節の学習の前に
4.3.2 人間が持つ認知メカニズム
4.3.3 計算機にとって難しく、人間にとって簡単なこと
4.3.4 脳の神経細胞
4.3.5 視覚による物体の認識
4.4 NumPyでニューラルネットワークを実装する: 理論編
4.4.1 ニューラルネットワーク
4.4.2 神経細胞の模倣
4.4.3 パラメータの導入
4.4.4 損失関数の設定
4.4.5 学習の進め方
4.5 NumPyでニューラルネットワークを実装する: 実装編
4.5.1 NumPyでの実装
4.5.2 データセットの用意
4.5.3 訓練用データとテスト用データに分ける
4.5.4 ニューラルネットワークの構築
4.5.5 まとめ
4.6 NumPyでニューラルネットワークを実装する: 多層化と誤差逆伝播法編
4.6.1 ニューラルネットワークの拡張と誤差逆伝播法
4.6.2 多層ニューラルネットワークへの拡張
4.6.3 誤差逆伝播法
4.6.4 まとめ
4.7 NumPyでニューラルネットワークを実装する: 文字認識編
4.7.1 NumPyで実装する(MNIST)
4.7.2 ネットワークの構築
4.7.3 学習を進める
4.7.4 まとめ
4.8 NumPyで強化学習を実装する
4.8.1 Gymnasiumとは
4.8.2 インストールからゲームの実行まで
4.8.3 Q学習
4.8.4 np.digitize
4.8.5 方策勾配法
4.8.6 まとめ
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。