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などを調整することで精度向上を図る
ということで、今回は以上です。次回は、畳み込みニューラルネットワークについて。
コメント