Open shinmura0 opened 3 years ago
以前、正規分布(平均と分散)で閾値を決める手法を検討した。 今回は、その発展版。
teyoさんのモデル、新村のモデルで一定の成果を上げたので 最終subでは使っていきたい。
閾値の決め方は
この手法はbirdcallがなくても、決められる手法だが、
新村のmodelでやるとこんな感じ。
課題であったreevir1も拾えるようになった。 なお、ameredは、TS内でbircallはなく、FPが多いため大きめの閾値になる。
(この分布を、正規分布で当てはめようとしていた過去の自分は愚かであった(^^;)
codeはこんな感じ。
from scipy.stats import expon def get_threshold(score, label): #score(2400,397) #label(2400,397) is 1 or 0 optim_thresh = np.zeros(397) for i in range(397): target_score = score[:, i] target_label = label[:, i] nocall_score = target_score[target_label==0] # 指数分布にフィッティング fit_parameter = expon.fit(nocall_score) frozen_expon = expon.freeze(*fit_parameter) # 0.2 + 99.9%で閾値を決める optim_thresh[i] = frozen_expon.ppf(0.999) + 0.2 return optim_thresh # shape(397)
以前、正規分布(平均と分散)で閾値を決める手法を検討した。 今回は、その発展版。
teyoさんのモデル、新村のモデルで一定の成果を上げたので 最終subでは使っていきたい。
閾値の決め方は
この手法はbirdcallがなくても、決められる手法だが、
新村のmodelでやるとこんな感じ。
課題であったreevir1も拾えるようになった。 なお、ameredは、TS内でbircallはなく、FPが多いため大きめの閾値になる。
(この分布を、正規分布で当てはめようとしていた過去の自分は愚かであった(^^;)
codeはこんな感じ。