フィッシングデータのディープラーニング
フィッシングサイトのデータでディープラーニング
こちらで、ランダムフォレストによる機械学習をしてみた。
ランダムフォレストの方が、ロジスティック回帰よりも精度が高かった。ディープラーニングではどうか?
基本的な流れは、通常の機械学習と同じ。ディープラーニングのライブラリはkerasを使用する。
データセットのResult(正解データ)に-1(フィッシングサイト)と0(通常サイト)というデータが入っているが、ディープラーニングでは、0,1にする必要がある。
#Resultの値が-1を0に変える ⇒ディープラーニングでは必須training_data['Result']=training_data['Result'].apply(lambda x : 0 if x ==-1 else 1)
kerasをロードして、隠れ層を500持ち、relu関数を活性化関数とするモデルを作成。
from keras.models import Sequentialfrom keras.layers import Dense, Activation, Dropout
# モデルの作成model = Sequential()
model.add(Dense(500, input_shape=(30,), activation='relu'))model.add(Dropout(0.2))
model.add(Dense(500, activation='relu'))model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
過学習を防ぐため、EarlyStoppingを設定して実行と評価。
from keras.callbacks import EarlyStoppingearly_stopping = EarlyStopping(monitor='val_loss', patience=5)
# 訓練hist = model.fit(X_train, y_train,batch_size=64,verbose=1,epochs=200,validation_split=0.1,callbacks=[early_stopping])
# 評価score = model.evaluate(X_test, y_test, verbose=1)print("Test score", score[0])print("Test accuracy", score[1])
結果は、95%の精度でランダムフォレストよりも悪かった。
課題
EarlyStoppingにより、早々に学習が打ち切られてしまう。
活性化関数の詳細などをもう少し理解して、元データの加工をして、モデルの作成なども工夫する必要があるのかもしれない。