{"cells":[{"metadata":{},"cell_type":"markdown","source":"fbeta score: \n$$\n\\frac{(1+\\beta^2)pr}{\\beta^2p+r}\n$$\n\nDefinition of fbeta score is in the following wikipedia site. In this competition $\\beta = 2$.  \nhttps://en.wikipedia.org/wiki/F1_score\n\nChecking the score of Keras function with Scikit learn's fbeta_score function. The score is little bit different, however I think it is just small error due to epsilon value etc."},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\n\nimport keras\nfrom keras import backend as K\nfrom keras import metrics\n\nfrom sklearn.metrics import fbeta_score","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# ref: https://github.com/keras-team/keras/blob/ac1a09c787b3968b277e577a3709cd3b6c931aa5/tests/keras/test_metrics.py\ndef f2_score(y_true, y_pred):\n    beta = 2\n    true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)), axis=1)\n    predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)), axis=1)\n    possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)), axis=1)\n    \n    precision = true_positives / (predicted_positives + K.epsilon())\n    recall = true_positives / (possible_positives + K.epsilon())\n    \n    return K.mean(((1+beta**2)*precision*recall) / ((beta**2)*precision+recall+K.epsilon()))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Test Data\ny_true_np = np.array([[0, 1, 1, 1, 0],\n                      [0, 1, 1, 1, 0],\n                      [0, 0, 0, 1, 1],\n                      [1, 0, 1, 0, 0],\n                      [1, 1, 0, 0, 0],\n                      [1, 1, 0, 0, 0],\n                      [1, 1, 0, 0, 0]])\n\ny_pred_np = np.array([[0.6, 0.6, 0.6, 0.1, 0.1],\n                      [0.1, 0.6, 0.6, 0.6, 0.1],\n                      [0.1, 0.1, 0.6, 0.1, 0.6],\n                      [0.6, 0.1, 0.1, 0.1, 0.6],\n                      [0.6, 0.6, 0.6, 0.1, 0.1],\n                      [0.6, 0.6, 0.6, 0.6, 0.6],\n                      [0.1, 0.1, 0.1, 0.1, 0.1]])\n\ny_true = K.variable(y_true_np)\ny_pred = K.variable(y_pred_np)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"K.eval(f2_score(y_true, y_pred),)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"scores = []\nfor yt, yp in zip(y_true_np, y_pred_np):\n    scores.append(fbeta_score(yt, (yp>0.5).astype(int), beta=2))\nprint(f\"mean scores: {np.mean(scores)}\")\nscores","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}