学習中に利用したPythonのライブラリ/パッケージについて記述します。
為になるリンク
Python 機械学習ライブラリを23個一挙紹介!データ処理から深層学習まで完全網羅
ライブラリ一覧
-
NumPy
数値計算を効率的に行うための基本的なパッケージ。ベースN次元配列パッケージ。 -
Scipy
高度な科学計算を行うための基本的なライブラリ。 -
Scikit-learn
機械学習ライブラリ。 -
Pandas
データ解析を支援する機能を提供するライブラリ。CSV操作に便利。 -
matplotlib
PythonおよびNumPyのためのグラフ描画ライブラリ。包括的な2Dプロット。 -
seaborn
matplotlibに基づくPythonデータ視覚化ライブラリ。見やすい。 -
PyTorch
GPUとCPUを使用した深層学習用に最適化されたテンソルライブラリ -
Tensorflow
機械学習に用いるためのソフトウェアライブラリ。 -
Keras
機械学習プラットフォームTensorFlow上で実行されるディープラーニングAPI。 -
DEAP
進化的計算フレームワーク -
(未)IPython
強化されたインタラクティブコンソール -
(未)SymPy
記号数学 -
Optuna
ハイパーパラメータ自動最適化フレームワーク
NumPy
多次元配列オブジェクト(ndarray
)、様々な派生オブジェクト(マスクされた配列や行列など)、
そして、数学的、論理的、形状操作、ソート、選択、I/O、離散フーリエ変換、基本的な線形代数、基本的な統計演算、ランダムシミュレーションなど、配列に対する高速な操作のためのルーチンの数々を提供するPythonライブラリ。
**関数メモ**
# 0または1で3*3のndarrayをランダムに作成
ndarr = np.random.randint(0, 2, (3, 3))
# numpy配列(ndarray)内の値を正否反転
np.logical_not(ndarr)
Scipy
数値積分、補間、最適化、線形代数、統計など、多くのユーザーフレンドリーで効率的な数値ルーチンを提供する。
リンク
(公式):リファレンス
**関数メモ**
Scikit-learn
機械学習ライブラリ。サイキットラーンと読む。
以下の様な様々な分類、回帰、クラスタリングアルゴリズムを備えており、Pythonの数値計算ライブラリのNumPyとSciPyとやり取りするよう設計されている。サンプルデータセットも多数用意されている。
- サポートベクターマシン(SVM)
- ランダムフォレスト
- Gradient Boosting
- k-近傍法
- DBSCAN など...
リンク
(公式):リファレンス
scikit-learn「アルゴリズム・チートシート」
Scikit-learn 備忘録 → 情報が膨大な為、別記事作成。
Pandas
データ解析を支援する機能を提供するライブラリ。
特に、数値テーブルと時系列を操作するためのデータ構造と操作を提供する。
DataFrame
などの独自のデータ構造が提供されており、様々な処理が可能。
表形式のデータをSQLまたはRのように操作することができ、かつ高速で処理出来る。
リンク
(公式):リファレンス
Pandas でデータフレームを扱う
**関数メモ**
# データの詳細を確認する方法(pandas_profiling )
!pip install -U -q pandas_profiling
from pandas_profiling import ProfileReport
# レポートの作成 df:DataFrame
report = ProfileReport(df)
report
matplotlib
PythonおよびNumPyのためのグラフ描画ライブラリ。
オブジェクト指向のAPIを提供しており、様々な種類のグラフを描画する能力を持つ。
描画できるのは主に2次元のプロットだが、3次元プロットの機能も追加されてきている。
リンク
(公式):APIの概要
matplotlib でグラフ作成
**関数メモ**
# 画像-----------------------------------------------------------
# 画像の表示
import matplotlib.pyplot as plt
# 灰色で表示
plt.imshow(img, cmap = "gray")
plt.show()
# 並べて画像表示
n_data = 4 # 表示するデータ数
row= 2 # 行数
col= 2 # 列数
fig, ax = plt.subplots(nrows=row, ncols=col)
for i, img in enumerate(list_img):
_r= i//col
_c= i%col
ax[_r,_c].axes.xaxis.set_visible(False) # X軸を非表示に
ax[_r,_c].axes.yaxis.set_visible(False) # Y軸を非表示に
ax[_r,_c].imshow(img, cmap='gray') # 画像を表示
# -----------------------------------------------------------
seaborn
データ可視化ライブラリ。
魅力的で有益な統計グラフィックを描画するための高レベルのインターフェイスを提供する。
洗練された図を描くことができ、matplotlibと比べて少ないコードで図が描ける。
リンク
(公式):リファレンス
Seaborn でグラフ作成
**関数メモ**
PyTorch
コンピュータビジョンや自然言語処理で利用されているTorchを元に作られた、Pythonのオープンソースの機械学習ライブラリ。
PyTorchは次の2つの高度な機能を備えている。
- 強力なGPUサポートを備えた(NumPyのような)
Tensor
演算ができる - テープベースの自動微分システムの上に構築された深層ニューラルネットワークが利用できる
リンク
(公式):PYTORCH DOCUMENTATION
**関数メモ**
# Pytorch tensor と numpy ndarray の変換
# numpy → tensor
x = torch.from_numpy(x.astype(np.float32)).clone()
# tensor to numpy
x = x.to('cpu').detach().numpy().copy()
# 前方次元追加し、tensor(float32)に変換
torch.tensor(x.values.reshape(1, -1), dtype=torch.float32)
# 訓練データセットの属性を確認
vars(train_dataset)
# 分類クラスの確認
train_dataset.classes
# モデルにcuda指定
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
net = net.to(device)
PyTorchエコシステム
PyTorchに対する新機能の追加や学習・推論の高速化などを支援するツールやライブラリを認定するもの。画像処理や自然言語処理などのパッケージライブラリが存在する。
pytorch_lightning
ディープラーニングフレームワーク
**関数メモ**
# アーキテクチャの確認
net = Net().cuda() # GPU
summary(net, input_size=(1, 100, 100))
torchvision
一般的なデータセット、モデルアーキテクチャ、およびコンピュータビジョン用の一般的な画像変換で構成されている。
Tensorflow
Googleが開発しオープンソースで公開している、機械学習に用いるためのソフトウェアライブラリ。
ニューラルネットワークなどの機械学習のアプリケーションに適用できる多くのシンボリックな数学ライブラリが用意されている。
TensorFlow の高レベル API は、ニューラル ネットワークを定義しトレーニングするための Keras API 仕様をベースとしている。
リンク
(公式):All symbols in TensorFlow 2
pytorch Tensor操作チートシート
Keras
Pythonで記述されたディープラーニングAPIであり、機械学習プラットフォームTensorFlow上で実行される。
ディープニューラルネットワークを用いた迅速な実験を可能にするよう設計され、最小限、モジュール式、拡張可能であることに重点を置いて開発された。
現在はTensorFlowに取り込まれ、tf.kerasの形で使われるのが一般的。
リンク
(公式):リファレンス ※日本語サイトもあるがサイドバーが見づらい。。
DEAP
進化的計算フレームワーク。
アルゴリズムを明示的にし、データ構造を透過的にすることを目指している。
リンク
(公式):リファレンス
遺伝的アルゴリズム
データ(解の候補)を遺伝子で表現した「個体」を複数用意し、適応度の高い個体を優先的に選択して交叉・突然変異などの操作を繰り返しながら解を探索する。
Optuna
ディープラーニングの各種のパラメータを自動で調整するライブラリ。
**関数メモ**
# SVCによるハイパーパラメータの探索
def objective(trial, x, t, cv):
# 1.ハイパーパラメータごとに探索範囲を指定
# C = trial.suggest_loguniform(name, low, high) # 連続パラメーターの値
# C = trial.suggest_int(name, low, high[, step, log]) # integerパラメーターの値
# gamma = trial.suggest_categorical(name, choices) # カテゴリパラメータの値
C = trial.suggest_int('C', 2, 100)
gamma = trial.suggest_categorical('gamma', ['scale', 'auto'])
# 2.学習に使用するアルゴリズムを指定
estimator = SVC(C=C, gamma=gamma)
# 3.学習の実行、検証結果の表示
trial.params # 最適化するパラメータを返す。
cross_val_score(estimator, x, t, cv=cv).mean() # 正解率
return accuracy
cv = 5 # 交差検証の分割数
# study オブジェクトの作成
study = optuna.create_study(direction='maximize') # direction:最適化の方向
# 目的関数を最適化(10 回試行)
study.optimize(lambda trial: objective(trial, x_train, t_train, cv), n_trials=10)
# 最高の検証結果を返す。
study.best_trial
備考
NumPyとScipyの違い
NumpyはScipyと比べると機能がコンパクト。
matplotlibとseabornの違い
SeabornはMatplotlibの使い勝手を良くしたライブラリ。
Pythonの可視化パッケージの使い分け
ディープラーニング(深層学習)フレームワークの違い
TensorflowとKeras、PyTorchの比較