{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "6eda130d", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "from sklearn.model_selection import GridSearchCV, train_test_split" ] }, { "cell_type": "code", "execution_count": 2, "id": "64504238", "metadata": {}, "outputs": [], "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense, Activation, Dropout\n", "\n", "from keras import layers\n", "from sklearn.neural_network import MLPClassifier\n", "from sklearn.metrics import accuracy_score, f1_score, auc, roc_curve, roc_auc_score\n", "from sklearn.preprocessing import StandardScaler\n", "from keras.layers import Dense, LSTM, Dropout, GRU, Bidirectional\n", "import pandas as pd\n", "from keras.layers import LSTM, Dense\n", "from keras.models import Sequential\n", "from sklearn.preprocessing import MinMaxScaler\n", "from sklearn.model_selection import train_test_split\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "1160a496", "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv('../Preprocessing/fight_with_stats_precomp.csv')\n", "df_fighters = pd.read_csv('../Preprocessing/fighter_total_stats.csv')" ] }, { "cell_type": "code", "execution_count": 4, "id": "1313842b", "metadata": {}, "outputs": [], "source": [ "df_fighters_details = pd.read_csv('../Preprocessing/fighter_details.csv', parse_dates=True)" ] }, { "cell_type": "code", "execution_count": 5, "id": "cfad8be9", "metadata": {}, "outputs": [], "source": [ "df = df[(df['fightNo_fighter']>=3) & (df['fightNo_opponent']>=3) & (df['Women_fight']==0)]" ] }, { "cell_type": "code", "execution_count": 6, "id": "6fbc9051", "metadata": {}, "outputs": [], "source": [ "df = df.fillna(0)\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "a380c164", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | EVENT | \n", "BOUT | \n", "FIGHTER | \n", "OPPONENT | \n", "METHOD | \n", "Win | \n", "Women_fight | \n", "ROUND | \n", "HEIGHT_diff | \n", "REACH_diff | \n", "... | \n", "BODY_landed_opponent | \n", "BODY_attemps_opponent | \n", "LEG_landed_opponent | \n", "LEG_attemps_opponent | \n", "DISTANCE_landed_opponent | \n", "DISTANCE_attemps_opponent | \n", "CLINCH_landed_opponent | \n", "CLINCH_attemps_opponent | \n", "GROUND_landed_opponent | \n", "GROUND_attemps_opponent | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 13777 | \n", "UFC Fight Night: Cannonier vs. Strickland | \n", "Jared Cannonier vs. Sean Strickland | \n", "Sean Strickland | \n", "Jared Cannonier | \n", "Decision | \n", "0 | \n", "0 | \n", "5 | \n", "2.0 | \n", "-1.0 | \n", "... | \n", "267.0 | \n", "516.0 | \n", "213.0 | \n", "270.0 | \n", "763.0 | \n", "2303.0 | \n", "25.0 | \n", "45.0 | \n", "54.0 | \n", "86.0 | \n", "
| 13780 | \n", "UFC Fight Night: Cannonier vs. Strickland | \n", "Said Nurmagomedov vs. Saidyokub Kakhramonov | \n", "Said Nurmagomedov | \n", "Saidyokub Kakhramonov | \n", "Submission | \n", "1 | \n", "0 | \n", "2 | \n", "0.0 | \n", "1.0 | \n", "... | \n", "24.0 | \n", "51.0 | \n", "43.0 | \n", "58.0 | \n", "91.0 | \n", "253.0 | \n", "9.0 | \n", "14.0 | \n", "8.0 | \n", "13.0 | \n", "
| 13781 | \n", "UFC Fight Night: Cannonier vs. Strickland | \n", "Said Nurmagomedov vs. Saidyokub Kakhramonov | \n", "Saidyokub Kakhramonov | \n", "Said Nurmagomedov | \n", "Submission | \n", "0 | \n", "0 | \n", "2 | \n", "0.0 | \n", "-1.0 | \n", "... | \n", "9.0 | \n", "16.0 | \n", "4.0 | \n", "4.0 | \n", "19.0 | \n", "53.0 | \n", "6.0 | \n", "6.0 | \n", "2.0 | \n", "5.0 | \n", "
| 13782 | \n", "UFC Fight Night: Cannonier vs. Strickland | \n", "Sergey Morozov vs. Journey Newson | \n", "Journey Newson | \n", "Sergey Morozov | \n", "Decision | \n", "0 | \n", "0 | \n", "3 | \n", "-1.0 | \n", "0.0 | \n", "... | \n", "15.0 | \n", "30.0 | \n", "16.0 | \n", "20.0 | \n", "76.0 | \n", "224.0 | \n", "2.0 | \n", "5.0 | \n", "4.0 | \n", "4.0 | \n", "
| 13783 | \n", "UFC Fight Night: Cannonier vs. Strickland | \n", "Sergey Morozov vs. Journey Newson | \n", "Sergey Morozov | \n", "Journey Newson | \n", "Decision | \n", "1 | \n", "0 | \n", "3 | \n", "1.0 | \n", "0.0 | \n", "... | \n", "38.0 | \n", "68.0 | \n", "30.0 | \n", "35.0 | \n", "141.0 | \n", "347.0 | \n", "16.0 | \n", "19.0 | \n", "1.0 | \n", "4.0 | \n", "
5 rows × 63 columns
\n", "| \n", " | EVENT | \n", "BOUT | \n", "FIGHTER_f1 | \n", "OPPONENT | \n", "METHOD | \n", "
|---|---|---|---|---|---|
| 0 | \n", "UFC 2: No Way Out | \n", "Royce Gracie vs. Patrick Smith | \n", "Patrick Smith | \n", "Royce Gracie | \n", "KO/TKO - ground | \n", "
| 1 | \n", "UFC 2: No Way Out | \n", "Royce Gracie vs. Patrick Smith | \n", "Royce Gracie | \n", "Patrick Smith | \n", "KO/TKO - ground | \n", "
| 2 | \n", "UFC 2: No Way Out | \n", "Royce Gracie vs. Remco Pardoel | \n", "Remco Pardoel | \n", "Royce Gracie | \n", "Submission | \n", "
| 3 | \n", "UFC 2: No Way Out | \n", "Royce Gracie vs. Remco Pardoel | \n", "Royce Gracie | \n", "Remco Pardoel | \n", "Submission | \n", "
| 4 | \n", "UFC 4: Revenge of the Warriors | \n", "Royce Gracie vs. Dan Severn | \n", "Dan Severn | \n", "Royce Gracie | \n", "Submission | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 6812 | \n", "UFC Fight Night: Cannonier vs. Strickland | \n", "Jared Cannonier vs. Sean Strickland | \n", "Sean Strickland | \n", "Jared Cannonier | \n", "Decision | \n", "
| 6813 | \n", "UFC Fight Night: Cannonier vs. Strickland | \n", "Said Nurmagomedov vs. Saidyokub Kakhramonov | \n", "Said Nurmagomedov | \n", "Saidyokub Kakhramonov | \n", "Submission | \n", "
| 6814 | \n", "UFC Fight Night: Cannonier vs. Strickland | \n", "Said Nurmagomedov vs. Saidyokub Kakhramonov | \n", "Saidyokub Kakhramonov | \n", "Said Nurmagomedov | \n", "Submission | \n", "
| 6815 | \n", "UFC Fight Night: Cannonier vs. Strickland | \n", "Sergey Morozov vs. Journey Newson | \n", "Journey Newson | \n", "Sergey Morozov | \n", "Decision | \n", "
| 6816 | \n", "UFC Fight Night: Cannonier vs. Strickland | \n", "Sergey Morozov vs. Journey Newson | \n", "Sergey Morozov | \n", "Journey Newson | \n", "Decision | \n", "
6817 rows × 5 columns
\n", "| \n", " | FIGHTER | \n", "HEIGHT_fighter | \n", "WEIGHT_fighter | \n", "REACH_fighter | \n", "STANCE_fighter | \n", "Fights | \n", "Win | \n", "DRAW | \n", "Lost | \n", "No_contest | \n", "... | \n", "BODY_attemps_opponent | \n", "LEG_landed_opponent | \n", "LEG_attemps_opponent | \n", "DISTANCE_landed_opponent | \n", "DISTANCE_attemps_opponent | \n", "CLINCH_landed_opponent | \n", "CLINCH_attemps_opponent | \n", "GROUND_landed_opponent | \n", "GROUND_attemps_opponent | \n", "form_skore_fighter | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 | \n", "Serghei Spivac | \n", "75.0 | \n", "260.0 | \n", "78.0 | \n", "Orthodox | \n", "9 | \n", "6 | \n", "0 | \n", "3 | \n", "0 | \n", "... | \n", "71.0 | \n", "28.0 | \n", "29.0 | \n", "164.0 | \n", "415.0 | \n", "27.0 | \n", "38.0 | \n", "37.0 | \n", "58.0 | \n", "0.9 | \n", "
1 rows × 56 columns
\n", "" ], "text/plain": [ " FIGHTER HEIGHT_fighter WEIGHT_fighter REACH_fighter \\\n", "2003 Serghei Spivac 75.0 260.0 78.0 \n", "\n", " STANCE_fighter Fights Win DRAW Lost No_contest ... \\\n", "2003 Orthodox 9 6 0 3 0 ... \n", "\n", " BODY_attemps_opponent LEG_landed_opponent LEG_attemps_opponent \\\n", "2003 71.0 28.0 29.0 \n", "\n", " DISTANCE_landed_opponent DISTANCE_attemps_opponent \\\n", "2003 164.0 415.0 \n", "\n", " CLINCH_landed_opponent CLINCH_attemps_opponent GROUND_landed_opponent \\\n", "2003 27.0 38.0 37.0 \n", "\n", " GROUND_attemps_opponent form_skore_fighter \n", "2003 58.0 0.9 \n", "\n", "[1 rows x 56 columns]" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f1_df" ] }, { "cell_type": "code", "execution_count": 87, "id": "2b4a9810", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Win', 'HEIGHT_diff', 'REACH_diff', 'AGE_diff', 'form_skore_fighter',\n", " 'form_skore_opponent', 'fightNo_fighter', 'fightNo_opponent',\n", " 'Win_tot_f1', 'DRAW_f1', 'No_contest_f1', 'Win_tot_f2', 'DRAW_f2',\n", " 'No_contest_f2', 'CTRL_pct_fighterf1', 'SIG.STR._acc_fighterf1',\n", " 'SIG.STR._perRound_fighterf1', 'TOTAL STR._acc_fighterf1',\n", " 'TOTAL STR._perRound_fighterf1', 'TD_acc_fighterf1',\n", " 'TD_perRound_fighterf1', 'HEAD_acc_fighterf1',\n", " 'HEAD_perRound_fighterf1', 'BODY_acc_fighterf1',\n", " 'BODY_perRound_fighterf1', 'LEG_acc_fighterf1',\n", " 'LEG_perRound_fighterf1', 'DISTANCE_acc_fighterf1',\n", " 'DISTANCE_perRound_fighterf1', 'CLINCH_acc_fighterf1',\n", " 'CLINCH_perRound_fighterf1', 'GROUND_acc_fighterf1',\n", " 'GROUND_perRound_fighterf1', 'CTRL_pct_opponentf1',\n", " 'SIG.STR._acc_opponentf1', 'SIG.STR._perRound_opponentf1',\n", " 'TOTAL STR._acc_opponentf1', 'TOTAL STR._perRound_opponentf1',\n", " 'TD_acc_opponentf1', 'TD_perRound_opponentf1', 'HEAD_acc_opponentf1',\n", " 'HEAD_perRound_opponentf1', 'BODY_acc_opponentf1',\n", " 'BODY_perRound_opponentf1', 'LEG_acc_opponentf1',\n", " 'LEG_perRound_opponentf1', 'DISTANCE_acc_opponentf1',\n", " 'DISTANCE_perRound_opponentf1', 'CLINCH_acc_opponentf1',\n", " 'CLINCH_perRound_opponentf1', 'GROUND_acc_opponentf1',\n", " 'GROUND_perRound_opponentf1', 'CTRL_pct_fighterf2',\n", " 'SIG.STR._acc_fighterf2', 'SIG.STR._perRound_fighterf2',\n", " 'TOTAL STR._acc_fighterf2', 'TOTAL STR._perRound_fighterf2',\n", " 'TD_acc_fighterf2', 'TD_perRound_fighterf2', 'HEAD_acc_fighterf2',\n", " 'HEAD_perRound_fighterf2', 'BODY_acc_fighterf2',\n", " 'BODY_perRound_fighterf2', 'LEG_acc_fighterf2',\n", " 'LEG_perRound_fighterf2', 'DISTANCE_acc_fighterf2',\n", " 'DISTANCE_perRound_fighterf2', 'CLINCH_acc_fighterf2',\n", " 'CLINCH_perRound_fighterf2', 'GROUND_acc_fighterf2',\n", " 'GROUND_perRound_fighterf2', 'CTRL_pct_opponentf2',\n", " 'SIG.STR._acc_opponentf2', 'SIG.STR._perRound_opponentf2',\n", " 'TOTAL STR._acc_opponentf2', 'TOTAL STR._perRound_opponentf2',\n", " 'TD_acc_opponentf2', 'TD_perRound_opponentf2', 'HEAD_acc_opponentf2',\n", " 'HEAD_perRound_opponentf2', 'BODY_acc_opponentf2',\n", " 'BODY_perRound_opponentf2', 'LEG_acc_opponentf2',\n", " 'LEG_perRound_opponentf2', 'DISTANCE_acc_opponentf2',\n", " 'DISTANCE_perRound_opponentf2', 'CLINCH_acc_opponentf2',\n", " 'CLINCH_perRound_opponentf2', 'GROUND_acc_opponentf2',\n", " 'GROUND_perRound_opponentf2'],\n", " dtype='object')" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_model.columns" ] }, { "cell_type": "code", "execution_count": 88, "id": "2f5a3e74", "metadata": {}, "outputs": [], "source": [ "agediff = df_fighters_details[df_fighters_details['FIGHTER']==fighter1]['AGE'].values[0] - df_fighters_details[df_fighters_details['FIGHTER']==fighter2]['AGE'].values[0]\n", "formy = [f1_df['form_skore_fighter'].values[0], f2_df['form_skore_fighter'].values[0]]\n", "no_of_fights = [f1_df['Fights'].values[0],f2_df['Fights'].values[0]]\n", "W_D_NC = f1_df[['Win','DRAW', 'No_contest']].values.tolist()[0] + f2_df[['Win','DRAW', 'No_contest']].values.tolist()[0]" ] }, { "cell_type": "code", "execution_count": 89, "id": "5473bec1", "metadata": {}, "outputs": [], "source": [ "sloupce2 = df_fighters.columns.tolist()[10:]\n", "stats_f1 = []\n", "stats_f2 = []\n", "for sloupec in sloupce2: \n", " splited = sloupec.split('_')\n", " if 'CTRL' in splited:\n", " stats_f1.append((f1_df[sloupec]/f1_df['TotalTime']).values[0])\n", " stats_f2.append((f2_df[sloupec]/f2_df['TotalTime']).values[0])\n", " if 'attemps' in splited:\n", " stats_f1.append((f1_df[sloupec.replace('attemps', 'landed')]/f1_df[sloupec]).values[0])\n", " stats_f1.append((f1_df[sloupec.replace('attemps', 'landed')]/f1_df['TotalTime']).values[0]*300)\n", " \n", " stats_f2.append((f2_df[sloupec.replace('attemps', 'landed')]/f2_df[sloupec]).values[0])\n", " stats_f2.append((f2_df[sloupec.replace('attemps', 'landed')]/f2_df['TotalTime']).values[0]*300)\n", "stats_list = stats_f1 + stats_f2" ] }, { "cell_type": "code", "execution_count": 90, "id": "bdff40e4", "metadata": {}, "outputs": [], "source": [ "vstup = np.array([1]+[f1_df.iloc[0][col] - f2_df.iloc[0][col] for col in ['HEIGHT_fighter','REACH_fighter']] + [agediff] + formy + no_of_fights + W_D_NC + stats_list)" ] }, { "cell_type": "code", "execution_count": 91, "id": "1fdd596e", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\spravce\\AppData\\Local\\Temp\\ipykernel_30416\\2024273010.py:2: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", " vstup_scaled = scaler.fit_transform(df_model.append(pd.DataFrame(vstup.reshape(1,-1), columns=list(df_model)), ignore_index=True))[-200:,1:]\n" ] } ], "source": [ "scaler = MinMaxScaler(feature_range=(0, 1))\n", "vstup_scaled = scaler.fit_transform(df_model.append(pd.DataFrame(vstup.reshape(1,-1), columns=list(df_model)), ignore_index=True))[-200:,1:]" ] }, { "cell_type": "code", "execution_count": 92, "id": "1f3ec277", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(200, 89)" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vstup_scaled.shape" ] }, { "cell_type": "code", "execution_count": 93, "id": "96eda032", "metadata": {}, "outputs": [], "source": [ "from numpy import *\n", "where_are_NaNs = isnan(vstup_scaled)\n", "vstup_scaled[where_are_NaNs] = 0" ] }, { "cell_type": "code", "execution_count": 94, "id": "b4ed6497", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([], shape=(0, 2), dtype=int64)" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.argwhere(np.isnan(vstup_scaled))" ] }, { "cell_type": "code", "execution_count": 95, "id": "a5702284", "metadata": {}, "outputs": [], "source": [ "new_data = np.reshape(vstup_scaled, (1,200,vstup_scaled.shape[1]))" ] }, { "cell_type": "code", "execution_count": 96, "id": "ff2a2884", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[[0.46153846, 0.375 , 0.47058824, ..., 0. ,\n", " 0. , 0. ],\n", " [0.73076923, 0.79166667, 0.41176471, ..., 0.05888578,\n", " 0.66153846, 0.06213597],\n", " [0.26923077, 0.20833333, 0.58823529, ..., 0.02074561,\n", " 0.7826087 , 0.58646617],\n", " ...,\n", " [0.46153846, 0.5 , 0.5 , ..., 0.0670209 ,\n", " 0.25 , 0.00328931],\n", " [0.53846154, 0.5 , 0.5 , ..., 0.01258648,\n", " 1. , 0.01976735],\n", " [0.5 , 0.45833333, 0.23529412, ..., 0.0916802 ,\n", " 0.75342466, 0.07542115]]])" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_data" ] }, { "cell_type": "code", "execution_count": null, "id": "66110573", "metadata": {}, "outputs": [], "source": [ "\n" ] }, { "cell_type": "code", "execution_count": 97, "id": "b71d6fd0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 89)" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array(new_data[-1][-1]).reshape(1,-1).shape" ] }, { "cell_type": "code", "execution_count": 102, "id": "23f96f1d", "metadata": {}, "outputs": [], "source": [ "from keras.models import load_model\n", "model = load_model('model3.h5')\n", "model.load_weights('my_model_weights.h5') # to load" ] }, { "cell_type": "code", "execution_count": 103, "id": "b5fa7a9f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.51083056, 0.48916944]])" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "logreg.predict_proba(np.array(new_data[-1][-1]).reshape(1,-1))" ] }, { "cell_type": "code", "execution_count": 104, "id": "7bc04b75", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:5 out of the last 48 calls to