ロード・トゥ・ザ・ホワイトハッカー

ホワイトハッカーはじめました

フィッシングデータのディープラーニング

フィッシングサイトのデータでディープラーニング

こちらで、ランダムフォレストによる機械学習をしてみた。

chikuwamarux.hatenablog.com

 

ランダムフォレストの方が、ロジスティック回帰よりも精度が高かった。ディープラーニングではどうか?

 

基本的な流れは、通常の機械学習と同じ。ディープラーニングのライブラリは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 Sequential
from 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 EarlyStopping
early_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により、早々に学習が打ち切られてしまう。

活性化関数の詳細などをもう少し理解して、元データの加工をして、モデルの作成なども工夫する必要があるのかもしれない。