import pandas as pd import numpy as np from sklearn.model_selection import train_test_split, KFold from sklearn.preprocessing import MinMaxScaler, LabelEncoder, MaxAbsScaler from sklearn.metrics import mean_squared_error from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.preprocessing import PolynomialFeatures import optuna import datetime import warnings warnings.filterwarnings('ignore')

poly = PolynomialFeatures(degree=2, include_bias=False)

def RMSE(x, y): return np.sqrt(mean_squared_error(x, y))

path = './_data/dacon_cal/' path_save = './_save/dacon_cal/' path_save_min = './_save/dacon_cal/min/'

train_csv = pd.read_csv(path + 'train.csv', index_col=0).drop(['Weight_Status'], axis=1) test_csv = pd.read_csv(path + 'test.csv', index_col=0).drop(['Weight_Status'], axis=1) submit_csv = pd.read_csv(path + 'sample_submission.csv', index_col=0)

x = train_csv.drop(['Calories_Burned'], axis=1) y = train_csv['Calories_Burned']

x['Height(inch)'] = 12x['Height(Feet)']+x['Height(Remainder_Inches)'] test_csv['Height(inch)'] = 12test_csv['Height(Feet)']+test_csv['Height(Remainder_Inches)']

x['BMI'] = (703x['Weight(lb)']/x['Height(Feet)']**2) test_csv['BMI'] = (703test_csv['Weight(lb)']/test_csv['Height(Feet)']**2)

x['BMR'] = 10 * x['Weight(lb)'] * 0.453592 + 6.25 * x['Height(inch)'] * 2.54 - 5 * x['Age'] + x['Gender'].apply(lambda x: 5 if x=='M' else -161)

test_csv['BMR'] = 10 * test_csv['Weight(lb)'] * 0.453592 + 6.25 * test_csv['Height(inch)'] * 2.54 - 5 * test_csv['Age'] + test_csv['Gender'].apply(lambda x: 5 if x=='M' else -161)

x['Exercise_Intensity'] = x['BPM'] / (220 - x['Age'])

test_csv['Exercise_Intensity'] = test_csv['BPM'] / (220 - test_csv['Age'])

x['Calories_Proxy_MET'] = x['Exercise_Intensity'] / 100 * x['Weight(lb)'] * 0.453592 * x['Exercise_Duration']

test_csv['Calories_Proxy_MET'] = test_csv['Exercise_Intensity'] / 100 * test_csv['Weight(lb)'] * 0.453592 * test_csv['Exercise_Duration']

def process_activity_factor(x):

if x < 0.4: return 'Sedentary'

elif x < 0.6: return 'Light Exercise'

elif x < 0.8: return 'Moderate Exercise'

else: return 'Heavy Exercise'

x['Activity_Factor'] = x['Exercise_Intensity'].apply(process_activity_factor)