{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nimport matplotlib.gridspec as gridspec\nimport seaborn as sns\n# ---------------------------------------------------------------------\nfrom sklearn.model_selection import StratifiedShuffleSplit\nfrom sklearn.utils import class_weight\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.feature_selection import SelectFromModel\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.metrics import make_scorer, roc_auc_score,classification_report\nfrom sklearn.metrics import roc_auc_score\nfrom sklearn.ensemble import AdaBoostClassifier\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.cluster import KMeans\nfrom keras.preprocessing import image as ik\nfrom sklearn.preprocessing import MinMaxScaler,StandardScaler\nimport keras.backend as K\nfrom keras.layers import AveragePooling2D, MaxPooling2D, Input\nfrom keras.models import Model\n# ---------------------------------------------------------------------\n\nfrom scipy.spatial import distance as dist\n\nimport cv2\nimport math\nimport shutil\nimport os\nimport shutil\nfrom tqdm import tqdm\n\n\n\nfrom xgboost import XGBClassifier, XGBRegressor\nfrom sklearn.model_selection import StratifiedKFold, KFold, LeaveOneOut\nfrom sklearn.model_selection import cross_val_score\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train = pd.read_csv(\"../input/melanoma-zefir/train2.csv\")\ntest = pd.read_csv(\"../input/melanoma-zefir/test2.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train[locing_end].head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"patient_id = LabelEncoder()\nsex = LabelEncoder()\nanatom_site_general_challenge = LabelEncoder()\npatient_id.fit(train[\"patient_id\"].unique())\nsex.fit(train[\"sex\"].unique())\nanatom_site_general_challenge.fit(train[\"anatom_site_general_challenge\"].unique())\ndef label_e(dataframe):\n    dataframe[\"patient_id\"] = patient_id.transform(dataframe[\"patient_id\"])\n    dataframe[\"sex\"] = sex.transform(dataframe[\"sex\"])\n    dataframe[\"anatom_site_general_challenge\"] = anatom_site_general_challenge.transform(dataframe[\"anatom_site_general_challenge\"])\npatient_id2 = LabelEncoder()\npatient_id2.fit(test[\"patient_id\"].unique())\ndef label_e2(dataframe):\n    dataframe[\"patient_id\"] = patient_id2.transform(dataframe[\"patient_id\"])\n    dataframe[\"sex\"] = sex.transform(dataframe[\"sex\"])\n#     dataframe[\"diagnosis\"] = diagnosis.transform(dataframe[\"diagnosis\"])\n    dataframe[\"anatom_site_general_challenge\"] = anatom_site_general_challenge.transform(dataframe[\"anatom_site_general_challenge\"])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_c = train.copy()\nlabel_e(train_c)\ntest_c = test.copy()\nlabel_e2(test_c)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"SHAPE=256\nSHAPE_RESIZE=190\nNUM_LENGTH=10\nNUM_SEGMENTATION = 9\nCOUNT_COLOR = (SHAPE_RESIZE//NUM_SEGMENTATION)\nlocing = [\"l\"+str(i) for i in range(NUM_LENGTH)]\ncolors_table = [\"Color\"+str(canal)+str(znach) for znach in range(COUNT_COLOR*COUNT_COLOR) for canal in range(3)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"matric_color = np.array([[i+j for i in range(COUNT_COLOR)] for j in range(0,COUNT_COLOR*COUNT_COLOR-1,COUNT_COLOR)])\nnum_segmen = math.ceil(COUNT_COLOR/2)\nrows = (COUNT_COLOR//2)\ndef get_number_color(start,end):\n    for j in [start,end]:\n        end = np.append(end,matric_color[j])\n        end = np.append(end,matric_color[:,j])\n    return np.unique(end)\ndef delete_elemen(massiv,arr):\n    mas = massiv\n    for i in arr:\n         mas = np.setdiff1d(mas,i)\n    \n    return mas\nmass = [get_number_color(i,j) for i,j in zip(range(num_segmen),reversed(range(rows,COUNT_COLOR)))]\nmass = [delete_elemen(mass[i],mass[:i]) for i in reversed(range(0,len(mass)))] ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"new_features2 = np.array([\"diff_0_1_segment\",\"diff_0_2_segment\",\"diff_0_3_segment\",\"diff_0_4_segment\",\"diff_0_5_segment\",\n                         \"diff_0_6_segment\",\"diff_0_7_segment\",\"diff_0_8_segment\",\"diff_0_9_segment\",\"diff_0_10_segment\",\n                         \"diff_1_2_segment\",\"diff_1_3_segment\",\"diff_1_4_segment\",\"diff_1_5_segment\",\"diff_1_6_segment\",\n                         \"diff_1_7_segment\",\"diff_1_8_segment\",\"diff_1_9_segment\",\"diff_1_10_segment\",\n                         \"diff_2_3_segment\",\"diff_2_4_segment\",\n                         \"diff_2_5_segment\",\"diff_2_6_segment\",\"diff_2_7_segment\",\"diff_2_8_segment\",\"diff_2_9_segment\",\n                         \"diff_2_10_segment\",\n                         \"diff_3_4_segment\",\"diff_3_5_segment\",\"diff_3_6_segment\",\"diff_3_7_segment\",\n                         \"diff_3_8_segment\",\"diff_3_9_segment\",\"diff_3_10_segment\",\"diff_4_5_segment\",\"diff_4_6_segment\",\n                         \"diff_4_7_segment\",\"diff_4_8_segment\",\"diff_4_9_segment\",\"diff_4_10_segment\",\n                         \"diff_5_6_segment\",\"diff_5_7_segment\",\"diff_5_8_segment\",\"diff_5_9_segment\",\"diff_5_10_segment\",\n                         \"diff_6_7_segment\",\"diff_6_8_segment\",\"diff_6_9_segment\",\"diff_6_10_segment\",\n                         \"diff_7_8_segment\",\"diff_7_9_segment\",\"diff_7_10_segment\",\n                         \"diff_8_9_segment\",\"diff_8_10_segment\",\"diff_9_10_segment\"\n                         ]).tolist()\nfeatures_blue_segment = [\"diff_blue_segment_\"+str(i) for i in range(num_segmen)]\nfeatures_red_segment = [\"diff_red_segment_\"+str(i) for i in range(num_segmen)]\nfeatures_green_segment = [\"diff_green_segment_\"+str(i) for i in range(num_segmen)]\nnew_features_locing = np.array([\"mean_locing\",\"std_locing\"]) \nblue_in_segment = [\"mean_blue_seegment\", \"std_blue_seegment\"]\nmean_in_color = [\"mean_in_color\",\"std_color\",\"mean_in_color_red\",\n                 \"mean_in_color_green\",\"mean_in_color_blue\",\n                \"std_in_color_red\",\n                 \"std_in_color_green\",\"std_in_color_blue\",\n                ]\nred_in_segment = [\"mean_red_seegment\", \"std_red_seegment\"]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"new_features = np.array([])\nnew_features_std = np.array([])\ncanal_name = [\"red\",\"green\",\"blue\"]\nfor i, mas in enumerate(mass):\n    for canal in range(3):\n        name = \"Color_segment_\"+str(i)+\"_mean_canal_\"+canal_name[canal]\n        name2 = \"Color_segment_\"+str(i)+\"_std_canal_\"+canal_name[canal]\n        new_features = np.append(new_features,name)\n        new_features_std = np.append(new_features_std,name2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"locing_end = np.hstack((locing,[\"width\",\"height\",\"split\",\"globuli\",\"sizeveil\",\"sizeglobuli\",\"anatom_site_general_challenge\",\"age_approx\",\"patient_id\",\"sex\"]))\nlocing_end = np.hstack((locing_end,new_features))\nlocing_end = np.hstack((locing_end,new_features2))\nlocing_end = np.hstack((locing_end,new_features_locing))\nlocing_end = np.hstack((locing_end,features_red_segment))\nlocing_end = np.hstack((locing_end,red_in_segment))\nlocing_end = np.hstack((locing_end,blue_in_segment))\nlocing_end = np.hstack((locing_end,features_green_segment))\nlocing_end = np.hstack((locing_end,features_blue_segment))\nlocing_end = np.hstack((locing_end,mean_in_color))\nlocing_end = np.hstack((locing_end,new_features_std[3:]))\nlocing_end","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_split = 0\ntrain_val_split = 0\n\nsplit = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=6)\nfor train_index, test_index in split.split(train_c,train_c[\"target\"]):\n    train_split = train_c.loc[train_index].copy()\n    train_val_split = train_c.loc[test_index].copy()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_x = train_split[locing_end]\ntrain_y = train_split[\"target\"]\nval_x = train_val_split[locing_end]\nval_y = train_val_split[\"target\"]\nstd_scaller = StandardScaler()\nstd_scaller.fit(train_x)\ntrain_x_std_scalled = std_scaller.transform(train_x)\nval_x_std_scalled = std_scaller.transform(val_x)\n\n\ntest_x = test_c[locing_end]\ntest_x_std_scalled = std_scaller.transform(test_x)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"CW = class_weight.compute_class_weight('balanced',np.unique(train_y),train_y)\nclases = [0,1]\nclass_weights = dict(zip(clases,CW))\nclass_weights","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nselect = SelectFromModel(RandomForestClassifier(n_estimators=59, max_depth=44, min_samples_split=9,  min_samples_leaf=19, class_weight=class_weights))\n# select = SelectFromModel(RandomForestClassifier(n_estimators=300, max_depth=44, min_samples_split=9,  min_samples_leaf=12, class_weight=class_weights))\n\nselect.fit(train_x_std_scalled,train_y)\nSELECT_X = select.transform(train_x_std_scalled)\nVAL_X = select.transform(val_x_std_scalled)\nm_depth = SELECT_X.shape[1]\nm_depth","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tree2 = RandomForestClassifier(n_estimators=300, max_depth=150, min_samples_split=9,  min_samples_leaf=18, class_weight=class_weights)\ntree2.fit(SELECT_X,train_y)\nprint(\"ROC AUC: \",make_scorer(roc_auc_score, needs_proba=True)(tree2, VAL_X, val_y))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_pred = tree2.predict_proba(TEST_X)\nprediction = pd.DataFrame(test_pred,columns=[\"t\",\"target\"])\ntest[\"target\"] = prediction[\"target\"]\nsubmission = test[[\"image_name\",\"target\"]]\nsubmission.to_csv(\"submit.csv\", index=False, line_terminator=\"\\n\")","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}