分類と回帰を1つのモデルで

Keras で学ぶ高度な Deep Learning

Zach Deane-Mayer

Data Scientist

シンプルな回帰/分類器を作る

from tensorflow.keras.layers import Input, Dense
input_tensor = Input(shape=(1,))
output_tensor_reg = Dense(1)(input_tensor)
output_tensor_class = Dense(1, activation='sigmoid')(output_tensor_reg)

Keras で学ぶ高度な Deep Learning

回帰/分類モデルを定義する

from tensorflow.keras.models import Model
model = Model(input_tensor, [output_tensor_reg, output_tensor_class])
model.compile(loss=['mean_absolute_error', 'binary_crossentropy'],
              optimizer='adam')

Keras で学ぶ高度な Deep Learning

組み合わせモデルを学習する(分類/回帰)

X = games_tourney_train[['seed_diff']]
y_reg = games_tourney_train[['score_diff']]
y_class = games_tourney_train[['won']]
model.fit(X, [y_reg, y_class], epochs=100)

Keras で学ぶ高度な Deep Learning

モデルの重みを確認する

model.get_weights()

[array([[1.2371823]], dtype=float32), array([-0.05451894], dtype=float32), array([[0.13870609]], dtype=float32), array([0.00734114], dtype=float32)]

Keras で学ぶ高度な Deep Learning

モデルの重みを確認する

model.get_weights()

[array([[1.2371823]], dtype=float32), array([-0.05451894], dtype=float32), array([[0.13870609]], dtype=float32), array([0.00734114], dtype=float32)]
from scipy.special import expit as sigmoid
print(sigmoid(1 * 0.13870609 + 0.00734114))
0.5364470465211318
Keras で学ぶ高度な Deep Learning

新しいデータで評価する

X = games_tourney_test[['seed_diff']]
y_reg = games_tourney_test[['score_diff']]
y_class = games_tourney_test[['won']]
model.evaluate(X, [y_reg, y_class])
[9.866300069455413, 9.281179495657208, 0.585120575627864]
Keras で学ぶ高度な Deep Learning

やってみましょう

Keras で学ぶ高度な Deep Learning

Preparing Video For Download...