Класс F1Score
Класс F1Score вычисляет F1-меру, которая объединяет
точность (precision) и полноту (recall) в одну метрику.
F1-мера особенно полезна при несбалансированных классах,
когда одна метрика может вводить в заблуждение.
Первым параметром передается порог threshold,
при котором прогноз считается положительным.
Вторым параметром можно передать имя метрики name,
а также тип данных dtype.
Синтаксис
tf.keras.metrics.F1Score(
threshold=None,
name='f1_score',
dtype=None
)
Пример
Давайте создадим метрику F1Score и вычислим ее для нескольких предсказаний:
import tensorflow as tf
m = tf.keras.metrics.F1Score(threshold=0.5)
m.update_state([1, 0, 1, 1], [0.9, 0.2, 0.8, 0.3])
res = m.result()
print(res)
Результат выполнения кода:
tf.Tensor([0.8], shape=(1,), dtype=float32)
Пример
Давайте обнулим состояние метрики с помощью метода
reset_state и выполним новый расчет:
<+python+>
import tensorflow as tf
m = tf.keras.metrics.F1Score(threshold=0.5)
m.update_state([1, 1, 0, 1], [0.7, 0.9, 0.4, 0.6])
print(m.result())
m.reset_state()
m.update_state([1, 0, 0, 1], [0.8, 0.1, 0.3, 0.9])
print(m.result())
<-python+>
Результат выполнения кода:
tf.Tensor([1.], shape=(1,), dtype=float32)
tf.Tensor([1.], shape=(1,), dtype=float32)
Пример
Давайте используем F1Score внутри модели Keras при обучении:
import tensorflow as tf
import numpy as np
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=[tf.keras.metrics.F1Score(threshold=0.5)]
)
x = np.array([[1.0], [2.0], [3.0], [4.0]])
y = np.array([0, 0, 1, 1])
model.fit(x, y, epochs=1, verbose=0)