【機械学習アルゴリズム学習備忘録】ディープラーニング その2 – 実装編 –

【機械学習アルゴリズム学習備忘録】ディープラーニング その2 – 実装編 – プログラミング

Python機械学習アルゴリズム学習備忘録。今回はディープラーニングについて。今回は実装編です。

内容は、Udemy の「【世界で74万人が受講】基礎から理解し、Pythonで実装!機械学習26のアルゴリズムを理論と実践を通じてマスターしよう」で学んだ内容を自分用備忘録としてまとめたものです。
前回の記事で、基礎知識についてまとめたのでそちらも。

参考

みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習
【機械学習アルゴリズム学習備忘録】ディープラーニング その1 – 基礎編 –

Pythonによる実装 1 – ライブラリのインポート –

では早速、いつもの如くライブラリのインポートから。

import numpy as np
import pandas as pd
import matplotlib,pyplot as plt
import tensorflow as tf

tf.__version__ 
# tensorflowのバージョン確認。

Pythonによる実装 2 – データの前処理 –

次にデータの前処理。

dataset = pd.read_csv('ファイル名.csv')
X = dataset.iloc[:, 3:-1].values
y = dataset.iloc[:, -1].values
# ilocを使った値の取り出しはデータの中身に応じて適宜変える
目次に戻る

カテゴリ変数のエンコーディング

カテゴリ変数をエンコーディングしていく。

# LabelEncoderによるエンコーディング
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
X[:, 2] = le.fit_transform(X[:, 2])
# OneHotEncoderによるエンコーディング
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(tranfsormers = [('encoder', OneHotEncoder(), [1])
X = np.array(ct.fit_transform(X))
# ColumnTransformerを使うと、対象データが一番左(インデックス0)に移動する。

目次に戻る

フィーチャースケーリング

前回の記事でも少し触れたが、ディープラーニングにおいて標準化(フィーチャースケーリング)は必須ではない。ただし、複雑な演算になるので、フィーチャースケーリングをしたほうが精度が高くなりやすくなるので、標準化(フィーチャースケーリング)をするのが一般的。

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit_transform(X)

目次に戻る

訓練用とテスト用へのデータセットの分割

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

目次に戻る

Pythonによる実装 3 – ANNの構築 –

ここからANN(Artificial Neural Network)の構築を行っていく。

ANNのイニシャライズ

ann = tf.keras.models.Sequential()

# これまでのscikit-learnで実装してきた機械学習アルゴリズムと異なり、
# ニューラルネットワークの場合は、
# モデルの構造をすべて自分で構成していく必要がある。

目次に戻る

入力層と1つ目の隠れ層の追加

ann.add(tf.keras.layers.Dense(units = 6, activation = 'relu'))
# units : ノードの数。
# unitsなど、人間が自ら設定し、機械による演算処理の中で値が変わらないものを
# ハイパーパラメータという。ハイパーパラメータの設定内容は正解はなく、経験や勘によるところもあるみたい。

目次に戻る

2つ目の隠れ層の追加

ann.add(tf.keras.layers.Dense(units=6, activation='relu'))

目次に戻る

出力層の追加

ann.add(tf.keras.layers.Dense(units = 1, activation = "sigmoid"))
# 出力層のunitsは今回、演算の結果、一つの結果を得たいので、1としているが、問題の性質や得たい結果に応じて出力層のunitsは適宜調整する。

目次に戻る

ANNの訓練(学習)

いよいよANNの訓練を行っていく。

ANNのコンパイル

ann.compile(optimizer = "adam", loss = "binary_crossentropy", metrics = ["accuracy"])
# optimizer : 最適化関数。損失関数を減らしていく方式。
# 勾配降下法や確率的勾配降下法など。今回は、adamを使う。基本イメージは勾配降下法。
# loss: 損失関数。
# metrics : モデルの評価指標

訓練用データセットを使ったANNの訓練

ann.fit(X_train, y_train, batch_size = 32, epochs = 100)
# batch_size : データを特定の数の塊ごとに細かく分けることで、
# 過学習の回避や演算処理速度の向上を図る意図で設定されるもの。
# 一般的には、検証用データを入れて過学習していないかなどを測定する。

目次に戻る

Pythonによる実装 4 – 結果の予測とモデルの評価 –

最後に結果の予測とモデルの評価を行う。

テストデータによる結果の予測

y_pred = ann.predict(X_test)
y_pred = (y_pred > 0.5)
# そのまま予測結果を出すと、シグモイド関数を通した演算結果がそのまま出力され、値としてわかりにくい。
# なので、0.5で区切ることで分析をしやすくしている。
print(np.concatenate((y_pred.reshape(len(y_pred), 1), y_test.reshape(len(y_test), 1)), 1))

混同行列の作成

from sklearn.metrics import confusion_matrix, accuracy_score
cm = confusion_matrix(y_test, y_pred)
print(cm)
accuracy_score(y_test, y_pred)

# ハイパーパラメータやbatch_size, epochsなどを調整することで精度向上を図る

目次に戻る

ということで、今回は以上です。次回は、畳み込みニューラルネットワークについて。

【機械学習アルゴリズム学習備忘録】ディープラーニング その2 – 実装編 – 【機械学習アルゴリズム学習備忘録】ディープラーニング その2 – 実装編 –

コメント

タイトルとURLをコピーしました