KerasとTensorFlowを使用して従業員の定着率を予測するディープラーニングモデルを構築する方法
序章
Keras は、Pythonで記述されたニューラルネットワークAPIです。 TensorFlow 、 CNTK 、またはTheano上で実行されます。 これは、これらの深層学習フレームワークの高レベルの抽象化であるため、実験がより速く簡単になります。 Kerasはモジュール式です。つまり、開発者はモジュールを追加することでモデルをすばやく拡張できるため、実装はシームレスです。
TensorFlowは、機械学習用のオープンソースソフトウェアライブラリです。 配列を含む計算で効率的に機能します。 したがって、このチュートリアルで作成するモデルに最適です。 さらに、TensorFlowを使用すると、CPUまたはGPUでコードを実行できます。これは、大規模なデータセットを操作する場合に特に便利な機能です。
このチュートリアルでは、従業員が会社を辞める確率を予測するディープラーニングモデルを構築します。 最高の従業員を維持することは、ほとんどの組織にとって重要な要素です。 モデルを構築するには、Kaggleで入手可能なこのデータセットを使用します。このデータセットには会社の従業員の満足度を測定する機能があります。 このモデルを作成するには、Keras シーケンシャルレイヤーを使用して、モデルのさまざまなレイヤーを構築します。
前提条件
このチュートリアルを開始する前に、次のものが必要です。
- マシン上のAnaconda開発環境。
- JupyterNotebookのインストール。 Anacondaは、インストール中にJupyterNotebookをインストールします。 このチュートリアルに従って、JupyterNotebookをナビゲートして使用する方法についてのガイドを入手することもできます。
- 機械学習に精通していること。
ステップ1—データの前処理
データ前処理は、深層学習モデルが受け入れることができる方法でデータを準備するために必要です。 データにカテゴリ変数がある場合、アルゴリズムは数値のみを受け入れるため、それらを数値に変換する必要があります。 カテゴリ変数は、名前で表される定量的データを表します。 このステップでは、を使用してデータセットを読み込みます pandas
、これはデータ操作Pythonライブラリです。
データの前処理を開始する前に、環境をアクティブ化し、必要なすべてのパッケージがマシンにインストールされていることを確認します。 使用すると有利です conda
インストールする keras
と tensorflow
これらのパッケージに必要な依存関係のインストールを処理し、それらが互換性があることを確認するためです keras
と tensorflow
. このように、Anaconda Pythonディストリビューションを使用することは、データサイエンス関連のプロジェクトに適しています。
前提条件のチュートリアルで作成した環境に移動します。
- conda activate my_env
次のコマンドを実行してインストールします keras
と tensorflow
:
- conda install tensorflow keras
次に、JupyterNotebookを開いて開始します。 ターミナルで次のコマンドを入力すると、JupyterNotebookが開きます。
- jupyter notebook
注:リモートサーバーから作業している場合は、SSHトンネリングを使用してノートブックにアクセスする必要があります。 SSHトンネリングの設定手順の詳細については、前提条件チュートリアルのステップ2に再度アクセスしてください。 ローカルマシンから次のコマンドを使用して、SSHトンネルを開始できます。
- ssh -L 8888:localhost:8888 your_username@your_server_ip
Jupyter Notebookにアクセスした後、 anaconda3 ファイルをクリックし、画面上部の New をクリックし、 Python3を選択して新しいノートブックをロードします。
次に、プロジェクトに必要なモジュールをインポートしてから、データセットをノートブックセルにロードします。 をロードします pandas
データを操作するためのモジュールと numpy
データをに変換するため numpy
アレイ。 また、文字列形式のすべての列を、コンピューターで処理できるように数値に変換します。
次のコードをノートブックセルに挿入し、実行をクリックします。
import pandas as pd
import numpy as np
df = pd.read_csv("https://raw.githubusercontent.com/mwitiderrick/kerasDO/master/HR_comma_sep.csv")
インポートしました numpy
と pandas
. その後、 pandas
モデルのデータセットをロードします。
を使用して、作業しているデータセットを垣間見ることができます head()
. これはからの便利な機能です pandas
これにより、データフレームの最初の5つのレコードを表示できます。 次のコードをノートブックセルに追加して実行します。
df.head()
次に、カテゴリ列を数値に変換します。 これを行うには、それらをダミー変数に変換します。 ダミー変数は通常、カテゴリ機能の有無を示す1と0です。 このような状況では、最初のダミーをドロップすることで、ダミー変数トラップも回避します。
注:ダミー変数トラップは、2つ以上の変数が高度に相関している状況です。 これにより、モデルのパフォーマンスが低下します。 したがって、ダミー変数を1つ削除して、常にN-1個のダミー変数を残します。 N-1個のダミー変数を使用している限り、優先順位がないため、任意のダミー変数を削除できます。 この例は、オン/オフスイッチがある場合です。 ダミー変数を作成すると、2つの列が得られます。 on
列と off
桁。 スイッチがオンになっていない場合はオフになっているため、列の1つを削除できます。
このコードを次のノートブックセルに挿入して実行します。
feats = ['department','salary']
df_final = pd.get_dummies(df,columns=feats,drop_first=True)
feats = ['department','salary']
ダミー変数を作成する2つの列を定義します。 pd.get_dummies(df,columns=feats,drop_first=True)
従業員の定着モデルに必要な数値変数を生成します。 それは変換することによってこれを行います feats
カテゴリ変数から数値変数まで定義します。
データセットをロードし、給与と部門の列を次の形式に変換しました keras
深層学習モデルは受け入れることができます。 次のステップでは、データセットをトレーニングとテストのセットに分割します。
ステップ2—トレーニングとテストのデータセットを分離する
scikit-learn を使用して、データセットをトレーニングセットとテストセットに分割します。 これは、従業員データの一部を使用してモデルをトレーニングし、その一部を使用してそのパフォーマンスをテストできるようにするために必要です。 この方法でデータセットを分割することは、深層学習モデルを構築する際の一般的な方法です。
構築するモデルがトレーニングプロセス中にテストデータにアクセスできないように、この分割をデータセットに実装することが重要です。 これにより、モデルはトレーニングデータからのみ学習し、テストデータを使用してそのパフォーマンスをテストできます。 トレーニングプロセス中にモデルをテストデータに公開すると、期待される結果が記憶されます。 その結果、見たことのないデータを正確に予測することはできません。
まず、インポートします train_test_split
からのモジュール scikit-learn
パッケージ。 これは、分割機能を提供するモジュールです。 このコードを次のノートブックセルに挿入して、以下を実行します。
from sklearn.model_selection import train_test_split
とともに train_test_split
インポートされたモジュール、あなたは使用します left
データセットの列を使用して、従業員が会社を辞めるかどうかを予測します。 したがって、深層学習モデルがこの列に接触しないことが重要です。 以下をセルに挿入して、 left
桁:
X = df_final.drop(['left'],axis=1).values
y = df_final['left'].values
深層学習モデルは、データを配列として取得することを期待しています。 したがって、numpyを使用してデータをに変換します numpy
配列 .values
属性。
これで、データセットをテストおよびトレーニングセットに変換する準備が整いました。 トレーニングと30% fまたはテストに70% ofのデータを使用します。 トレーニングプロセスではほとんどのデータを使用する必要があるため、トレーニング比率はテスト比率よりも高くなります。 必要に応じて、80% fまたはトレーニングセットと20% fまたはテストセットの比率で実験することもできます。
次に、このコードを次のセルに追加して実行し、トレーニングデータとテストデータを指定された比率に分割します。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
これで、データがKerasが期待するタイプに変換されました(numpy
配列)、データはトレーニングとテストのセットに分割されます。 このデータをに渡します keras
チュートリアルの後半でモデル化します。 事前にデータを変換する必要があります。これは次のステップで完了します。
ステップ3—データの変換
ディープラーニングモデルを構築する場合、計算をより効率的にするために、通常、データセットをスケールすることをお勧めします。 このステップでは、を使用してデータをスケーリングします StandardScaler
; これにより、データセット値の平均がゼロになり、単位変数が確実になります。 これにより、データセットが正規分布するように変換されます。 を使用します scikit-learn
StandardScaler
同じ範囲内にあるように機能をスケーリングします。 これにより、値が平均0、標準偏差1になるように変換されます。 異なる測定値を持つ機能を比較しているため、この手順は重要です。 そのため、通常、機械学習で必要になります。
トレーニングセットとテストセットをスケーリングするには、このコードをノートブックセルに追加して実行します。
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
ここでは、インポートすることから始めます StandardScaler
そしてそのインスタンスを呼び出します。 次に、 fit_transform
トレーニングとテストのセットをスケーリングする方法。
すべてのデータセット機能を同じ範囲内にスケーリングしました。 次のステップで、人工ニューラルネットワークの構築を開始できます。
ステップ4—人工ニューラルネットワークの構築
今、あなたは使用します keras
ディープラーニングモデルを構築します。 これを行うには、インポートします keras
、使用します tensorflow
デフォルトではバックエンドとして。 から keras
、次にインポートします Sequential
人工ニューラルネットワークを初期化するモジュール。 人工ニューラルネットワークは、人間の脳の働きからインスピレーションを得て構築された計算モデルです。 をインポートします Dense
モジュールも同様に、深層学習モデルにレイヤーを追加します。
深層学習モデルを構築するときは、通常、次の3つのレイヤータイプを指定します。
- 入力レイヤーは、データセットの機能を渡すレイヤーです。 このレイヤーで発生する計算はありません。 隠しレイヤーに機能を渡すのに役立ちます。
- 非表示レイヤーは通常、入力レイヤーと出力レイヤーの間のレイヤーであり、複数存在する場合があります。 これらのレイヤーは計算を実行し、情報を出力レイヤーに渡します。
- 出力層は、モデルのトレーニング後に結果を提供するニューラルネットワークの層を表します。 出力変数の生成を担当します。
をインポートするには Keras
, Sequential
、 と Dense
モジュールの場合、ノートブックセルで次のコードを実行します。
import keras
from keras.models import Sequential
from keras.layers import Dense
使用します Sequential
レイヤーの線形スタックを初期化します。 これは分類問題であるため、分類変数を作成します。 分類問題は、データにラベルを付け、ラベル付けされたデータに基づいていくつかの予測を行いたいタスクです。 このコードをノートブックに追加して、分類変数を作成します。
classifier = Sequential()
使用した Sequential
分類器を初期化します。
これで、ネットワークへのレイヤーの追加を開始できます。 次のセルで次のコードを実行します。
classifier.add(Dense(9, kernel_initializer = "uniform",activation = "relu", input_dim=18))
を使用してレイヤーを追加します .add()
分類器で関数を実行し、いくつかのパラメーターを指定します。
-
最初のパラメータは、ネットワークに必要なノードの数です。 異なるノード間の接続は、ニューラルネットワークを形成するものです。 ノードの数を決定するための戦略の1つは、入力層と出力層のノードの平均を取ることです。
-
2番目のパラメータは
kernel_initializer.
深層学習モデルを適合させると、重みはゼロに近い数値に初期化されますが、ゼロには初期化されません。 これを実現するには、一様分布初期化子を使用します。kernel_initializer
重みを初期化する関数です。 -
3番目のパラメータは
activation
関数。 深層学習モデルは、この関数を通じて学習します。 通常、線形および非線形の活性化関数があります。 relu 活性化関数を使用するのは、データを適切に一般化するためです。 一次関数は直線を形成するため、このような問題には適していません。 -
最後のパラメータは
input_dim
、データセット内の特徴の数を表します。
次に、予測を提供する出力レイヤーを追加します。
classifier.add(Dense(1, kernel_initializer = "uniform",activation = "sigmoid"))
出力レイヤーは次のパラメーターを取ります。
-
出力ノードの数。 従業員が会社を辞めた場合、1つの出力が得られると期待します。 したがって、1つの出力ノードを指定します。
-
為に
kernel_initializer
sigmoid 活性化関数を使用して、従業員が退職する確率を取得できます。 3つ以上のカテゴリを扱っている場合は、softmaxアクティベーション関数を使用します。これはsigmoid
活性化関数。
次に、最急降下法をニューラルネットワークに適用します。 これは、トレーニングプロセス中のエラーを減らすために機能する最適化戦略です。 最急降下法は、コスト関数を減らすことによって、ニューラルネットワークにランダムに割り当てられた重みを調整する方法です。これは、ニューラルネットワークから期待される出力に基づいてニューラルネットワークのパフォーマンスを測定します。
最急降下法の目的は、誤差が最小になるポイントを取得することです。 これは、コスト関数が最小である場所を見つけることによって行われます。これは、ローカル最小と呼ばれます。 最急降下法では、特定のポイントで勾配を見つけ、勾配が負か正かを調べるために微分します。つまり、コスト関数の最小値に下降します。 最適化戦略にはいくつかの種類がありますが、次のような一般的な戦略を使用します。 adam
このチュートリアルでは。
このコードをノートブックセルに追加して実行します。
classifier.compile(optimizer= "adam",loss = "binary_crossentropy",metrics = ["accuracy"])
最急降下法の適用は、 compile
次のパラメータを受け取る関数:
optimizer
最急降下法です。loss
最急降下法で使用する関数です。 これはバイナリ分類の問題であるため、binary_crossentropy
loss
関数。- 最後のパラメータは
metric
モデルの評価に使用します。 この場合、予測を行う際の精度に基づいて評価する必要があります。
これで、分類子をデータセットに適合させる準備が整いました。 Kerasはこれを可能にします .fit()
方法。 これを行うには、次のコードをノートブックに挿入して実行し、モデルをデータセットに適合させます。
classifier.fit(X_train, y_train, batch_size = 10, epochs = 1)
The .fit()
メソッドはいくつかのパラメーターを取ります:
-
最初のパラメーターは、機能を備えたトレーニングセットです。
-
2番目のパラメーターは、予測を行う列です。
-
The
batch_size
各トレーニングラウンドでニューラルネットワークを通過するサンプルの数を表します。 -
epochs
データセットがニューラルネットワークを介して渡される回数を表します。 エポックが多いほど、モデルの実行にかかる時間が長くなり、より良い結果が得られます。
ディープラーニングモデルを作成し、コンパイルして、データセットに適合させました。 ディープラーニングモデルを使用して、いくつかの予測を行う準備ができました。 次のステップでは、モデルがまだ表示していないデータセットを使用して予測を開始します。
ステップ5—テストセットで予測を実行する
予測を開始するには、作成したモデルのテストデータセットを使用します。 Kerasを使用すると、 .predict()
関数。
次のノートブックセルに次のコードを挿入して、予測を開始します。
y_pred = classifier.predict(X_test)
すでにトレーニングセットを使用して分類子をトレーニングしているため、このコードはトレーニングプロセスからの学習を使用して、テストセットの予測を行います。 これにより、従業員が退職する確率がわかります。 50%以上の確率で作業して、従業員が会社を辞める可能性が高いことを示します。
このしきい値を設定するには、ノートブックセルに次のコード行を入力します。
y_pred = (y_pred > 0.5)
予測方法を使用して予測を作成し、従業員が退職する可能性があるかどうかを判断するためのしきい値を設定しました。 モデルが予測でどの程度うまく機能したかを評価するには、次に混同行列を使用します。
ステップ6—混同行列の確認
このステップでは、混同行列を使用して、正しい予測と誤った予測の数を確認します。 混同行列は、エラー行列とも呼ばれ、分類器の真陽性(tp)、偽陽性(fp)、真陰性(tn)、および偽陰性(fn)の数を報告する正方行列です。
- 真陽性は、モデルが陽性クラス(感度またはリコールとも呼ばれます)を正しく予測する結果です。
- 真のネガティブは、モデルがネガティブクラスを正しく予測した結果です。
- 偽陽性は、モデルが陽性クラスを誤って予測した結果です。
- フォールスネガティブは、モデルがネガティブクラスを誤って予測した結果です。
これを実現するには、次のような混同行列を使用します。 scikit-learn
提供します。
このコードを次のノートブックセルに挿入して、 scikit-learn
混同行列:
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
cm
混同行列の出力は、深層学習モデルが作成したことを意味します 3305 + 375
正しい予測と 106 + 714
間違った予測。 次の方法で精度を計算できます。 (3305 + 375) / 4500
. データセット内の観測の総数は4500です。 これにより、81.7%の精度が得られます。 モデルから少なくとも81% c正しい予測を達成できるため、これは非常に優れた精度です。
Outputarray([[3305, 106],
[ 714, 375]])
混同行列を使用してモデルを評価しました。 次に、開発したモデルを使用して単一の予測を行う作業を行います。
ステップ7—単一の予測を行う
このステップでは、モデルを持つ1人の従業員の詳細を考慮して、単一の予測を行います。 これは、1人の従業員が会社を辞める確率を予測することで実現できます。 この従業員の機能を predict
方法。 以前に行ったように、機能もスケーリングして、次のように変換します。 numpy
配列。
従業員の機能を渡すには、セルで次のコードを実行します。
new_pred = classifier.predict(sc.transform(np.array([[0.26,0.7 ,3., 238., 6., 0.,0.,0.,0., 0.,0.,0.,0.,0.,1.,0., 0.,1.]])))
これらの機能は、1人の従業員の機能を表しています。 手順1のデータセットに示されているように、これらの機能は、満足度、最終評価、プロジェクト数などを表します。 手順3で行ったように、深層学習モデルが受け入れることができる方法で機能を変換する必要があります。
次のコードで50%のしきい値を追加します。
new_pred = (new_pred > 0.5)
new_pred
このしきい値は、確率が50%を超える場合、従業員が会社を辞めることを示します。
出力から、従業員が会社を辞めないことがわかります。
Outputarray([[False]])
モデルに低いしきい値または高いしきい値を設定することを決定する場合があります。 たとえば、しきい値を60%に設定できます。
new_pred = (new_pred > 0.6)
new_pred
この新しいしきい値は、従業員が会社を辞めないことを示しています。
Outputarray([[False]])
このステップでは、1人の従業員の特徴を考慮して1つの予測を行う方法を見てきました。 次のステップでは、モデルの精度の向上に取り組みます。
ステップ8—モデルの精度を向上させる
モデルを何度もトレーニングすると、さまざまな結果が得られます。 各トレーニングの精度には大きなばらつきがあります。 この問題を解決するには、K分割交差検定を使用します。 通常、Kは10に設定されます。 この手法では、モデルは最初の9つの折り目でトレーニングされ、最後の折り目でテストされます。 この反復は、すべてのフォールドが使用されるまで続きます。 各反復は、独自の精度を提供します。 モデルの精度は、これらすべての精度の平均になります。
keras
を介してK分割交差検定を実装できます KerasClassifier
ラッパー。 このラッパーは scikit-learn
相互検証。 まず、インポートします cross_val_score
交差検定関数と KerasClassifier
. これを行うには、ノートブックセルに次のコードを挿入して実行します。
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
に渡す関数を作成するには KerasClassifier
、次のセルにこのコードを追加します。
def make_classifier():
classifier = Sequential()
classifier.add(Dense(9, kernel_initializer = "uniform", activation = "relu", input_dim=18))
classifier.add(Dense(1, kernel_initializer = "uniform", activation = "sigmoid"))
classifier.compile(optimizer= "adam",loss = "binary_crossentropy",metrics = ["accuracy"])
return classifier
ここでは、に渡す関数を作成します KerasClassifier
-関数は、分類子が期待する引数の1つです。 この関数は、前に使用したニューラルネットワーク設計のラッパーです。 渡されたパラメーターも、チュートリアルの前半で使用されたものと同様です。 関数では、最初にを使用して分類器を初期化します Sequential()
、次に使用します Dense
入力層と出力層を追加します。 最後に、分類子をコンパイルして返します。
作成した関数をに渡すには KerasClassifier
、次のコード行をノートブックに追加します。
classifier = KerasClassifier(build_fn = make_classifier, batch_size=10, nb_epoch=1)
The KerasClassifier
3つの引数を取ります:
build_fn
:ニューラルネットワーク設計による機能batch_size
:各反復でネットワークを介して渡されるサンプルの数nb_epoch
:ネットワークが実行するエポックの数
次に、Scikit-learnのを使用して相互検証を適用します cross_val_score
. 次のコードをノートブックセルに追加して実行します。
accuracies = cross_val_score(estimator = classifier,X = X_train,y = y_train,cv = 10,n_jobs = -1)
折り畳み数を10に指定しているので、この関数は10の精度を提供します。 したがって、これを精度変数に割り当て、後でそれを使用して平均精度を計算します。 次の引数を取ります。
estimator
:定義した分類子X
:トレーニングセットの機能y
:トレーニングセットで予測される値cv
:折り数n_jobs
:使用するCPUの数(-1と指定すると、使用可能なすべてのCPUが使用されます)
これで交差検定を適用したので、精度の平均と分散を計算できます。 これを実現するには、次のコードをノートブックに挿入します。
mean = accuracies.mean()
mean
出力では、平均が83%であることがわかります。
Output0.8343617910685696
精度の分散を計算するには、次のノートブックセルに次のコードを追加します。
variance = accuracies.var()
variance
分散が0.00109であることがわかります。 分散が非常に小さいため、モデルのパフォーマンスが非常に高いことを意味します。
Output0.0010935021002275425
K-Fold交差検定を使用して、モデルの精度を向上させました。 次のステップでは、過剰適合の問題に取り組みます。
ステップ9—過剰適合と戦うためのドロップアウト正則化の追加
予測モデルは、過剰適合として知られる問題を起こしやすいです。 これは、モデルがトレーニングセットの結果を記憶し、表示されていないデータを一般化できないシナリオです。 通常、精度に非常に大きなばらつきがある場合、過剰適合が観察されます。 モデルの過剰適合と戦うために、モデルにレイヤーを追加します。
ニューラルネットワークでは、ドロップアウト正則化は、 Dropout
ニューラルネットワークのレイヤー。 それは rate
各反復で非アクティブ化されるニューロンの数を示すパラメーター。 ネルロンを非アクティブ化するプロセスは通常ランダムです。 この場合、レートとして0.1を指定します。これは、トレーニングプロセス中にニューロンが1% of非アクティブになることを意味します。 ネットワーク設計は同じままです。
追加するには Dropout
レイヤーで、次のコードを次のセルに追加します。
from keras.layers import Dropout
classifier = Sequential()
classifier.add(Dense(9, kernel_initializer = "uniform", activation = "relu", input_dim=18))
classifier.add(Dropout(rate = 0.1))
classifier.add(Dense(1, kernel_initializer = "uniform", activation = "sigmoid"))
classifier.compile(optimizer= "adam",loss = "binary_crossentropy",metrics = ["accuracy"])
追加しました Dropout
入力層と出力層の間の層。 ドロップアウト率を0.1に設定すると、トレーニングプロセス中に15個のニューロンが非アクティブ化され、分類器がトレーニングセットに過剰適合しないようになります。 追加した後 Dropout
次に、前に行ったように分類子をコンパイルした出力レイヤー。
あなたはこのステップで過剰適合と戦うために働きました Dropout
層。 次に、モデルの作成時に使用したパラメーターを調整して、モデルのさらなる改善に取り組みます。
ステップ10—ハイパーパラメータの調整
グリッド検索は、さまざまなモデルパラメーターを試して、最高の精度が得られるパラメーターを取得するために使用できる手法です。 この手法では、さまざまなパラメーターを試し、最良の結果が得られるパラメーターを返すことでこれを行います。 グリッド検索を使用して、深層学習モデルに最適なパラメーターを検索します。 これは、モデルの精度を向上させるのに役立ちます。 scikit-learn
を提供します GridSearchCV
この機能を有効にする機能。 次に、変更に進みます。 make_classifier
さまざまなパラメータを試すための関数。
このコードをノートブックに追加して、 make_classifier
さまざまなオプティマイザ機能をテストできるように機能します。
from sklearn.model_selection import GridSearchCV
def make_classifier(optimizer):
classifier = Sequential()
classifier.add(Dense(9, kernel_initializer = "uniform", activation = "relu", input_dim=18))
classifier.add(Dense(1, kernel_initializer = "uniform", activation = "sigmoid"))
classifier.compile(optimizer= optimizer,loss = "binary_crossentropy",metrics = ["accuracy"])
return classifier
インポートすることから始めました GridSearchCV
. 次に、に変更を加えました make_classifier
さまざまなオプティマイザを試すことができるように機能します。 分類子を初期化し、入力層と出力層を追加してから、分類子をコンパイルしました。 最後に、使用できるように分類子を返しました。
手順4と同様に、次のコード行を挿入して分類子を定義します。
classifier = KerasClassifier(build_fn = make_classifier)
を使用して分類子を定義しました KerasClassifier
、を介して関数を期待します build_fn
パラメータ。 あなたは KerasClassifier
合格しました make_classifier
以前に作成した関数。
次に、実験したいいくつかのパラメータの設定に進みます。 このコードをセルに入力して実行します。
params = {
'batch_size':[20,35],
'epochs':[2,3],
'optimizer':['adam','rmsprop']
}
ここでは、さまざまなバッチサイズ、エポック数、およびさまざまなタイプのオプティマイザー関数を追加しました。
あなたのような小さなデータセットの場合、20〜35のバッチサイズが適切です。 大規模なデータセットの場合、より大きなバッチサイズで実験することが重要です。 エポック数に低い数値を使用すると、短期間で結果を得ることができます。 ただし、サーバーの処理速度によっては、完了するまでに時間がかかる大きな数値を試すことができます。 The adam
と rmsprop
からのオプティマイザ keras
このタイプのニューラルネットワークに適しています。
次に、定義したさまざまなパラメーターを使用して、を使用して最適なパラメーターを検索します。 GridSearchCV
関数。 これを次のセルに入力して実行します。
grid_search = GridSearchCV(estimator=classifier,
param_grid=params,
scoring="accuracy",
cv=2)
グリッド検索機能では、次のパラメーターが必要です。
estimator
:使用している分類子。param_grid
:テストするパラメータのセット。scoring
:使用しているメトリック。cv
:テストするフォールドの数。
次に、これに適合します grid_search
トレーニングデータセットへ:
grid_search = grid_search.fit(X_train,y_train)
出力は次のようになります。完了するまでしばらく待ちます。
OutputEpoch 1/2
5249/5249 [==============================] - 1s 228us/step - loss: 0.5958 - acc: 0.7645
Epoch 2/2
5249/5249 [==============================] - 0s 82us/step - loss: 0.3962 - acc: 0.8510
Epoch 1/2
5250/5250 [==============================] - 1s 222us/step - loss: 0.5935 - acc: 0.7596
Epoch 2/2
5250/5250 [==============================] - 0s 85us/step - loss: 0.4080 - acc: 0.8029
Epoch 1/2
5249/5249 [==============================] - 1s 214us/step - loss: 0.5929 - acc: 0.7676
Epoch 2/2
5249/5249 [==============================] - 0s 82us/step - loss: 0.4261 - acc: 0.7864
次のコードをノートブックセルに追加して、この検索から最適なパラメータを取得します。 best_params_
属性:
best_param = grid_search.best_params_
best_accuracy = grid_search.best_score_
これで、次のコードを使用して、モデルに最適なパラメーターを確認できます。
best_param
出力は、最適なバッチサイズが 20
、エポックの最適な数は 2
、 そしてその adam
オプティマイザーはモデルに最適です。
Output{'batch_size': 20, 'epochs': 2, 'optimizer': 'adam'}
モデルの最高の精度を確認できます。 The best_accuracy number
グリッド検索を実行した後、最良のパラメーターから取得する最高の精度を表します。
best_accuracy
出力は次のようになります。
Output0.8533193637489285
使用した GridSearch
分類器に最適なパラメータを見つけます。 あなたはそれを最高に見ました batch_size
は20、最高です optimizer
それは adam
オプティマイザとエポックの最適な数は2です。 また、85%として、分類器の最高の精度が得られました。 最大85%の精度で、従業員が滞在するか退職するかを予測できる従業員保持モデルを構築しました。
結論
このチュートリアルでは、 Keras を使用して、従業員が会社を辞める確率を予測する人工ニューラルネットワークを構築しました。 を使用して機械学習の以前の知識を組み合わせました scikit-learn
これを達成するために。 モデルをさらに改善するために、さまざまな活性化関数またはオプティマイザー関数を試すことができます。 keras
. また、異なる数の折り畳みを試してみたり、異なるデータセットを使用してモデルを構築したりすることもできます。
機械学習分野またはTensorFlowを使用した他のチュートリアルについては、ニューラルネットワークを構築して手書きの数字または他のDigitalOcean機械学習チュートリアルを認識してみてください。