diff --git a/4_type_with_ct_score.ipynb b/4_type_with_ct_score.ipynb index 7b8269a..3fcd455 100644 --- a/4_type_with_ct_score.ipynb +++ b/4_type_with_ct_score.ipynb @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": 493, + "execution_count": 9, "metadata": { "scrolled": true }, @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 494, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -46,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 495, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -55,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 496, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 497, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -87,7 +87,7 @@ "(92, 74)" ] }, - "execution_count": 497, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -112,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 498, + "execution_count": 14, "metadata": { "scrolled": true }, @@ -123,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 499, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -139,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 500, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -148,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 501, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -164,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 502, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -173,7 +173,7 @@ }, { "cell_type": "code", - "execution_count": 503, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -189,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 504, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -210,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 505, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -220,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 506, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -229,7 +229,7 @@ }, { "cell_type": "code", - "execution_count": 507, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -238,7 +238,7 @@ }, { "cell_type": "code", - "execution_count": 508, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -247,7 +247,7 @@ }, { "cell_type": "code", - "execution_count": 509, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -256,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 510, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -266,7 +266,7 @@ }, { "cell_type": "code", - "execution_count": 511, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -283,7 +283,7 @@ }, { "cell_type": "code", - "execution_count": 512, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -292,7 +292,7 @@ }, { "cell_type": "code", - "execution_count": 513, + "execution_count": 29, "metadata": { "scrolled": true }, @@ -304,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 514, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -313,7 +313,7 @@ "((77, 57), (9, 57))" ] }, - "execution_count": 514, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -324,7 +324,7 @@ }, { "cell_type": "code", - "execution_count": 515, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -343,7 +343,7 @@ " dtype='object')" ] }, - "execution_count": 515, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -354,7 +354,7 @@ }, { "cell_type": "code", - "execution_count": 384, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -371,7 +371,7 @@ " [1., 0., 0., 0.]])" ] }, - "execution_count": 384, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -389,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 385, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -408,21 +408,9 @@ }, { "cell_type": "code", - "execution_count": 386, + "execution_count": 34, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\pandas\\core\\frame.py:4305: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " return super().drop(\n" - ] - } - ], + "outputs": [], "source": [ "# X_train.drop(labels=cor_features, axis=1, inplace=True)\n", "# X_test.drop(labels=cor_features, axis=1, inplace=True)" @@ -430,44 +418,37 @@ }, { "cell_type": "code", - "execution_count": 387, + "execution_count": 35, "metadata": { "scrolled": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "((77, 37), (9, 37))" - ] - }, - "execution_count": 387, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# X_train.shape, X_test.shape" ] }, { "cell_type": "code", - "execution_count": 388, + "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Index(['Sex', 'Age', 'AgeG1', 'Temp', 'CTScore', 'AIVolumeP', 'cTnITimes',\n", - " 'cTnI', 'cTnICKMBOrdinal1', 'LDH', 'NTproBNP', 'LYM1', 'N2L1', 'CRP1',\n", - " 'ALB1', 'CRP2', 'ALB2', 'Sympton', 'Fever', 'Cough', 'Phlegm',\n", - " 'Hemoptysis', 'SoreThroat', 'Catarrh', 'Headache', 'ChestPain',\n", - " 'Fatigue', 'SoreMuscle', 'Diarrhea', 'PoorAppetite', 'NauseaNVomit',\n", - " 'Hypertention', 'Hyperlipedia', 'DM', 'Lung', 'CAD', 'Cancer'],\n", + "Index(['Sex', 'Age', 'AgeG1', 'Height', 'Weight', 'BMI', 'Temp', 'CTScore',\n", + " 'AIVolumeP', 'cTnITimes', 'cTnI', 'cTnICKMBOrdinal1',\n", + " 'cTnICKMBOrdinal2', 'AST', 'LDH', 'CK', 'CKMB', 'HBDH', 'HiCKMB',\n", + " 'NTproBNP', 'Cr', 'PCT1', 'WBC1', 'NEU1', 'LYM1', 'N2L1', 'CRP1',\n", + " 'ALB1', 'PCT2', 'WBC2', 'NEU2', 'LYM2', 'N2L2', 'CRP2', 'ALB2',\n", + " 'Sympton', 'Fever', 'Cough', 'Phlegm', 'Hemoptysis', 'SoreThroat',\n", + " 'Catarrh', 'Headache', 'ChestPain', 'Fatigue', 'SoreMuscle',\n", + " 'Stomachache', 'Diarrhea', 'PoorAppetite', 'NauseaNVomit',\n", + " 'Hypertention', 'Hyperlipedia', 'DM', 'Lung', 'CAD', 'Arrythmia',\n", + " 'Cancer'],\n", " dtype='object')" ] }, - "execution_count": 388, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -485,7 +466,7 @@ }, { "cell_type": "code", - "execution_count": 516, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ @@ -504,7 +485,7 @@ }, { "cell_type": "code", - "execution_count": 517, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -513,7 +494,7 @@ }, { "cell_type": "code", - "execution_count": 518, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ @@ -530,7 +511,7 @@ }, { "cell_type": "code", - "execution_count": 519, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -539,7 +520,7 @@ "DecisionTreeClassifier()" ] }, - "execution_count": 519, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -554,14 +535,14 @@ }, { "cell_type": "code", - "execution_count": 520, + "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0.7116666666666667\n" + "0.6983333333333335\n" ] } ], @@ -578,7 +559,7 @@ }, { "cell_type": "code", - "execution_count": 573, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ @@ -587,7 +568,7 @@ }, { "cell_type": "code", - "execution_count": 574, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -596,7 +577,7 @@ "RandomForestClassifier()" ] }, - "execution_count": 574, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -611,14 +592,14 @@ }, { "cell_type": "code", - "execution_count": 575, + "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0.7682480737653151\n" + "0.7576719576719576\n" ] } ], @@ -628,7 +609,7 @@ }, { "cell_type": "code", - "execution_count": 576, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -638,8 +619,18 @@ "Random Forest\n", "Precision: 0.5555555555555556\n", "Recal: 0.5555555555555556\n", - "F1: 0.6666666666666667\n", - "CI: 0.32464394339996944\n" + "F1: 0.6666666666666667\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'math' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Recal: \"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msklearn\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmetrics\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrecall_score\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrf_pred\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maverage\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'micro'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"F1: \"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msklearn\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmetrics\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mf1_score\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrf_pred\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maverage\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'micro'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"CI:\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1.96\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mmath\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[1;33m(\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0msklearn\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmetrics\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maccuracy_score\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrf_pred\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m*\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0msklearn\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmetrics\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maccuracy_score\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrf_pred\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'math' is not defined" ] } ], @@ -661,7 +652,7 @@ }, { "cell_type": "code", - "execution_count": 525, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -670,38 +661,9 @@ }, { "cell_type": "code", - "execution_count": 526, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n" - ] - }, - { - "data": { - "text/plain": [ - "SVC(decision_function_shape='ovo', probability=True)" - ] - }, - "execution_count": 526, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "svc = SVC(probability=True, decision_function_shape='ovo')\n", "\n", @@ -712,17 +674,9 @@ }, { "cell_type": "code", - "execution_count": 527, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.6375\n" - ] - } - ], + "outputs": [], "source": [ "print(np.mean(svc_f1))" ] @@ -736,178 +690,9 @@ }, { "cell_type": "code", - "execution_count": 538, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\xgboost\\sklearn.py:892: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n", - " warnings.warn(label_encoder_deprecation_msg, UserWarning)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[22:29:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", - "Parameters: { scale_pos_weight } might not be used.\n", - "\n", - " This may not be accurate due to some parameters are only used in language bindings but\n", - " passed down to XGBoost core. Or some parameters are not used but slip through this\n", - " verification. Please open an issue if you find above cases.\n", - "\n", - "\n", - "[22:29:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\xgboost\\sklearn.py:892: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n", - " warnings.warn(label_encoder_deprecation_msg, UserWarning)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[22:29:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", - "Parameters: { scale_pos_weight } might not be used.\n", - "\n", - " This may not be accurate due to some parameters are only used in language bindings but\n", - " passed down to XGBoost core. Or some parameters are not used but slip through this\n", - " verification. Please open an issue if you find above cases.\n", - "\n", - "\n", - "[22:29:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\xgboost\\sklearn.py:892: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n", - " warnings.warn(label_encoder_deprecation_msg, UserWarning)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[22:29:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", - "Parameters: { scale_pos_weight } might not be used.\n", - "\n", - " This may not be accurate due to some parameters are only used in language bindings but\n", - " passed down to XGBoost core. Or some parameters are not used but slip through this\n", - " verification. Please open an issue if you find above cases.\n", - "\n", - "\n", - "[22:29:23] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\xgboost\\sklearn.py:892: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n", - " warnings.warn(label_encoder_deprecation_msg, UserWarning)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[22:29:24] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", - "Parameters: { scale_pos_weight } might not be used.\n", - "\n", - " This may not be accurate due to some parameters are only used in language bindings but\n", - " passed down to XGBoost core. Or some parameters are not used but slip through this\n", - " verification. Please open an issue if you find above cases.\n", - "\n", - "\n", - "[22:29:24] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\xgboost\\sklearn.py:892: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n", - " warnings.warn(label_encoder_deprecation_msg, UserWarning)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[22:29:24] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", - "Parameters: { scale_pos_weight } might not be used.\n", - "\n", - " This may not be accurate due to some parameters are only used in language bindings but\n", - " passed down to XGBoost core. Or some parameters are not used but slip through this\n", - " verification. Please open an issue if you find above cases.\n", - "\n", - "\n", - "[22:29:24] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\xgboost\\sklearn.py:892: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n", - " warnings.warn(label_encoder_deprecation_msg, UserWarning)\n", - "d:\\anaconda3\\envs\\covid-19\\lib\\site-packages\\sklearn\\utils\\validation.py:63: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", - " return f(*args, **kwargs)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[22:29:24] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", - "Parameters: { scale_pos_weight } might not be used.\n", - "\n", - " This may not be accurate due to some parameters are only used in language bindings but\n", - " passed down to XGBoost core. Or some parameters are not used but slip through this\n", - " verification. Please open an issue if you find above cases.\n", - "\n", - "\n", - "[22:29:24] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" - ] - }, - { - "data": { - "text/plain": [ - "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n", - " colsample_bynode=1, colsample_bytree=0.7, gamma=0, gpu_id=-1,\n", - " importance_type='gain', interaction_constraints='',\n", - " learning_rate=0.300000012, max_delta_step=0, max_depth=4,\n", - " min_child_weight=1, missing=nan, monotone_constraints='()',\n", - " n_estimators=100, n_jobs=8, num_parallel_tree=1,\n", - " objective='multi:softprob', random_state=0, reg_alpha=4,\n", - " reg_lambda=1, scale_pos_weight=9, subsample=0.8,\n", - " tree_method='exact', validate_parameters=1, verbosity=None)" - ] - }, - "execution_count": 538, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Create a model\n", "# Params from: https://www.kaggle.com/aharless/swetha-s-xgboost-revised\n", @@ -932,38 +717,18 @@ }, { "cell_type": "code", - "execution_count": 539, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.8441666666666666\n" - ] - } - ], + "outputs": [], "source": [ "print(np.mean(xgbc_f1))" ] }, { "cell_type": "code", - "execution_count": 540, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "XGBoost\n", - "Precision: 0.7777777777777778\n", - "Recal: 0.7777777777777778\n", - "F1: 0.7777777777777778\n", - "CI: 0.27161661029914536\n" - ] - } - ], + "outputs": [], "source": [ "xgbc_pred = ohe.transform(xgbc.predict(np.array(X_test)).reshape(-1, 1)).toarray()\n", "print(\"XGBoost\")\n", @@ -989,7 +754,7 @@ }, { "cell_type": "code", - "execution_count": 485, + "execution_count": 46, "metadata": {}, "outputs": [], "source": [ @@ -998,14 +763,14 @@ }, { "cell_type": "code", - "execution_count": 577, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ - "with open(\"4-type-model-4-ct.pkl\", 'wb') as f:\n", + "with open(\"model/4-type-model-4-ct.pkl\", 'wb') as f:\n", " pickle.dump([dt, rf, svc, xgbc], f)\n", "with open(\"dataset/4-type-dataset-ct.pkl\", 'wb') as f:\n", - " pickle.dump([X_train, X_test, y_train, y_test], f)" + " pickle.dump([X_train, X_test, y_train, y_test, ohe], f)" ] }, { @@ -1017,11 +782,11 @@ }, { "cell_type": "code", - "execution_count": 487, + "execution_count": 48, "metadata": {}, "outputs": [], "source": [ - "with open(\"4-type-model-4-ct.pkl\", 'rb') as f:\n", + "with open(\"model/4-type-model-4-ct.pkl\", 'rb') as f:\n", " [dt, rf, svc, xgbc] = pickle.load(f)" ] }, @@ -1034,12 +799,12 @@ }, { "cell_type": "code", - "execution_count": 488, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "with open(\"dataset/4-type-dataset-ct.pkl\", 'rb') as f:\n", - " [X_train, X_test, y_train, y_test] = pickle.load(f)" + " [X_train, X_test, y_train, y_test, ohe] = pickle.load(f)" ] }, { @@ -1051,7 +816,7 @@ }, { "cell_type": "code", - "execution_count": 531, + "execution_count": 50, "metadata": {}, "outputs": [], "source": [ @@ -1061,9 +826,9 @@ }, { "cell_type": "code", - "execution_count": 532, + "execution_count": 51, "metadata": { - "scrolled": true + "scrolled": false }, "outputs": [], "source": [ @@ -1075,7 +840,7 @@ }, { "cell_type": "code", - "execution_count": 533, + "execution_count": 52, "metadata": {}, "outputs": [], "source": [ @@ -1084,7 +849,7 @@ }, { "cell_type": "code", - "execution_count": 534, + "execution_count": 53, "metadata": { "scrolled": true }, @@ -1094,10 +859,10 @@ "output_type": "stream", "text": [ "Decision Tree\n", - "Precision: 0.5555555555555556\n", - "Recal: 0.5555555555555556\n", - "F1: 0.5555555555555556\n", - "CI: 0.32464394339996944\n", + "Precision: 0.6666666666666666\n", + "Recal: 0.6666666666666666\n", + "F1: 0.6666666666666666\n", + "CI: 0.3079842869168074\n", "\n", "Random Forest\n", "Precision: 0.5555555555555556\n", @@ -1151,6 +916,102 @@ "print(\"CI:\", 1.96 * math.sqrt( ((1 - sklearn.metrics.accuracy_score(y_test, xgbc_pred)) * (sklearn.metrics.accuracy_score(y_test, xgbc_pred))) / len(X_test)))" ] }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "from lime import lime_tabular\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Sex', 'Age', 'AgeG1', 'Height', 'Weight', 'BMI', 'Temp', 'CTScore',\n", + " 'AIVolumeP', 'cTnITimes', 'cTnI', 'cTnICKMBOrdinal1',\n", + " 'cTnICKMBOrdinal2', 'AST', 'LDH', 'CK', 'CKMB', 'HBDH', 'HiCKMB',\n", + " 'NTproBNP', 'Cr', 'PCT1', 'WBC1', 'NEU1', 'LYM1', 'N2L1', 'CRP1',\n", + " 'ALB1', 'PCT2', 'WBC2', 'NEU2', 'LYM2', 'N2L2', 'CRP2', 'ALB2',\n", + " 'Sympton', 'Fever', 'Cough', 'Phlegm', 'Hemoptysis', 'SoreThroat',\n", + " 'Catarrh', 'Headache', 'ChestPain', 'Fatigue', 'SoreMuscle',\n", + " 'Stomachache', 'Diarrhea', 'PoorAppetite', 'NauseaNVomit',\n", + " 'Hypertention', 'Hyperlipedia', 'DM', 'Lung', 'CAD', 'Arrythmia',\n", + " 'Cancer'],\n", + " dtype='object')" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "categorical_features = [0, 2, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56]\n", + "categorical_names = {}\n", + "for c in categorical_features:\n", + " categorical_names[c] = [\"False\", \"True\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Patient id: 59\n", + "Probabilities = [0.20759514 0.63533659 0.13100225 0.02606603]\n", + "True class: severe\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "idx = 59\n", + "class_names = ['normal', 'mild', 'severe', 'critical']\n", + "\n", + "print('Patient id: %d' % idx)\n", + "print('Probabilities =', svc.predict_proba(np.array(X_train)[idx, :].reshape(1, -1))[0])\n", + "print('True class: %s' % class_names[ohe.inverse_transform(np.array([y_train[idx]]))[0][0]])\n", + "explainer = lime_tabular.LimeTabularExplainer(np.array(X_train), \n", + " feature_names= X_train.columns, class_names = class_names, \n", + " categorical_features = categorical_features, categorical_names = categorical_names,\n", + " discretize_continuous=True)\n", + "exp = explainer.explain_instance(np.array(X_train)[idx, :], predict_fn = svc.predict_proba, num_features = 10)\n", + "\n", + "%matplotlib inline\n", + "fig = exp.as_pyplot_figure()" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/4_type_without_ct_score.ipynb b/4_type_without_ct_score.ipynb index 78cabf0..a830cab 100644 --- a/4_type_without_ct_score.ipynb +++ b/4_type_without_ct_score.ipynb @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": 147, + "execution_count": 1, "metadata": { "scrolled": true }, @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 148, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -46,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 149, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -55,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 150, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 151, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -87,7 +87,7 @@ "(92, 74)" ] }, - "execution_count": 151, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -112,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 152, + "execution_count": 6, "metadata": { "scrolled": true }, @@ -123,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 153, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -139,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 154, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -148,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 155, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -164,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 156, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -173,7 +173,7 @@ }, { "cell_type": "code", - "execution_count": 157, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -189,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 158, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -210,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 159, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -220,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 160, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -229,7 +229,7 @@ }, { "cell_type": "code", - "execution_count": 161, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -238,7 +238,7 @@ }, { "cell_type": "code", - "execution_count": 162, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -247,7 +247,7 @@ }, { "cell_type": "code", - "execution_count": 163, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -256,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 164, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -266,7 +266,7 @@ }, { "cell_type": "code", - "execution_count": 165, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -283,7 +283,7 @@ }, { "cell_type": "code", - "execution_count": 166, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -292,7 +292,7 @@ }, { "cell_type": "code", - "execution_count": 167, + "execution_count": 21, "metadata": { "scrolled": true }, @@ -304,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 168, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -313,7 +313,7 @@ "((77, 55), (9, 55))" ] }, - "execution_count": 168, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -324,7 +324,7 @@ }, { "cell_type": "code", - "execution_count": 169, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -342,7 +342,7 @@ " dtype='object')" ] }, - "execution_count": 169, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -353,7 +353,7 @@ }, { "cell_type": "code", - "execution_count": 170, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -370,7 +370,7 @@ " [1., 0., 0., 0.]])" ] }, - "execution_count": 170, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -388,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 171, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -406,7 +406,7 @@ }, { "cell_type": "code", - "execution_count": 172, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -416,7 +416,7 @@ }, { "cell_type": "code", - "execution_count": 173, + "execution_count": 27, "metadata": { "scrolled": false }, @@ -427,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": 174, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -445,7 +445,7 @@ " dtype='object')" ] }, - "execution_count": 174, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -463,10 +463,11 @@ }, { "cell_type": "code", - "execution_count": 175, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ + "import math\n", "import sklearn\n", "import sklearn.ensemble\n", "import sklearn.metrics\n", @@ -482,7 +483,7 @@ }, { "cell_type": "code", - "execution_count": 176, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ @@ -491,7 +492,7 @@ }, { "cell_type": "code", - "execution_count": 177, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -508,7 +509,7 @@ }, { "cell_type": "code", - "execution_count": 213, + "execution_count": 39, "metadata": { "scrolled": true }, @@ -519,7 +520,7 @@ "DecisionTreeClassifier()" ] }, - "execution_count": 213, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -534,7 +535,7 @@ }, { "cell_type": "code", - "execution_count": 214, + "execution_count": 40, "metadata": { "scrolled": true }, @@ -543,7 +544,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.4525\n" + "0.4\n" ] } ], @@ -553,7 +554,7 @@ }, { "cell_type": "code", - "execution_count": 215, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -586,7 +587,7 @@ }, { "cell_type": "code", - "execution_count": 216, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ @@ -595,7 +596,7 @@ }, { "cell_type": "code", - "execution_count": 217, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -604,7 +605,7 @@ "RandomForestClassifier()" ] }, - "execution_count": 217, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -619,14 +620,14 @@ }, { "cell_type": "code", - "execution_count": 218, + "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0.526854897337656\n" + "0.5255369458128079\n" ] } ], @@ -636,7 +637,7 @@ }, { "cell_type": "code", - "execution_count": 219, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -646,7 +647,7 @@ "Random Forest\n", "Precision: 0.3333333333333333\n", "Recal: 0.3333333333333333\n", - "F1: 0.46153846153846156\n", + "F1: 0.42857142857142855\n", "CI: 0.3079842869168074\n" ] } @@ -669,7 +670,7 @@ }, { "cell_type": "code", - "execution_count": 183, + "execution_count": 46, "metadata": {}, "outputs": [], "source": [ @@ -678,7 +679,7 @@ }, { "cell_type": "code", - "execution_count": 184, + "execution_count": 47, "metadata": {}, "outputs": [ { @@ -705,7 +706,7 @@ "SVC(decision_function_shape='ovo', probability=True)" ] }, - "execution_count": 184, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -720,7 +721,7 @@ }, { "cell_type": "code", - "execution_count": 185, + "execution_count": 48, "metadata": {}, "outputs": [ { @@ -744,7 +745,7 @@ }, { "cell_type": "code", - "execution_count": 186, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -761,7 +762,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[22:31:29] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", + "[10:13:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", "Parameters: { scale_pos_weight } might not be used.\n", "\n", " This may not be accurate due to some parameters are only used in language bindings but\n", @@ -769,7 +770,7 @@ " verification. Please open an issue if you find above cases.\n", "\n", "\n", - "[22:31:29] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" + "[10:13:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" ] }, { @@ -786,7 +787,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[22:31:29] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", + "[10:13:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", "Parameters: { scale_pos_weight } might not be used.\n", "\n", " This may not be accurate due to some parameters are only used in language bindings but\n", @@ -794,7 +795,7 @@ " verification. Please open an issue if you find above cases.\n", "\n", "\n", - "[22:31:29] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" + "[10:13:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" ] }, { @@ -811,7 +812,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[22:31:29] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", + "[10:13:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", "Parameters: { scale_pos_weight } might not be used.\n", "\n", " This may not be accurate due to some parameters are only used in language bindings but\n", @@ -819,7 +820,7 @@ " verification. Please open an issue if you find above cases.\n", "\n", "\n", - "[22:31:29] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" + "[10:13:03] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" ] }, { @@ -836,7 +837,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[22:31:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", + "[10:13:04] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", "Parameters: { scale_pos_weight } might not be used.\n", "\n", " This may not be accurate due to some parameters are only used in language bindings but\n", @@ -844,7 +845,7 @@ " verification. Please open an issue if you find above cases.\n", "\n", "\n", - "[22:31:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" + "[10:13:04] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" ] }, { @@ -861,7 +862,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[22:31:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", + "[10:13:04] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", "Parameters: { scale_pos_weight } might not be used.\n", "\n", " This may not be accurate due to some parameters are only used in language bindings but\n", @@ -869,7 +870,7 @@ " verification. Please open an issue if you find above cases.\n", "\n", "\n", - "[22:31:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" + "[10:13:04] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" ] }, { @@ -886,7 +887,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[22:31:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", + "[10:13:04] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:541: \n", "Parameters: { scale_pos_weight } might not be used.\n", "\n", " This may not be accurate due to some parameters are only used in language bindings but\n", @@ -894,7 +895,7 @@ " verification. Please open an issue if you find above cases.\n", "\n", "\n", - "[22:31:30] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" + "[10:13:04] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.3.0/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n" ] }, { @@ -911,7 +912,7 @@ " tree_method='exact', validate_parameters=1, verbosity=None)" ] }, - "execution_count": 186, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -940,7 +941,7 @@ }, { "cell_type": "code", - "execution_count": 187, + "execution_count": 50, "metadata": {}, "outputs": [ { @@ -957,7 +958,7 @@ }, { "cell_type": "code", - "execution_count": 188, + "execution_count": 51, "metadata": {}, "outputs": [ { @@ -997,7 +998,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -1006,14 +1007,14 @@ }, { "cell_type": "code", - "execution_count": 223, + "execution_count": 59, "metadata": {}, "outputs": [], "source": [ - "with open(\"4-type-model-4.pkl\", 'wb') as f:\n", + "with open(\"model/4-type-model-4.pkl\", 'wb') as f:\n", " pickle.dump([dt, rf, svc, xgbc], f)\n", "with open(\"dataset/4-type-dataset.pkl\", 'wb') as f:\n", - " pickle.dump([X_train, X_test, y_train, y_test], f)" + " pickle.dump([X_train, X_test, y_train, y_test, ohe], f)" ] }, { @@ -1025,11 +1026,11 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 60, "metadata": {}, "outputs": [], "source": [ - "with open(\"4-type-model-4.pkl\", 'rb') as f:\n", + "with open(\"model/4-type-model-4.pkl\", 'rb') as f:\n", " [dt, rf, svc, xgbc] = pickle.load(f)" ] }, @@ -1042,12 +1043,12 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 66, "metadata": {}, "outputs": [], "source": [ - "with open(\"dataset/4-type-dataset-ct.pkl\", 'rb') as f:\n", - " [X_train, X_test, y_train, y_test] = pickle.load(f)" + "with open(\"dataset/4-type-dataset.pkl\", 'rb') as f:\n", + " [X_train, X_test, y_train, y_test, ohe] = pickle.load(f)" ] }, { @@ -1059,7 +1060,7 @@ }, { "cell_type": "code", - "execution_count": 189, + "execution_count": 67, "metadata": {}, "outputs": [], "source": [ @@ -1069,7 +1070,7 @@ }, { "cell_type": "code", - "execution_count": 190, + "execution_count": 68, "metadata": {}, "outputs": [], "source": [ @@ -1078,7 +1079,7 @@ }, { "cell_type": "code", - "execution_count": 220, + "execution_count": 69, "metadata": { "scrolled": true }, @@ -1092,7 +1093,7 @@ }, { "cell_type": "code", - "execution_count": 221, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ @@ -1101,9 +1102,9 @@ }, { "cell_type": "code", - "execution_count": 222, + "execution_count": 71, "metadata": { - "scrolled": false + "scrolled": true }, "outputs": [ { @@ -1119,7 +1120,7 @@ "Random Forest\n", "Precision: 0.3333333333333333\n", "Recal: 0.3333333333333333\n", - "F1: 0.46153846153846156\n", + "F1: 0.42857142857142855\n", "CI: 0.3079842869168074\n", "\n", "SVC\n", @@ -1168,6 +1169,103 @@ "print(\"CI:\", 1.96 * math.sqrt( ((1 - sklearn.metrics.accuracy_score(y_test, xgbc_pred)) * (sklearn.metrics.accuracy_score(y_test, xgbc_pred))) / len(X_test)))" ] }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [], + "source": [ + "from lime import lime_tabular\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Sex', 'Age', 'AgeG1', 'Height', 'Weight', 'BMI', 'Temp', 'cTnITimes',\n", + " 'cTnI', 'cTnICKMBOrdinal1', 'cTnICKMBOrdinal2', 'AST', 'LDH', 'CK',\n", + " 'CKMB', 'HBDH', 'HiCKMB', 'NTproBNP', 'Cr', 'PCT1', 'WBC1', 'NEU1',\n", + " 'LYM1', 'N2L1', 'CRP1', 'ALB1', 'PCT2', 'WBC2', 'NEU2', 'LYM2', 'N2L2',\n", + " 'CRP2', 'ALB2', 'Sympton', 'Fever', 'Cough', 'Phlegm', 'Hemoptysis',\n", + " 'SoreThroat', 'Catarrh', 'Headache', 'ChestPain', 'Fatigue',\n", + " 'SoreMuscle', 'Stomachache', 'Diarrhea', 'PoorAppetite', 'NauseaNVomit',\n", + " 'Hypertention', 'Hyperlipedia', 'DM', 'Lung', 'CAD', 'Arrythmia',\n", + " 'Cancer'],\n", + " dtype='object')" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [], + "source": [ + "categorical_features = [0, 2, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54]\n", + "categorical_names = {}\n", + "for c in categorical_features:\n", + " categorical_names[c] = [\"False\", \"True\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Patient id: 59\n", + "Probabilities = [0.21480915 0.61937912 0.1375398 0.02827192]\n", + "True class: severe\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAccAAAEICAYAAAAqQj/TAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAvFElEQVR4nO3dd5xdVb3+8c9DDYQOEWkxShFpN8AQG2i4chEFKRcUEEsUQb0qVxHU+8OLFBUBBRXwakSkiAIiYASkJ9LLhBQIXUFJQAlVupTn98deAyebMzNnMmdKwvN+vc6Lvddee+3vOhnmO2vtfc6SbSIiIuJViwx1ABEREcNNkmNERERNkmNERERNkmNERERNkmNERERNkmNERERNkmPEAJA0XtLsQb7mGEmWtNhgXrdcey9JlwxQ25+X9A9JT0laeSCuUa4zQdLVA9V+f0gaXfq/aNmfIukz3dQdsp+DhUmSY7xuSLpP0jZDHceCrtkvX9un2952AK61OHAMsK3tZWw/0u5rLAhs/630/6WhjuX1IskxIoazVYERwKy+nqhKfsfFfMkPTrzuSVpS0g8lPVBeP5S0ZMPxnSRNl/RPSX+WtF0p/5Sk2yU9Kekvkj7bh2uuL+lSSY9KulPSR0r52qVss7K/uqS5ksaX/SmSjpB0Y4nn95JW6uYa3cbXNe0r6auSHpL0oKRPNRzfXtK0co37JR3S0PSV5b+Pl6m+d9anJCW9S9JNkp4o/31Xw7Epkg6XdE2J7RJJqzSJfz3gzoZrXdFi29+RdA3wDPCWJu2uJemc8r4+Iun4bt6/H5W+/1PSVElbNRwbJ6mzHPuHpGNK+QhJvyrtPl7iW7Wb9u+TdKCkmZKelvQLSatK+mN5Xy6TtGKp2+1UqaRFJX1f0sOS/gJs3+x60Ue288rrdfEC7gO2aVJ+GHA98AZgFHAtcHg5Ng54AvgPqj8m1wDWL8e2B9YGBLyX6pfxZuXYeGB2N3GMBO4HPgUsBmwKPAxsUI7vA9wGLA1cDHy/4dwpwBxgo9LO74BflWNjAAOLtRjfi6XviwMfLMdXbDi+cenzJsA/gJ2bXaeUTQCuLtsrAY8BHy/927Psr9zQhz8D6wFLlf3vdfNe1fvUStt/AzYsxxevtbcoMAM4trx/I4At630o+x8DVi7tfBX4OzCiHLsO+HjZXgZ4R9n+LPCH8m+3KLA5sFwPP4/XU42O1wAeAm6m+nkYAVwBfKub92EK8Jmy/TngDmCt8v5Mrv/75NX3V0aOEbAXcJjth2zPBQ6l+uULsDdwku1Lbb9se47tOwBsX2D7z678CbgE2KrpFea1A3Cf7V/aftH2NKok9+HS7s+Be4AbgNWAg2rnn2b7VttPA/8LfETlQY1GLcT3Qun3C7YvBJ4C3lrOnWL7ltLnmcBvqBJsK7YH7rZ9Wunfb6h+eX+ooc4vbd9l+1ngLGBsG9s+2fascvyF2vnjgNWBA20/bfs5200fwrH9K9uPlHZ+ACxJeX+o3rt1JK1i+ynb1zeUrwysY/sl21Nt/7OH/hxn+x+25wBXATfYnmb7OeBcqkTZm48AP7R9v+1HgSNaOCd6keQYUf2y/GvD/l9LGVR/jf+52UmSPiDp+jIN+jjV6Os104NNvAl4e5l2e7ycuxfwxoY6P6caHR5n+/na+ffXYl282XVbiO8R2y827D9DNQpC0tslTS5Tj09QjU5a6Ru89v3sinONhv2/N7tum9q+n+6tBfy11u+mJB1QpqWfKO/f8rz6HuxNNfK9o0yd7lDKT6Ma7Z+haor+KFUPFXXnHw3bzzbZb+V9WZ3X/kxEPyU5RsADVAmry+hSBtUvnbXrJ6i6J/k74PvAqrZXAC6kmsLszf3An2yv0PBaxvbnS9vLAD8EfgEc0uSe4lq1WF+gmpZtV3wAvwYmAWvZXh74acO5vS3lU38/u+Kc0+K1+9t2T/HdD4xudu+uUbm/+DWqUdmK5f17gvIe2L7b9p5UU/FHAmdLGllG4Yfa3gB4F9UswSda7dx8epDX/kxEPyU5xuvN4uWhia7XYlRTht+UNKo8GHIw8KtS/xfApyS9T9IiktaQtD6wBNU021zgRUkfAFr9KMP5wHqSPi5p8fLaQtLbyvEfAZ22PwNcQJWYGn1M0gaSlqa6Z3i2X/uIf3/iA1gWeNT2c5LGAR9tODYXeJkmD7sUF5b+fVTSYpJ2BzYo/e6v/rZ9I1Uy+Z6kkeVn4N1N6i1LdU92LrCYpIOB5boOSvqYpFG2XwYeL8UvS9pa0sZlmvufVH+4vDwf/eyLs4D9JK1ZHuD5xgBf73UhyTFeby6kmq7qeh0CfBvoBGYCt1A9FPFtANs3Uj04cyzVyOFPwJtsPwnsR/WL6TGq5DGplQDKudsCe1CNhP5ONfpYUtJOwHbA50v1/YHNJO3V0MRpwMnlvBEljmbXmK/4iv8CDpP0JNUfC2c1tP0M8B3gmjIt/I7atR+hGjF9FXiEagS2g+15Rrfzo79tlz8iPgSsQ/Xgzmxg9yZVLwYuAu6imqZ8jnmnLrcDZkl6iuqPmT3K/dM3AmdTJcbbqX5eTutbL/vs5yXeGVQ/u+cM8PVeF2RnseOIBYWkKVRPp5441LFELMwycoyIiKhJcoyIiKjJtGpERERNRo4RERE1WdJkIbDKKqt4zJgxQx1GRMQCZerUqQ/bHtXsWJLjQmDMmDF0dnYOdRgREQsUSd1+m1CmVSMiImqSHCMiImqSHCMiImqSHCMiImqSHCMiImqSHCMiImqSHCMiImqSHCMiImryJQABanVx+IiIITSI3wWekWNERERNkmNERERNkmNERERNkmNERERNr8lRkiX9oGH/AEmHSDpI0vTyeqlhe7/+BiVpgqS5pb1Zks6WtHQ5doikZyS9oaH+Uw3bXbHcKum3Xef1I5bPSbqltHm1pA1K+cqSJkt6StLxtXO+I+n+xri6aft/JN0j6U5J728o366U3SPpG/2JPyIi+q6VkePzwH9KWqWx0PZ3bI+1PRZ4tmvb9o9bubCk3p6UPbO0tyHwL2D3hmMPA1/t5ryuWDYq532uybVXbCXG4te2Ny79PAo4ppQ/B/wvcECTc/4AjOup0ZJk9wA2BLYDfiJpUUmLAicAHwA2APbsSsgRETE4WkmOLwITga+02qikkyX9VFKnpLsk7VDKJ0iaJOkK4HJJK0k6T9JMSddL2qRJW4sBI4HHGopPAnaXtFIvoVwFrNOk/LwSx469JWnb/2zYHQm4lD9t+2qqJFk/53rbD/YS207AGbaft30vcA9VQh0H3GP7L7b/BZxR6kZExCBp9Z7jCcBekpbvQ9tjqH7Rbw/8VNKIUr4ZsJvt9wKHAtNsbwL8P+DUhvN3lzQdmAOsRDUa6/IUVYL87+4uXpLeB4BbmhweTzUC3A24XdJ3JTVLol1tfUHSn6lGjv2eNi7WAO5v2J9dyrorr8e0b/njo3Pu3LltCikiIqDF5FhGT6fSt8Rwlu2Xbd8N/AVYv5RfavvRsr0lcFq5xhXAypKWK8fOLFOZb6RKcAfW2v8x8ElJy9bKlypJtRP4G/CLJv2x7Sm2PwFsTjUavEPSrs06YvsE22sDXwe+2VLvB5jtibY7bHeMGjVqqMOJiFio9OUbcn4I3Az8ssX69a8y6Np/ug/XxLYl/QH4EvC9hvLHJf0a+ELtlGdLUu2RpKWAXYBPAytQjUIv7eW0M4D/azn4ns0B1mrYX7OU0UN5REQMgpY/ylFGe2cBe7d4yoclLSJpbeAtwJ1N6lwF7AUgaTzwcO0eX5ctgT83KT8G+Cx9/Bo8SUcBtwHvAg4sI7ATml1b0roNu9sDd/flWj2YBOwhaUlJbwbWBW4EbgLWlfRmSUtQPbQzqU3XjIiIFvT1u1V/AHyxxbp/o/plvxzwOdvP6bXf4XkIcJKkmcAzwCcbju0uaUuqBD4bmFA/2fbDks6lDw8LFVOAg22/5mGaJr4oaRvgBaqHgl6JUdJ9VP1bQtLOwLa2byvJ96PA0pJmAyfaPkTSjkCH7YNtz5J0FlWSfhH4gu2XSrtfBC4GFgVOsj2rj/2LiIh+kAfgi1wlnQycb/vstjcer9HR0eHOzs75byBfPB4RC4I25ytJU213NDuWb8iJiIioGZAlq2xPGIh2IyIiBkPWc4xBXSMtImJBkGnViIiImiTHiIiImiTHiIiImtxzjIiI4aW7j5cN4vMRGTlGRETUJDlGRETUJDlGRETUJDlGRETUDHpylPRUbX+CpOPL9iGS5kiaLukOSf8naZFy7GRJ90qaIekuSadKWrOhnfskrdKwP17S+W2I9zuS7q/HXY59RNJtkmaV5bOQNFbSdaVspqTdu2l3SUlnSrpH0g2SxjQc+59Sfqek9/e3DxER0TfDceR4bFmPcQNgY+C9DccOtP1vwFuBacAVZVmnlkkaKWnxPpzyB2Bck3bWBf4HeLftDYEvl0PPAJ8oZdsBP5S0QpN29wYes70OcCxwZGl3A6plqrrO/4mkRfsQb0RE9NNwTI5dlgBGUC0TNQ9XjgX+Dnygj+2uB9wl6fuS3tZbZdvX236wyaF9gBNsP1bqPVT+e5ftu8v2A8BDwKgm5+8EnFK2zwbep2pNr52AM2w/b/te4B6aJOeIiBg4Q5EclyrTptMlTQcOqx3/Sil/ELjL9vQe2roZWL9hf3JDuyc2O8H2NGAT4A7gRElXS/qUpJF97Md6wHqSrpF0vaTt6hUkjaNK8s0Wal4DuL/E9CLwBLByY3kxu5TV295XUqekzrlz5/Yx9IiI6MlQJMdnbY/tegEH1453Tau+ARgpaY8e2qp/UnTrhnY/091Jtp+0faLtd1ONAPehSsZ9sRiwLjAe2BP4eeP0qaTVgNOAT9l+uY9t98r2RNsdtjtGjWo2MI2IiPk1bKdVbb8AXAS8p4dqmwK3z0/7ksZI+hZwLtVIbbc+NjEbmGT7hTL9eRdVskTScsAFwEG2r+/m/DnAWqX+YsDywCON5cWapSwiIgbJsE2O5f7bu2kyJanKfsBqVAm0L+2OkXQZcB7wONUDNbvbvqSPIZ5HNWqkPCW7HvCX8oDQucCpts/u4fxJwCfL9m7AFbZdyvcoT7O+mSrh3tjH2CIioh+GY3Lsuud4K7Ao8JOGY0dLmkE1StuCahr1X31s/yXg/5Xp1x/ZfqSnypKOkjQbWFrSbEmHlEMXA49Iug2YTPUk7SPAR6hGuxMa7q2OLW0dJmnHcv4vgJUl3QPsD3wDwPYs4CzgNqrE/wXbL/WxjxER0Q9yFrpd4HV0dLizs3Oow4iIaI9B+uJxSVNtdzQ7NhxHjhEREUMqyTEiIqImyTEiIqImix1HRMTwMgyehcnIMSIioibJMSIioibJMSIioib3HCMiYoGgQ1/7+Ud/a2DuT2bkGBERUZPkGBERUZPkGBERUTNkyVHSS+VLuWdJmiHpq5IWKcc6JP24n+1PkHR8e6Lt9VrjJT3R8EXjl/VS9/zBiCsiIubPUD6Q82xZlBhJbwB+DSwHfMt2J9DyN2lLWsz2i437bY61FVfZ3mEIrhsREW02LKZVbT8E7At8sazV+MroStI4SddJmibpWklvLeUTJE2SdAVweX2/NL26pIsk3S3pqK7rSdq2tHmzpN9KWqaUHyzpJkm3SppY1pScL93FXavz3obR5jRJy5byA0scMyUdOr8xRETE/BkWyRHA9l+o1m98Q+3QHcBWtjcFDga+23BsM2A32+/tZn8ssDuwMbC7pLXKwsTfBLaxvRnVCHX/Uv9421vY3ghYCtgBXklW05u8Gqd+t2ooP6iXuLscQLVe41hgK+BZSdtSLXA8rsS/uaT3tPAWRkREmywIn3NcHjhF0rqAgcUbjl1q+9Ee9i+3/QRAWZT4TcAKwAbANWVguARwXam/taSvAUsDKwGzgD/YPho4upc455lWlbRWD3F3uQY4RtLpwDm2Z5fkuC0wrdRZhipZXtl4oqR9qUbbjB49upfQIiKiL4ZNcpT0FuAl4CHgbQ2HDgcm295F0hhgSsOxp2vN1Pefb9h+iaq/okqie9auPwL4CdBh+35JhwAjyrEDgb2ahH2l7f266VJPcQNg+3uSLgA+SJWs31/iO8L2z7ppt+vcicBEqBY77qluRET0zbBIjpJGAT+lmtZ07Vbf8sCcsj2hDZe7HjhB0jq275E0EliDKikDPFzuQe4GnA3Q4sixrte4Ja1t+xbgFklbAOsDFwOHSzrd9lOS1gBeKPdlIyJiEAzlPceluj7KAVwGXAI0e/jkKOAISdNoQzK3PZcqWf1G0kyqKdX1bT8O/By4lSpB3dTPS7US95fLwz8zgReAP9q+hOrJ3esk3UKVoJftZywREdEH8jBYNyv6p6Ojw52dLX/yJSJigdTu71aVNNV2R7Njw+Zp1YiIiOEiyTEiIqImyTEiIqJmWDytGhER0ZuBWruxmYwcIyIiapIcIyIiapIcIyIianLPMSIihp9miyIN4ufyM3KMiIioSXKMiIioSXKMiIioSXKMiIioaTk5Snqqtj9B0vHtD2mea4yRdGvZ7pD04za1e4ikA8r2YZK26Wd74yU9UVYZmS7psl7qnt+f60VExMAatk+rSponNtudQNuXnrB9cJuausr2Dm1qKyIihlC/p1UlLSvpXkmLl/3luvYlTZH0ozKaulXSuFJnpKSTJN0oaZqknUr5BEmTJF0BXF67zisjrjLyO03SdZLulrRPQ70DJd0kaaakQxvKD5J0l6Srgbc2lJ8sabeyfXA591ZJE6VmzxK3/L6MK/FNk3StpLc2qfPehtHmNEnL9tSHiIgYHH0ZOS4laXrD/krAJNtPSpoCbA+cB+wBnGP7hZJblrY9VtJ7gJOAjYCDgCtsf1rSCsCNDVORmwGb2H5U0pge4tkEeAcwEpgm6YLS9rrAOEDApHLdp0tcY0ufbwamNmnzeNuHAUg6DdgB+IOkA4G9mtS/0vZ+ZXurhvfnt8BxwFa2XyzTtt8Fdq2dfwDwBdvXSFoGeE7Sts36YPvKxhMl7QvsCzB69Oge3qaIiOirviTHZ22P7dqRNAHoWiTyROBrVMnxU8A+Def9BsD2lWVUuQKwLbBj130/YATQ9Rv+UtuPthDP720/CzwraTJVMtmytD2t1FmGKtEsC5xr+5kS+6Ru2txa0teApamS/yzgD7aPBo7uJZ55plUlrQWcImldwMDiTc65BjhG0ulUf1DMLsmxWR/mSY62JwIToVrsuJfYIiKiD9pyz7GMfMZIGg8savvWxsP16lQjol1t39l4QNLbqUZ5LV22m3aPsP2zWrtf7q0xSSOAnwAdtu+XdAhV0qbFkWPd4cBk27uUEfCU13TA/l4Z8X4QuEbS+7vrQ0REDJ52fpTjVODXwC9r5bsDSNoSeML2E8DFwJe67ulJ2nQ+rreTpBGSVgbGAzeVdj9dpiiRtIakN1CNunaWtFS5r/ehJu2NKP99uJy/W9cB20fbHtvk1V1iBFgemFO2JzSrIGlt27fYPrLEv34PfYiIiEHSzqdVTwe+TZlGbfCcpGlU04qfLmWHAz8EZkpaBLiX6v5eX8wEJgOrAIfbfgB4QNLbgOtK3n0K+JjtmyWdCcwAHqJKRPOw/biknwO3An9vVqePjqKaVv0mcEE3db4saWvgZaop3D/afr5ZH0rcERExCOQ2fZFreeJzJ9sfbyibAhxQPobRNmXK8ynb329nuwuqjo4Od3a2/VMuERFDZxC+eFzSVNsdzY61ZeQo6TjgA1T3ziIiIhZo7Xog50vdlI9vR/tN2j1kINqNiIiAYfwNORER8To2iGs3NpMvHo+IiKhJcoyIiKhJcoyIiKjJPceIiBh+BuGjHD3JyDEiIqImyTEiIqImyTEiIqImyTEiIqJmwJOjpKdq+xMkHd+mtqdIavq9eL2c17YYam3OlTS9vE4dzOtHRET75GnV9jrT9heHOoiIiOifIZ1WlTRK0u8k3VRe7y7l4yRdJ2mapGslvbWULyXpDEm3SzoXWKqhrf+T1ClplqRDG8q3KG3MkHRjWc8RYHVJF0m6W9JRDfW3Lde+WdJvu9ZVnM/+fUjSDaUfl0latUmdD0u6tcR3ZSlbVNLR5T2ZKemz8xtDRET03WCMHJeSNL1hfyVgUtn+EXCs7asljaZa6PdtwB3AVrZflLQN8F1gV+DzwDO23yZpE+DmhnYPsv2opEWBy8vxO4Azgd1t3yRpOeDZUn8ssCnwPHBnWVnkWeCbwDa2n5b0dWB/4DBJxwJbN+nfGba/V7Z3L4s6d/XtPOAdti3pM8DXgK/Wzj8YeL/tOZJWKGV7Uy0MvYWkJYFrJF1i+96ukyTtC+wLMHr06CZhRUTE/BqM5Pis7bFdO5ImAF33CbcBNtCrH/ZcrozUlqdaKHhdwFQLJQO8B/gxgO2ZkmY2XOcjJWEsBqwGbFDOfdD2TeWcf5YYAC63/UTZvw14E7BCOe+aUmcJ4Lpy7lda6Os806qSNgbOlLRaaeveJudcA5ws6SzgnFK2LbBJWSOT8n6s23i+7YnARKjWc2whtoiIaNFQ33NchGpk9VxjYXlYZbLtXSSNAab01IikNwMHAFvYfkzSycCIXq79fMP2S1TvhYBLbe/Z5BqtjBzrjgOOsT1J0njgkHoF25+T9HZge2CqpM1LHF+yfXEvfYiIiAEw1B/luAR4ZS1ISWPL5vLAnLI9oaH+lcBHS92NgE1K+XLA08AT5b7eB0r5ncBqkrYo5ywrqac/CK4H3i1pnVJ/pKT1oBo52h7b5NVdYqz345PNKkha2/YNtg8G5gJrUU0vf17S4qXOepJG9nCdiIhoo6FOjvsBHeWhk9uAz5Xyo4AjJE1j3tHt/wHLSLodOAyYCmB7BjCN6h7jr6mmKrH9L2B34DhJM4BL6WFEaXsuVTL+TZmyvQ5Yvx/9OwT4raSpwMPd1Dla0i2SbgWuBWYAJwK3ATeX8p8x9KP8iIjXDXmIF5SM/uvo6HBnZ+dQhxER0T6D8MXjkqbabvpZ+aEeOUZERAw7SY4RERE1uY8VERHDzxDf8svIMSIioibJMSIioibJMSIioib3HCMiYoGgQ+f9eIe/NXD3JTNyjIiIqElyjIiIqElyjIiIqElyjIiIqBnWyVHSGyWdIenPkqZKurBrlYzhRNIhkuZIml5e3a7UUeoeMJjxRURE3wzbp1VVrTZ8LnCK7T1K2b8BqwJ3DWIMsv1yC9WPtf39gY4pIiIG3nAeOW4NvGD7p10FXUtTSbpc0s1lqaedACSNkXS7pJ9LmiXpEklLlWPrSLpM0oxy3tql/EBJN5Ulsw5taOdOSacCt1Ktr9hnkvYpbc+Q9DtJSzeps5+k28r1zyhlIyWdJOlGSdO6+hcREYNnOCfHjSjrNdY8B+xiezOqBPqDMsIDWBc4wfaGwOPArqX89FL+b8C7gAclbVvqjwPGAptLek9DOz+xvaHtv0o6s2HKtPH1iYa4vtJQ/n7gHNtblGveDuzdpC/fADa1vQmvrmV5EHCF7XGlf0c3W+hY0r6SOiV1zp07t6f3MSIi+mjYTqv2QMB3SyJ7GViDaqoV4F7b08v2VGCMpGWBNWyfC2D7OYCSHLelWiQZYBmqpPg34K+2r++6oO3dW4hrnmlVSe+V9G1ghdL2xU3OmQmcLuk84LxSti2wY8N9yRHAaKoE+wrbE4GJUK3n2EJ8ERHRouGcHGcBuzUp3wsYBWxu+wVJ91ElEIDnG+q9BCzVQ/sCjrD9s3kKpTHA07WyM4G3NmnjGNundtP+ycDOtmdImgCMb1Jne+A9wIeAgyRtXOLa1fadPcQeEREDaDhPq14BLClp364CSZsAbwIeKolx67LfLdtPArMl7VzaWLLc/7sY+LSkZUr5GpLe0E0bu9se2+TVXWIEWJZq+nZxqoQ+D0mLAGvZngx8HVieV0eYX+qaKpa0aU/9i4iI9hu2ydG2gV2AbcpHOWYBRwAXAh2SbgE+AdzRQnMfB/aTNBO4Fnij7UuAXwPXlbbOpkpo7fK/wA3ANd3EuCjwq3LtacCPbT8OHA4sDswsfT68jTFFREQL5CFeUDL6r6Ojw52dnUMdRkTEgGr3F49Lmmq7o9mxYTtyjIiIGCpJjhERETXD+WnViIiIVwzk+o11GTlGRETUJDlGRETUJDlGRETU5J5jREQMP9Jrywbxo4cZOUZERNQkOUZERNQkOUZERNQkOUZERNT0mhwlPVXbnyDp+IELqVo2StJH+9nGl8vqG137F0paod/BNb/WeElPNCx2fFkvdc8fiDgiIqI9ht3IUdJiwBigX8kR+DLwSnK0/cGy6sVAuaphKattBvA6ERExwOY7OUpaVtK9Zb1CJC3XtS9piqQflVHUrZLGlTojJZ0k6UZJ0yTtVMonSJok6QrgcuB7wFbl/K9IWlTS0ZJukjRT0mfLeePLtc6WdIek01XZD1gdmCxpcql7n6RVyvb+Ja5bJX25lI2RdLukn0uaJekSST0tltzb+zNO0nWln9dKes1iyZLe2zDanCZp2VJ+YENfD53fGCIiYv608jnHpSRNb9hfCZhk+0lJU6hWsz8P2AM4pyxCDLC07bGS3gOcBGwEHARcYfvTZYrzxoYpyM2ATWw/Kmk8cIDtHQDKgsdP2N5C0pLANZIuKedtCmwIPEC1duK7bf9Y0v7A1rYfbuyMpM2BTwFvBwTcIOlPwGPAusCetveRdBawK9WaiwfSZMFi4Erb+5XtrRrep98CxwFb2X5R0jbAd0t7jQ4AvmD7mrLo8nOSti1xjCvxTZL0HttX1vqxL7AvwOjRo5uEFhER86uV5Pis7bFdO5ImAF3rX50IfI0qOX4K2KfhvN8A2L6yjCpXALYFdpR0QKkzAuj6zX6p7Ue7iWFbYBNJu5X95akSyL+AG23PLrFNp5qSvbqH/mwJnGv76XLOOcBWwCTgXtvTS72ppS1sHw0c3UObUE2r7tC1I2kt4BRJ6wKmWsC47hrgGEmnU/1hMbskx22pFkAGWKb0dZ7kaHsiMBGq9Rx7iS0iIvqgX9+QU0Y8Y8pIb1HbtzYerlenGgntavvOxgOS3g483cOlBHzJ9sW188YDzzcUvUT/+lRva6lynVZGjnWHA5Nt7yJpDDClXsH29yRdAHyQajT8fqq+HmH7Z/Pdi4iI6Jd2PJBzKvBr4Je18t0BJG1JNSX6BHAx8CWVeVdJm3bT5pPAsg37FwOfb7i/uZ6kkb3EVW+jy1XAzpKWLm3sUsq6ZfvohodtGl/dJUaoRrdzyvaEZhUkrW37FttHAjcB61P19dNlmhVJa0h6Q0/xRUREe7UjOZ4OrEiZRm3wnKRpwE+BvUvZ4VTTizMlzSr7zcwEXpI0Q9JXqKZvbwNulnQr8DN6HyFOBC7qeiCni+2bgZOBG4EbgBNtT3vt6f12FHBEeQ+6i/XL5aGgmcALwB9tX0L1x8Z1km4BzqZ5ko+IiAEi9/OLXMt9wJ1sf7yhbArVAzWd/QsvWtHR0eHOzrzVEbEQGYQvHpc01XZHs2P9uuco6TjgA1T3zCIiIhYK/X0g50vdlI/vT7sRERFDKes5RkTE8DOIazc2M+y+Pi4iImKoJTlGRETUJDlGRETU5J5jREQsEHTovB/v8LcG7r5kRo4RERE1SY4RERE1SY4RERE1SY4RERE1C2xylPRUw/bpkj7fsP92STMlLS7pPklX1c6dXr7AHEkrS5os6SlJx7cptr3K9W+RdK2kf+um3psl3SDpHklnSlqilL9H0s2SXmxYwzIiIgbJApsca/YHDpQ0StIiwPHAf9l+oRxftiw+jKS31c59Dvhf4AB6IGnFPsRzL/Be2xtTrTwysZt6RwLH2l4HeIxXVy/5G9UyV7/uwzUjIqJNForkaPsfwPeplon6HDDT9tUNVc6irC8J7EnD8lq2ny51n+vlMsdJuqKMCkf0Es+1th8ru9cDa9brlDUt/51qSSqAU4Cdy/n32Z4JvNxLTBERMQAWiuRY/BTYADgQ+Frt2O+A/yzbHwL+0NfGbX+stP0uYJak47qbLq3ZG/hjk/KVgcdtv1j2ZwNr9DWuiIhov4UmOdp+mWoR5D/afqR2+BHgMUl7ALcDz8znNaba/gKwIXAPcKOk/burL2lrquT49fm5Xk8k7SupU1Ln3Llz2918RMTr2kKTHIuX6X4q8kzgBBqmVPtK0mKSdgTOAPYBDgZ+1U3dTYATqRaCridrqBL2CpK6vqVoTWBOq7HYnmi7w3bHqFGj+tKNiIjoxevp6+POBVYDLgZW7+vJZYT4ReAq4Ae2r+qh7mjgHODjtu9qVse2JU0GdqNKtp8Eft/XuCIiov0W5OS4tKTZDfvHAI92V9n2k1RPh1I9C/MqSfcBywFLSNoZ2Nb2bbUmZgJjbf+zhdgOprqn+JNyrRdtd5RrXQh8xvYDVNOtZ0j6NjAN+EWpswVVMl8R+JCkQ21v2MJ1IyKiDeQhXlAy+q+jo8OdnZ1DHUZExIBq9xePS5raNXCpW9juOUZERPRbkmNERERNkmNERETNgvxATkREvI4M5OLGdRk5RkRE1CQ5RkRE1CQ5RkRE1OSeY0RELBDa/TnHnmTkGBERUZPkGBERUZPkGBERUZPkGBERUbPQJkdJb5R0hqQ/S5oq6UJJ67X5GqMlTZY0TdJMSR8s5YtLOkXSLZJul/Q/3Zz/Zkk3SLpH0pmSlijlS5b9e8rxMe2MOyIierZQJkdV60SdC0yxvbbtzYH/AVat1XvN07qSVuzDpb4JnGV7U2AP4Cel/MPAkrY3BjYHPttNgjsSONb2OsBjwN6lfG/gsVJ+bKkXERGDZKFMjsDWwAu2f9pVYHuG7askjZd0laRJQH3NRoDzJE2StGOz5FljqnUgAZYHHmgoH1nOXwr4FzDPOpAlgf87cHYpOgXYuWzvVPYpx9+n+iKUERExYBbW5LgRMLWH45sB/2272TTreKqFk3cDbpf0XUnrdNPOIcDHyqLLFwJfKuVnA08DDwJ/A75vu74Q88rA47ZfLPuzgTXK9hrA/QDl+BOl/isk7SupU1Ln3Llze+hqRET01cKaHHtzo+17mx1wZYrtT1BNiRq4Q9KuTarvCZxse03gg8BpkhYBxgEvAasDbwa+Kukt7eyA7Ym2O2x3jBo1qp1NR0S87i2syXEWVWLrztM9nSxpKUkfBc4B3g/8N3Bpk6p7A2cB2L4OGAGsAnwUuMj2C7YfAq4B6qtNPwKs0DB1uyYwp2zPAdYqsSxGNWX7SE8xR0RE+yysyfEKYElJ+3YVSNpE0la9nSjpKKp7ke8CDiyjsxNs/7NJ9b8B7yvnvY0qOc4t5f9eykcC7wDuaDzRtoHJVNO3AJ8Efl+2J5V9yvErSv2IiBgEC2VyLIlkF2Cb8lGOWcARwN9bOH0K8DbbX7Q9rZe6XwX2kTQD+A0woVz7BGCZct2bgF/anglQPlKyejn/68D+ku6huqf4i1L+C2DlUr4/8I2WOh4REW2hDEgWfB0dHe7s7BzqMCIiBlS7v3hc0lTb9VtewEI6coyIiOiPJMeIiIiarOcYERELhIFcv7EuI8eIiIiaJMeIiIiaJMeIiIiaJMeIiFgg6FC95uMcAyXJMSIioibJMSIioibJMSIioibJMSIiomZQkqOknSVZ0vr9bGdMWUqqa3+CpOP70V6HpB/3J6bSzn2SbpE0vbze1UvdVfp7zYiIGDiDNXLcE7i6/HceDesZNt2vGUO1VmJb2O60vV+bmtva9tjyurZNbUZExBAY8OQoaRlgS6qFgfcoZeMlXSVpEnBbk/3DJH25oY3vSPpv4HvAVmV09pVyeHVJF0m6u6zF2HXOU5KOljRL0mWSxkmaIukvknZsiOP8sj1O0nWSpkm6VtJb+9nv8yRNLdfft8nxkZIukDRD0q2Sdi/lm0v6Uzn3Ykmr9SeOiIjou8H4btWdgIts3yXpEUmbl/LNgI1s3ytpfG1/DHAO8ENJi1Al1XHADOAA2ztANa0KjAU2BZ4H7pR0nO37gZFUiwQfKOlc4NvAfwAbAKdQLSjc6A5gK9svStoG+C6wa0mSZ3bTt/G2Hy/bkyW9BDxv++3Ap20/Kmkp4CZJv7P9SMO52wEP2N6+9GV5SYsDxwE72Z5bEuZ3gE/XL1wS7r4Ao0eP7ia8iIiYH4ORHPcEflS2zyj75wM32r63od4r+7bvK4l0U2BVYJrtR6SmH/683PYTAJJuA94E3A/8C7io1LmFKmm9IOkWqunZuuWBUyStCxhYvMRyJ1UC7s3Wth9u2N9P0i5ley1gXaAxOd4C/EDSkcD5tq+StBGwEXBp6euiwIPNLmZ7IjARqvUcW4gvIiJaNKDJUdJKwL8DG0sy1S97AxcAT9eq1/dPBCYAbwRO6uEyzzdsv8SrfXrBr67k/HJXPdsvd3Nf83Bgsu1dysh1SulDqyPHV5SR8DbAO20/I2kKMKKxThlJbwZ8EPi2pMuBc4FZtt/ZQ38jImKADfTIcTfgNNuf7SqQ9CdgqxbOPRc4jGoE1/UQzpPAsu0OslgemFO2J3QV9mHkWG/rsZIY1wfeUa8gaXXgUdu/kvQ48Bmqe6qjJL3T9nVlmnU927P62pmIiJh/A/1Azp5USa7R72jy1Gqd7X8Bk4GzbL9UimcCL5WHWL7S/dnz5SjgCEnT6P8fDRcBi0m6nSrhXd+kzsbAjZKmA98Cvl36vBtwpKQZwHSg24+FRETEwNCrM4/DS3kQ52bgw7bvHup4hrOOjg53dnYOdRgREQOq60vH27XosaSptjuaHRuW35AjaQPgHqqHbZIYIyJiUA3G06p9Zvs24C1DHUdERLw+DcvkGBERUdeu6dRWDMtp1YiIiKGU5BgREVGT5BgREVGT5BgREVGT5BgREVGT5BgREVGT5BgREVGT5BgREVGT5BgREVEzbL94PFonaS7w1yG6/CrAw73WWrCljwu+hb1/kD7OjzfZHtXsQJJj9Iukzu6+1X5hkT4u+Bb2/kH62G6ZVo2IiKhJcoyIiKhJcoz+mjjUAQyC9HHBt7D3D9LHtso9x4iIiJqMHCMiImqSHCMiImqSHKNPJK0k6VJJd5f/rthNvZckTS+vSYMdZ3+02sdSdzlJsyUdP5gx9lcrfZT0Jkk3l3/DWZI+NxSxzo8W+zdW0nWlbzMl7T4Usc6vPvy/eJGkxyWdP9gxzg9J20m6U9I9kr7R5PiSks4sx2+QNGYg4khyjL76BnC57XWBy8t+M8/aHlteOw5eeG3Rah8BDgeuHJSo2quVPj4IvNP2WODtwDckrT54IfZLK/17BviE7Q2B7YAfSlph8ELst1Z/To8GPj5oUfWDpEWBE4APABsAe0raoFZtb+Ax2+sAxwJHDkQsSY7RVzsBp5TtU4Cdhy6UAdNSHyVtDqwKXDI4YbVVr320/S/bz5fdJVmwfl+00r+7bN9dth8AHgKaflvKMNXSz6nty4EnBymm/hoH3GP7L7b/BZxB1c9Gjf0+G3ifJLU7kAXphz2Gh1VtP1i2/06VHJoZIalT0vWSdh6c0Nqm1z5KWgT4AXDAYAbWRi39O0paS9JM4H7gyJJEFgSt/pwCIGkcsATw54EOrI361McFxBpUP2tdZpeypnVsvwg8Aazc7kAWa3eDseCTdBnwxiaHDmrcsW1J3X0W6E2250h6C3CFpFtsD5tfPG3o438BF9qePQB/tLZFO/4dbd8PbFKmU8+TdLbtf7Q/2r5r088pklYDTgM+afvl9kbZP+3qY/RdkmO8hu1tujsm6R+SVrP9YPml8lA3bcwp//2LpCnApgyjv8rb0Md3AltJ+i9gGWAJSU/Z7un+5KBqx79jQ1sPSLoV2IpqKmvItaN/kpYDLgAOsn39AIU639r5b7iAmAOs1bC/ZilrVme2pMWA5YFH2h1IplWjryYBnyzbnwR+X68gaUVJS5btVYB3A7cNWoT912sfbe9le7TtMVRTq6cOp8TYglb+HdeUtFTZXhHYErhz0CLsn1b6twRwLtW/3bBI+H3Uax8XQDcB60p6c/n32YOqn40a+70bcIUH4ttsbOeVV8svqrn9y4G7gcuAlUp5B3Bi2X4XcAswo/x376GOu919rNWfABw/1HEPwL/jfwAzy7/jTGDfoY67zf37GPACML3hNXaoY29nH8v+VcBc4Fmqe3jvH+rYe+nXB4G7qGaaDiplhwE7lu0RwG+Be4AbgbcMRBz5+riIiIiaTKtGRETUJDlGRETUJDlGRETUJDlGRETUJDlGRETUJDlGRETUJDlGRETU/H+WK75qqE5HxwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "idx = 59\n", + "class_names = ['normal', 'mild', 'severe', 'critical']\n", + "\n", + "print('Patient id: %d' % idx)\n", + "print('Probabilities =', svc.predict_proba(np.array(X_train)[idx, :].reshape(1, -1))[0])\n", + "print('True class: %s' % class_names[ohe.inverse_transform(np.array([y_train[idx]]))[0][0]])\n", + "explainer = lime_tabular.LimeTabularExplainer(np.array(X_train), \n", + " feature_names= X_train.columns, class_names = class_names, \n", + " categorical_features = categorical_features, categorical_names = categorical_names,\n", + " discretize_continuous=True)\n", + "exp = explainer.explain_instance(np.array(X_train)[idx, :], predict_fn = svc.predict_proba, num_features = 10)\n", + "\n", + "%matplotlib inline\n", + "fig = exp.as_pyplot_figure()" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/dataset/4-type-dataset-ct.pkl b/dataset/4-type-dataset-ct.pkl index 3520dbd..b368e77 100644 Binary files a/dataset/4-type-dataset-ct.pkl and b/dataset/4-type-dataset-ct.pkl differ diff --git a/dataset/4-type-dataset.pkl b/dataset/4-type-dataset.pkl index a3f6812..75991a0 100644 Binary files a/dataset/4-type-dataset.pkl and b/dataset/4-type-dataset.pkl differ diff --git a/model/4-type-model-4-ct.pkl b/model/4-type-model-4-ct.pkl index abd36d3..9913ad8 100644 Binary files a/model/4-type-model-4-ct.pkl and b/model/4-type-model-4-ct.pkl differ diff --git a/model/4-type-model-4.pkl b/model/4-type-model-4.pkl index 5b1af26..a4a0e8c 100644 Binary files a/model/4-type-model-4.pkl and b/model/4-type-model-4.pkl differ