{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\nimport pickle\nimport os\n#for dirname, _, filenames in os.walk('/kaggle/input'):\n#    for filename in filenames:\n#        print(os.path.join(dirname, filename))\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"faeture_list = ['image_name','target','sex','age_approx','anatom_site_general_challenge']\n\nsiim20_csv = pd.read_csv('../input/jpeg-melanoma-384x384/train.csv',usecols = faeture_list)\nsiim19_csv = pd.read_csv('../input/jpeg-isic2019-384x384/train.csv',usecols = faeture_list)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"siim19_csv.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"siim19_csv['year'] = '2019' \nsiim20_csv['year'] = '2020'\n\nsiim_all = pd.concat([siim19_csv,siim20_csv],ignore_index = True)\n\ntrain = siim_all","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_new = train.dropna()\ntrain_new.info()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"#SEED value\nSEED_VALUE = 2244","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_new.target.value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(50090/4921)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\nsex_enc = LabelEncoder()\nanatom_enc = LabelEncoder()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_new['sex_enc']   = sex_enc.fit_transform(train_new.sex.astype('str'))\ntrain_new['anatom_enc']= anatom_enc.fit_transform(train_new.anatom_site_general_challenge.astype('str'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_new.age_approx.hist(bins=8, alpha=0.5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.preprocessing import MinMaxScaler\nscaler = MinMaxScaler()\n\ntrain_new['age_approx_scaled'] = scaler.fit_transform(train_new[['age_approx']])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pickle.dump(sex_enc, open('sex_encoder', 'wb'))\npickle.dump(anatom_enc, open('anatom_encoder', 'wb'))\npickle.dump(scaler, open('age_encoder', 'wb'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_new.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_data = train_new[['sex_enc','age_approx_scaled','anatom_enc','target']]\n#y_data = train_new[['target']]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import StratifiedKFold\n\ndf = X_data\nnfolds = 5\n\nsplits = StratifiedKFold(n_splits=nfolds, random_state=2020, shuffle=True)\nsplits = list(splits.split(df,df.target))\n\nfolds_splits = np.zeros(len(df)).astype(np.int)\nfor i in range(nfolds): folds_splits[splits[i][1]] = i\n\ndf['split'] = folds_splits\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def run_train():\n    for fold_number in range(nfolds):\n        print('Training started for Fold :' + str(fold_number))\n    \n        train_df = df[(df.split != fold_number)]\n        valid_df = df[(df.split == fold_number)]\n        \n        #print(train_df.shape + valid_df.shape )\n    \n        train_model(train_df, valid_df, fold_number)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import pickle\nimport xgboost as xgb\nfrom sklearn.metrics import cohen_kappa_score,classification_report\nfrom sklearn.metrics import roc_auc_score\n\nxgb_model = xgb.XGBClassifier(n_estimators=500,learning_rate=0.01,objective='binary:logistic',\n                                  max_depth=5, eval_metric = 'auc', scale_pos_weight=10 )\n\ndef train_model(train_df, valid_df, fold_number):\n    \n    X_train = train_df[['sex_enc','age_approx_scaled','anatom_enc']]\n    y_train = train_df.target\n    \n #   xgb_model = xgb.XGBClassifier(n_estimators=500,learning_rate=0.01,objective='binary:logistic',\n #                                 max_depth=5, eval_metric = 'auc', scale_pos_weight=10 )\n  \n    #({'eta': 0.01, 'max_depth': 5, 'n_estimators': 500}, 0.7401964387321014)\n    xgb_model.fit(X_train, y_train, verbose=True)\n    \n    X_test = valid_df[['sex_enc','age_approx_scaled','anatom_enc']]\n    y_test = valid_df.target\n    predictions = xgb_model.predict(X_test)\n    \n    #print(predictions)\n    #print(cohen_kappa_score(y_test, predictions,weights='quadratic'))\n    #model_score = cohen_kappa_score(y_test, predictions,weights='quadratic')\n    #print(model_score)\n    #model_name = 'xgboost-' + str(fold_number) + '-' + str(model_score) + '.dat'\n    #pickle.dump(xgb_model, open(model_name, 'wb'))\n    print(roc_auc_score(y_test, predictions))\n    print('---------------------------------------------------------------')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"run_train()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Gird Search","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import GridSearchCV\n\nparams = {\n     \"objective\"    : 'binary:logistic',\n     \"num_classes\"  : 2\n     #\"min_child_weight\" : [ 1, 3, 5, 7 ],\n     #\"gamma\"            : [ 0.0, 0.1, 0.2 , 0.3, 0.4 ],\n     #\"colsample_bytree\" : [ 0.3, 0.4, 0.5 , 0.7 ]\n     }\n\nparameters = {\n     \"eta\"          : [ 0.001, 0.002, 0.01 ] ,\n     \"max_depth\"    : [ 3 ,5, 7],\n     \"n_estimators\" : [200,300,500,600]\n     #\"min_child_weight\" : [ 1, 3, 5, 7 ],\n     #\"gamma\"            : [ 0.0, 0.1, 0.2 , 0.3, 0.4 ],\n     #\"colsample_bytree\" : [ 0.3, 0.4, 0.5 , 0.7 ]\n     }\n\nclf = xgb.XGBClassifier(**params)\n\ngrid = GridSearchCV(clf,\n                    parameters, n_jobs=4,\n                    scoring=\"roc_auc\",\n                    cv=5)\n\nX_train = train_new[['sex_enc','age_approx_scaled','anatom_enc']]\ny_train = train_new.target\n\n# uncomment to find best parameters\n#grid.fit(X_train, y_train, verbose=True)\n\n#Print best parameters\n#grid.best_params_, grid.best_score_","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Test Data Prediction ","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"test_data = pd.read_csv('../input/siim-isic-melanoma-classification/test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_data.anatom_site_general_challenge.value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"anatom_type = ['torso', 'lower extremity', 'upper extremity', 'head/neck', 'palms/soles', 'oral/genital']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tqdm import tqdm\n\npt_id = []\nfor i in tqdm(range(test_data.shape[0])):\n    row = test_data.loc[i]\n    #print(row)\n    if row.anatom_site_general_challenge not in anatom_type:\n        pt_id.append(row.patient_id)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"len(pt_id)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#grouped = test_data.groupby(test_data.patient_id)\n#for name,group in grouped:\n#    if name in pt_id:\n#        print(name)\n#        print (group.anatom_site_general_challenge)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Repalcing all null values by torso as it is most occuring\ntest_data.anatom_site_general_challenge.fillna('torso',inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Transforming data ,using same transformer created for train\ntest_data['sex_enc']   = sex_enc.transform(test_data.sex.astype('str'))\ntest_data['anatom_enc']= anatom_enc.transform(test_data.anatom_site_general_challenge.astype('str'))\ntest_data['age_approx_scaled'] = scaler.transform(test_data[['age_approx']])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred_xgb = xgb_model.predict(test_data[['sex_enc','age_approx_scaled', 'anatom_enc']])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sub = pd.DataFrame({'image_name':test_data.image_name.values, 'target':pred_xgb})\nsub.to_csv('submission_xgb.csv',index = False)\nsub.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}