\n",
"\N",
"# Pohon Keputusan\n",
"\N",
"Perkiraan waktu yang dibutuhkan: **15** menit\n",
"\N",
"## Tujuan\n",
"\N",
"Setelah menyelesaikan lab ini Anda akan dapat:\n",
"\N",
"* Mengembangkan model klasifikasi menggunakan Algoritma Pohon Keputusan\n"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
Dalam latihan lab ini, Anda akan mempelajari algoritma pembelajaran mesin yang populer, Pohon Keputusan. Anda akan menggunakan algoritma klasifikasi ini untuk membangun model dari data historis pasien, dan respons mereka terhadap berbagai obat. Kemudian, Anda akan menggunakan pohon keputusan yang telah dilatih untuk memprediksi kelas pasien yang belum diketahui, atau untuk menemukan obat yang tepat untuk pasien baru.\n
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"
\n",
Bayangkan Anda seorang peneliti medis yang sedang mengumpulkan data untuk sebuah penelitian. Anda telah mengumpulkan data tentang sekelompok pasien, yang semuanya menderita penyakit yang sama. Selama masa pengobatan, setiap pasien merespons salah satu dari 5 obat, yaitu Obat A, Obat B, Obat C, Obat X, dan Obat Y.
" \n",
" \n",
"Bagian dari pekerjaan Anda adalah membangun model untuk mencari tahu obat mana yang mungkin tepat untuk pasien di masa mendatang dengan penyakit yang sama. Fitur dari kumpulan data ini adalah Usia, Jenis Kelamin, Tekanan Darah, dan Kolesterol pasien, dan targetnya adalah obat yang direspons oleh setiap pasien."
" \n",
" \n",
"Ini adalah contoh pengklasifikasi multikelas, dan Anda dapat menggunakan bagian pelatihan dari dataset \n",
"untuk membangun pohon keputusan, dan kemudian menggunakannya untuk memprediksi kelas pasien yang tidak diketahui, atau untuk meresepkan obat kepada pasien baru."
"
"
],
"teks/polos": [
"Usia Jenis Kelamin BP Kolesterol Na_ke_K Obat\n",
"0 23 F TINGGI TINGGI 25.355 obat\n",
"1 47 M RENDAH TINGGI 13.093 obatC\n",
"2 47 M RENDAH TINGGI 10.114 obatC\n",
"3 28 F NORMAL TINGGI 7.798 obatX\n",
"4 61 F RENDAH TINGGI 18.043 obat"
]
},
"jumlah_eksekusi": 3,
"metadata": {},
"tipe_keluaran": "hasil_eksekusi"
}
],
"sumber": [
"data_saya = pd.baca_csv('https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%203/data/drug200.csv', pembatas=\",\")\n",
"my_data.head()"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"
\n"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"Dengan menggunakan my_data sebagai data Drug.csv yang dibaca oleh pandas, deklarasikan variabel berikut: \n",
"\N",
"
\n",
"
X sebagai Matriks Fitur (data dari my_data)
\n",
"
y sebagai vektor respons (target)
\n",
"
\n"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"Hapus kolom yang berisi nama target karena tidak berisi nilai numerik.\n"
]
},
{
"cell_type": "kode",
"jumlah_eksekusi": 5,
"metadata": {
"tag": []
},
"keluaran": [
{
"data": {
"teks/polos": [
"array([[23, 'F', 'TINGGI', 'TINGGI', 25.355],\n",
"[47, 'M', 'RENDAH', 'TINGGI', 13.093],\n",
"[47, 'M', 'RENDAH', 'TINGGI', 10.114],\n",
"[28, 'F', 'NORMAL', 'TINGGI', 7.798],\n",
"[61, 'F', 'RENDAH', 'TINGGI', 18.043]], tipe data=objek)"
]
},
"jumlah_eksekusi": 5,
"metadata": {},
"tipe_keluaran": "hasil_eksekusi"
}
],
"sumber": [
"X = data_saya[['Usia', 'Jenis Kelamin', 'TD', 'Kolesterol', 'Na_ke_K']].nilai\n",
"X[0:5]\n"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
Seperti yang mungkin Anda ketahui, beberapa fitur dalam kumpulan data ini bersifat kategoris, seperti **Jenis Kelamin** atau **BP**. Sayangnya, Sklearn Decision Trees tidak menangani variabel kategoris. Kita masih dapat mengonversi fitur-fitur ini ke nilai numerik menggunakan **metode LabelEncoder()**\n",
"untuk mengubah variabel kategoris menjadi variabel dummy/indikator.\n"
]
},
{
"cell_type": "kode",
"jumlah_eksekusi": 6,
"metadata": {
"tag": []
},
"keluaran": [
{
"data": {
"teks/polos": [
"array([[23, 0, 0, 0, 25.355],\n",
"[47, 1, 1, 0, 13.093],\n",
"[47, 1, 1, 0, 10.114],\n",
"[28, 0, 2, 0, 7.798],\n",
"[61, 0, 1, 0, 18.043]], tipe data=objek)"
]
},
"jumlah_eksekusi": 6,
"metadata": {},
"tipe_keluaran": "hasil_eksekusi"
}
],
"sumber": [
"dari sklearn impor praproses\n",
"le_sex = praproses.LabelEncoder()\n",
"le_sex.fit(['F','M'])\n",
"X[:,1] = le_sex.transform(X[:,1]) \n",
"\N",
"\N",
"le_BP = praproses.LabelEncoder()\n",
"le_BP.fit([ 'RENDAH', 'NORMAL', 'TINGGI'])\n",
"X[:,2] = le_BP.transform(X[:,2])\n",
"\N",
"\N",
"le_Chol = praproses.LabelEncoder()\n",
"le_Chol.fit([ 'NORMAL', 'TINGGI'])\n",
"X[:,3] = le_Chol.transform(X[:,3]) \n",
"\N",
"X[0:5]\n"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"Sekarang kita dapat mengisi variabel target.\n"
]
},
{
"cell_type": "kode",
"jumlah_eksekusi": 7,
"metadata": {
"tag": []
},
"keluaran": [
{
"data": {
"teks/polos": [
"0 obatY\n",
"1 obatC\n",
"2 obatC\n",
"3 obatX\n",
"4 obatY\n",
"Nama: Obat, tipe data: objek"
]
},
"jumlah_eksekusi": 7,
"metadata": {},
"tipe_keluaran": "hasil_eksekusi"
}
],
"sumber": [
"y = data_saya[\"Obat\"]\n",
"y[0:5]"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"\n",
"\N",
"
\n",
"
Menyiapkan Pohon Keputusan
\n",
"Kita akan menggunakan pemisahan pelatihan/pengujian pada pohon keputusan kita. Mari impor train_test_split dari sklearn.cross_validation."
"
\n",
" train_test_split akan membutuhkan parameter: \n",
"X, y, ukuran_uji=0,3, dan keadaan_acak=3.
\n",
"X dan y adalah array yang diperlukan sebelum pemisahan, test_size mewakili rasio kumpulan data pengujian, dan random_state memastikan bahwa kita memperoleh pemisahan yang sama.\n"
]
},
{
"cell_type": "kode",
"jumlah_eksekusi": 9,
"metadata": {
"tag": []
},
"keluaran": [],
"sumber": [
"X_trainset, X_testset, y_trainset, y_testset = pemisahan_uji_kereta(X, y, ukuran_uji=0.3, keadaan_acak=3)"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"
Latihan
\n",
Cetak bentuk X_trainset dan y_trainset. Pastikan dimensinya sesuai.\n
]
},
{
"cell_type": "kode",
"jumlah_eksekusi": 10,
"metadata": {
"tag": []
},
"keluaran": [
{
"nama": "stdout",
"tipe_keluaran": "aliran",
"teks": [
"Bentuk set pelatihan X(140, 5) & Ukuran set pelatihan Y(140,)\n"
]
}
],
"sumber": [
"print('Bentuk set pelatihan X{}'.format(X_trainset.shape), '&', 'Ukuran set pelatihan Y{}'.format(y_trainset.shape))\n",
"\N"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"Klik di sini untuk solusinya\n",
"\N",
"```ular piton\n",
"print('Bentuk set pelatihan X {}'.format(X_trainset.shape),'&',' Ukuran set pelatihan Y {}'.format(y_trainset.shape))\n",
"\N",
"```\n",
"\N",
"\n"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
Cetak bentuk X_testset dan y_testset. Pastikan dimensinya cocok.\n
]
},
{
"cell_type": "kode",
"jumlah_eksekusi": 12,
"metadata": {
"tag": []
},
"keluaran": [
{
"nama": "stdout",
"tipe_keluaran": "aliran",
"teks": [
"Bentuk set uji X(60, 5) & Ukuran set uji y(60,)\n"
]
}
],
"sumber": [
"print('Bentuk set uji X{}'.format(X_testset.shape), '&', 'Ukuran set uji y{}'.format(y_testset.shape))\n",
"\N"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"Klik di sini untuk solusinya\n",
"\N",
"```ular piton\n",
"print('Bentuk set uji X {}'.format(X_testset.shape),'&','Ukuran set uji y {}'.format(y_testset.shape))\n",
"\N",
"```\n",
"\N",
"\n"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"\n",
"\N",
"
\n",
"
Pemodelan
\n",
"Pertama-tama kita akan membuat sebuah instance dari DecisionTreeClassifier yang disebut drugTree. \n",
"Di dalam pengklasifikasi, tentukan kriteria=\"entropi\" sehingga kita dapat melihat perolehan informasi setiap node.\n",
"
\n",
"Selanjutnya, mari impor metrik dari sklearn dan periksa keakuratan model kita.\n",
"
\n"
]
},
{
"cell_type": "kode",
"jumlah_eksekusi": 17,
"metadata": {
"tag": []
},
"keluaran": [
{
"nama": "stdout",
"tipe_keluaran": "aliran",
"teks": [
Akurasi DecisionTrees: 0,98333333333333333\n
]
}
],
"sumber": [
"dari metrik impor sklearn\n",
"impor matplotlib.pyplot sebagai plt\n",
"print(\"Akurasi DecisionTrees: \", metrics.accuracy_score(y_testset, predTree))"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
**Skor klasifikasi akurasi** menghitung akurasi subset: kumpulan label yang diprediksi untuk sampel harus sama persis dengan kumpulan label yang sesuai di y_true.\n
"\N",
Dalam klasifikasi multilabel, fungsi ini mengembalikan akurasi subset. Jika seluruh rangkaian label yang diprediksi untuk suatu sampel benar-benar sesuai dengan rangkaian label yang sebenarnya, maka akurasi subsetnya adalah 1,0; jika tidak, maka akurasinya adalah 0,0.\n
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"\n",
"\N",
"
\n",
"
Visualisasi
\n",
"\N",
"Mari kita visualisasikan pohon\n",
"\N",
"
\n"
]
},
{
"cell_type": "kode",
"jumlah_eksekusi": 18,
"metadata": {
"tag": []
},
"keluaran": [],
"sumber": [
"# Perhatian: Anda mungkin perlu menghapus komentar dan menginstal pustaka pydotplus dan graphviz jika Anda belum menginstalnya sebelumnya\n",
"#!conda install -c conda-forge pydotplus -y\n",
"#!conda install -c conda-forge python-graphviz -y\n",
"\N",
"#Setelah menjalankan kode di bawah ini, sebuah berkas bernama 'tree.png' akan dibuat yang berisi gambar pohon keputusan."
]
},
{
"cell_type": "kode",
"jumlah_eksekusi": 19,
"metadata": {
"tag": []
},
"keluaran": [],
"sumber": [
"dari sklearn.tree impor ekspor_graphviz\n",
"export_graphviz(drugTree, out_file='tree.dot', loaded=True, feature_names=['Usia', 'Jenis Kelamin', 'TD', 'Kolesterol', 'Na_ke_K'])\n",
"!dot -Tpng pohon.dot -o pohon.png\n"
]
},
{
"tipe_sel": "penurunan harga",
"metadata": {},
"sumber": [
"### Terima kasih telah menyelesaikan lab ini!\n",
"\N",
"## Penulis\n",
"\N",
"Saeed Aghabozorgi\n",
"\N",
"### Kontributor Lainnya\n",
"\N",
"Joseph Santarcangelo\n",
"\N",
"Richard Ye\n",
"\N",
"##