{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Kecerdasan Komputasional","metadata":{}},{"cell_type":"code","source":"pip install --upgrade scikit-learn","metadata":{"execution":{"iopub.status.busy":"2023-09-25T07:39:56.636422Z","iopub.execute_input":"2023-09-25T07:39:56.637019Z","iopub.status.idle":"2023-09-25T07:40:12.062109Z","shell.execute_reply.started":"2023-09-25T07:39:56.636973Z","shell.execute_reply":"2023-09-25T07:40:12.060487Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport pydicom\nimport cv2\nimport matplotlib.pyplot as plt\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.metrics import roc_auc_score, accuracy_score\nfrom sklearn.preprocessing import LabelEncoder, StandardScaler\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.pipeline import make_pipeline\nfrom sklearn import metrics\nfrom sklearn.metrics import classification_report, confusion_matrix, accuracy_score,roc_curve,roc_auc_score, auc","metadata":{"execution":{"iopub.status.busy":"2023-09-25T07:42:37.494527Z","iopub.execute_input":"2023-09-25T07:42:37.494997Z","iopub.status.idle":"2023-09-25T07:42:37.50487Z","shell.execute_reply.started":"2023-09-25T07:42:37.494964Z","shell.execute_reply":"2023-09-25T07:42:37.50319Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# df = pd.read_csv('/kaggle/input/corn-leaf-infection-dataset/Annotation-export.csv')\n# # df_test = pd.read_csv('/kaggle/input/rsna-breast-cancer-detection/test.csv')","metadata":{"execution":{"iopub.status.busy":"2023-09-25T07:40:12.125977Z","iopub.status.idle":"2023-09-25T07:40:12.126709Z","shell.execute_reply.started":"2023-09-25T07:40:12.126378Z","shell.execute_reply":"2023-09-25T07:40:12.12641Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv('/kaggle/input/rsna-breast-cancer-detection/train.csv')\n# df_test = pd.read_csv('/kaggle/input/rsna-breast-cancer-detection/test.csv')","metadata":{"execution":{"iopub.status.busy":"2023-09-25T07:40:12.129682Z","iopub.status.idle":"2023-09-25T07:40:12.130278Z","shell.execute_reply.started":"2023-09-25T07:40:12.129994Z","shell.execute_reply":"2023-09-25T07:40:12.130019Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.head()","metadata":{"execution":{"iopub.status.busy":"2023-09-25T07:40:12.132204Z","iopub.status.idle":"2023-09-25T07:40:12.132821Z","shell.execute_reply.started":"2023-09-25T07:40:12.132532Z","shell.execute_reply":"2023-09-25T07:40:12.132558Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Age, Laterally, Implant, biopsy, invasive, difficulty negative case jadi utama\ndata_new = df.drop(columns=['age','laterality','site_id', 'patient_id', 'image_id', 'view', 'cancer','BIRADS','density','machine_id'])\ndata_new.head()","metadata":{"execution":{"iopub.status.busy":"2023-09-25T07:40:12.135204Z","iopub.status.idle":"2023-09-25T07:40:12.1359Z","shell.execute_reply.started":"2023-09-25T07:40:12.135568Z","shell.execute_reply":"2023-09-25T07:40:12.135595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from sklearn.preprocessing import LabelEncoder\n\n# Semua NULL di drop\n# Age, Laterally, Implant, biopsy, invasive, difficulty negative case jadi utama\n\n# # Inisialisasi LabelEncoder\n# label_encoder = LabelEncoder()\n\n# # Melakukan label encoding pada kolom kategorikal di X_train\n# X_train['laterality'] = label_encoder.fit_transform(X_train['laterality'])\n\n# # Melakukan label encoding pada kolom kategorikal di X_test\n# X_test['laterality'] = label_encoder.transform(X_test['laterality'])\n\n# Memisahkan fitur (X_train) dan target (y_train)\n# X_train = df_train.drop(columns=['difficult_negative_case', 'cancer', 'BIRADS', 'age', 'view'])\n# y_train = df_train['difficult_negative_case']\n\n\n\n# Memisahkan fitur (X_test) dan target (y_test)\n# X_test = df_test.drop(columns=['prediction_id', 'age', 'laterality', 'view'])\n# y_test = df_test['prediction_id']\n","metadata":{"execution":{"iopub.status.busy":"2023-09-25T07:40:12.137578Z","iopub.status.idle":"2023-09-25T07:40:12.138118Z","shell.execute_reply.started":"2023-09-25T07:40:12.137852Z","shell.execute_reply":"2023-09-25T07:40:12.137876Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# data_new.loc[:, ['difficult_negative_case', 'laterality']].replace(['FALSE', 'TRUE', 'L', 'R'], [0, 1, 0, 1], inplace=True)\ndata_new['difficult_negative_case'].replace(['FALSE', 'TRUE'], [0,1], inplace=True)","metadata":{"execution":{"iopub.status.busy":"2023-09-25T07:40:12.140072Z","iopub.status.idle":"2023-09-25T07:40:12.140631Z","shell.execute_reply.started":"2023-09-25T07:40:12.140362Z","shell.execute_reply":"2023-09-25T07:40:12.140385Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = data_new[data_new.columns[:3]]\n\ny = data_new['difficult_negative_case']","metadata":{"execution":{"iopub.status.busy":"2023-09-25T07:40:12.142443Z","iopub.status.idle":"2023-09-25T07:40:12.142996Z","shell.execute_reply.started":"2023-09-25T07:40:12.142723Z","shell.execute_reply":"2023-09-25T07:40:12.142747Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Random Forest","metadata":{}},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.pipeline import make_pipeline\nfrom sklearn.metrics import accuracy_score, roc_auc_score\n\n# inisialisasi model Random Forest\nrfc = RandomForestClassifier(n_estimators=600, max_features=\"sqrt\", random_state=42)\n\n# inisialisasi scalar\nsc = StandardScaler()\n\n# inisialisasi pipeline dengan random forest dan scalar\npipe = make_pipeline(sc, rfc)\n\n# Bagi dataset menjadi satu set pelatihan dan satu set pengujian\nfrom sklearn.model_selection import train_test_split\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# training model\npipe.fit(X_train, y_train)\n\n# scoring model pada data pengujian\ny_pred = pipe.predict(X_test)\ny_prob = pipe.predict_proba(X_test)\n\n# Hitung akurasi\naccuracy = accuracy_score(y_test, y_pred)\nprint(f'Accuracy: {accuracy:.4f}')\n\n# Hitung AUC\nauc = roc_auc_score(y_test, y_prob[:, 1])\nprint(f'AUC: {auc:.4f}')","metadata":{"execution":{"iopub.status.busy":"2023-09-25T09:00:20.499955Z","iopub.execute_input":"2023-09-25T09:00:20.500404Z","iopub.status.idle":"2023-09-25T09:00:21.645119Z","shell.execute_reply.started":"2023-09-25T09:00:20.500373Z","shell.execute_reply":"2023-09-25T09:00:21.643535Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# inisialisasi model Random Forest\nrfc = RandomForestClassifier(n_estimators=700, max_features=\"sqrt\", random_state=42)\n\n# cross-validation dengan StratifiedKFold 10\ncv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)\n\n# inisialisasi scalar\nsc = StandardScaler()\n\n# inisialisasi pipeline dengan random forest dan scalar\npipe = make_pipeline(sc, rfc)\n\n# inisialisasi list untuk menampung hasil skor dari setiap fold\nscores = []\nresults = []\n\n# loop untuk setiap fold\nfor train_index, test_index in cv.split(X, y):\n    X_train, X_test = X.values[train_index], X.values[test_index]\n    y_train, y_test = y.values[train_index], y.values[test_index]\n    \n    # training model\n    pipe.fit(X_train, y_train)\n    \n    # scoring model\n    score = pipe.score(X_test, y_test)\n    scores.append(score)\n\n    # Melakukan prediksi pada data testing\n    y_pred = pipe.predict(X_test)\n    \n    # Hitung Probabilitas\n    y_prob =pipe.predict_proba(X_test)","metadata":{"execution":{"iopub.status.busy":"2023-09-25T09:14:16.249222Z","iopub.execute_input":"2023-09-25T09:14:16.250781Z","iopub.status.idle":"2023-09-25T09:14:55.37331Z","shell.execute_reply.started":"2023-09-25T09:14:16.250667Z","shell.execute_reply":"2023-09-25T09:14:55.371864Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Decision Tree","metadata":{}},{"cell_type":"code","source":"# from sklearn.tree import DecisionTreeClassifier\n\n# # inisialisasi model Decision Tree\n# dtc = DecisionTreeClassifier(random_state=42)\n\n# # inisialisasi pipeline dengan Decision Tree dan scalar\n# pipe = make_pipeline(sc, dtc)\n\n# # inisialisasi list untuk menampung hasil skor dari setiap fold\n# scores = []\n# results = []\n\n# # loop untuk setiap fold\n# for train_index, test_index in cv.split(X, y):\n#     X_train, X_test = X_numerical_scaled[train_index], X_numerical_scaled[test_index]\n#     y_train, y_test = y[train_index], y[test_index]\n    \n#     # training model\n#     pipe.fit(X_train, y_train)\n    \n#     # scoring model\n#     score = pipe.score(X_test, y_test)\n#     scores.append(score)\n\n#     # Melakukan prediksi pada data testing\n#     y_pred = pipe.predict(X_test)\n    \n#     # Hitung Probabilitas\n#     y_prob = pipe.predict_proba(X_test)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Confusion Matrix\nconfusion_matrix = metrics.confusion_matrix(y_test, y_pred)\n\ncm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = confusion_matrix, display_labels = [False, True])\n\ncm_display.plot()\nplt.show()\n     \nAccuracy = metrics.accuracy_score(y_test, y_pred)\nPrecision = metrics.precision_score(y_test, y_pred)\nSensitivity_recall = metrics.recall_score(y_test, y_pred)\nSpecificity = metrics.recall_score(y_test, y_pred, pos_label=0)\n    \n#print(classification_report(y_test, y_pred))\n# roc_curve(pipe, X_test, y_test)\n# plt.show()\n    \n    # AUC (y_prob[:,1] khusus untuk random forest dan knn)\nauc = roc_auc_score(y_test, y_prob[:,1])\n    \n     # Simpan hasil ke dalam list\nresults.append({'Accuracy': Accuracy,\"Precision\":Precision,\"Sensitivity_recall\":Sensitivity_recall,\"Specificity\":Specificity, 'AUC':auc})\n    \n    # Buat dataframe dari hasil\ndf = pd.DataFrame(results)\n\n    # Print dataframe\nprint(df)","metadata":{"execution":{"iopub.status.busy":"2023-09-25T09:15:01.14315Z","iopub.execute_input":"2023-09-25T09:15:01.143658Z","iopub.status.idle":"2023-09-25T09:15:01.458246Z","shell.execute_reply.started":"2023-09-25T09:15:01.143622Z","shell.execute_reply":"2023-09-25T09:15:01.456903Z"},"trusted":true},"execution_count":null,"outputs":[]}]}