[id,ms,tl] chore(i18n): sync translations

Sync translations with latest source changes.
Languages: Indonesian [id], Malay [ms], Tagalog (Filipino) [tl]
update-translations
localizeflow[bot] 1 month ago
parent b67cd9cd69
commit 56e54aebdc

@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "id"
},
"catplot.e73fc35fdf96242b.webp": {
"original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
"translation_date": "2026-07-14T06:59:17+00:00",
"source_file": "2-Regression/2-Data/images/catplot.png",
"language_code": "id"
},
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T14:29:09+00:00",
@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "id"
},
"heatmap.bd98dce43b404c57.webp": {
"original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
"translation_date": "2026-07-14T06:59:31+00:00",
"source_file": "2-Regression/2-Data/images/heatmap.png",
"language_code": "id"
},
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T14:28:48+00:00",
@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "id"
},
"lineplot.f9034ba47b1e30ee.webp": {
"original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
"translation_date": "2026-07-14T06:59:40+00:00",
"source_file": "2-Regression/2-Data/images/lineplot.png",
"language_code": "id"
},
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T14:25:53+00:00",
@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "id"
},
"relplot.a03837d8f0329cec.webp": {
"original_hash": "4733544cb1c2e58e987087283e66b4a5",
"translation_date": "2026-07-14T06:59:22+00:00",
"source_file": "2-Regression/2-Data/images/relplot.png",
"language_code": "id"
},
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T14:39:58+00:00",

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "ms"
},
"catplot.e73fc35fdf96242b.webp": {
"original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
"translation_date": "2026-07-14T06:59:18+00:00",
"source_file": "2-Regression/2-Data/images/catplot.png",
"language_code": "ms"
},
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T14:29:12+00:00",
@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "ms"
},
"heatmap.bd98dce43b404c57.webp": {
"original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
"translation_date": "2026-07-14T06:59:34+00:00",
"source_file": "2-Regression/2-Data/images/heatmap.png",
"language_code": "ms"
},
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T14:28:53+00:00",
@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "ms"
},
"lineplot.f9034ba47b1e30ee.webp": {
"original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
"translation_date": "2026-07-14T06:59:42+00:00",
"source_file": "2-Regression/2-Data/images/lineplot.png",
"language_code": "ms"
},
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T14:26:02+00:00",
@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "ms"
},
"relplot.a03837d8f0329cec.webp": {
"original_hash": "4733544cb1c2e58e987087283e66b4a5",
"translation_date": "2026-07-14T06:59:25+00:00",
"source_file": "2-Regression/2-Data/images/relplot.png",
"language_code": "ms"
},
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T14:39:59+00:00",

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

@ -101,6 +101,12 @@
"source_file": "8-Reinforcement/2-Gym/images/cartpole.png",
"language_code": "tl"
},
"catplot.e73fc35fdf96242b.webp": {
"original_hash": "90cd4782a2f9b40dec8218b224b29c1c",
"translation_date": "2026-07-14T06:59:20+00:00",
"source_file": "2-Regression/2-Data/images/catplot.png",
"language_code": "tl"
},
"centroid.097fde836cf6c918.webp": {
"original_hash": "c8f866ed446563d8e59087f1bca1f97d",
"translation_date": "2026-01-16T14:29:15+00:00",
@ -383,6 +389,12 @@
"source_file": "2-Regression/3-Linear/images/heatmap.png",
"language_code": "tl"
},
"heatmap.bd98dce43b404c57.webp": {
"original_hash": "7f2f2fbd993018bc01346e1eb8ae692e",
"translation_date": "2026-07-14T06:59:38+00:00",
"source_file": "2-Regression/2-Data/images/heatmap.png",
"language_code": "tl"
},
"hierarchical.bf59403aa43c8c47.webp": {
"original_hash": "50b9bc3298659c463ae76564ca645b12",
"translation_date": "2026-01-16T14:28:58+00:00",
@ -473,6 +485,12 @@
"source_file": "2-Regression/3-Linear/images/linear.png",
"language_code": "tl"
},
"lineplot.f9034ba47b1e30ee.webp": {
"original_hash": "b3959c0ed0f02f668009c76b95c4ebbb",
"translation_date": "2026-07-14T06:59:43+00:00",
"source_file": "2-Regression/2-Data/images/lineplot.png",
"language_code": "tl"
},
"lobe.2fa0806408ef9923.webp": {
"original_hash": "e6ec71dbe350aef39135dbf88bc89163",
"translation_date": "2026-01-16T14:26:12+00:00",
@ -743,6 +761,12 @@
"source_file": "2-Regression/3-Linear/images/recipes.png",
"language_code": "tl"
},
"relplot.a03837d8f0329cec.webp": {
"original_hash": "4733544cb1c2e58e987087283e66b4a5",
"translation_date": "2026-07-14T06:59:28+00:00",
"source_file": "2-Regression/2-Data/images/relplot.png",
"language_code": "tl"
},
"scaled.91897dfbaa26ca4a.webp": {
"original_hash": "789c70fafe6f6dd6e377a90b66e7d740",
"translation_date": "2026-01-16T14:40:00+00:00",

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

@ -24,8 +24,8 @@
"language_code": "id"
},
"1-Introduction/3-fairness/README.md": {
"original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
"translation_date": "2025-09-05T19:32:45+00:00",
"original_hash": "0f00d72169a0d37eecfd16d71e01700a",
"translation_date": "2026-07-14T06:38:25+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "id"
},
@ -54,8 +54,8 @@
"language_code": "id"
},
"2-Regression/1-Tools/README.md": {
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
"translation_date": "2025-09-05T18:52:06+00:00",
"original_hash": "0b8635427b582d03ea4ab7089b93e505",
"translation_date": "2026-07-14T06:33:57+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "id"
},
@ -72,8 +72,8 @@
"language_code": "id"
},
"2-Regression/2-Data/README.md": {
"original_hash": "7c077988328ebfe33b24d07945f16eca",
"translation_date": "2025-09-05T18:55:51+00:00",
"original_hash": "a58b2c4d16c6b122643391745ac15af6",
"translation_date": "2026-07-14T06:35:04+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "id"
},
@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "id"
},
"2-Regression/2-Data/solution/notebook.ipynb": {
"original_hash": "96b95f8cf473481f2f371de8156f1571",
"translation_date": "2026-07-14T06:28:35+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "id"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:42:37+00:00",
@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
"translation_date": "2025-09-05T20:14:51+00:00",
"translation_date": "2026-07-14T06:36:15+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "id"
},
@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
"translation_date": "2025-09-05T20:21:26+00:00",
"translation_date": "2026-07-14T06:37:26+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "id"
},
@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "id"
},
"__translation_failures__": {
"sketchnotes/LICENSE.md": {
"original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
"source_file": "sketchnotes/LICENSE.md",
"language_code": "id",
"failure_date": "2026-07-14T06:33:02+00:00",
"status": "failed",
"error_type": "TranslationIncompleteError",
"error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.",
"translator_version": "0.20.0",
"failure_policy_version": 1
}
},
"docs/_sidebar.md": {
"original_hash": "68dd06c685f6ce840e0acfa313352e7c",
"translation_date": "2025-09-05T19:20:16+00:00",

@ -1,30 +1,30 @@
# Membangun Solusi Machine Learning dengan AI yang Bertanggung Jawab
![Ringkasan AI yang bertanggung jawab dalam Machine Learning dalam bentuk sketchnote](../../../../sketchnotes/ml-fairness.png)
# Membangun solusi Machine Learning dengan AI yang bertanggung jawab
![Ringkasan AI yang bertanggung jawab dalam Machine Learning dalam bentuk sketchnote](../../../../translated_images/id/ml-fairness.ef296ebec6afc98a.webp)
> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/)
## [Kuis sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/)
## Pendahuluan
Dalam kurikulum ini, Anda akan mulai memahami bagaimana machine learning dapat dan sedang memengaruhi kehidupan kita sehari-hari. Bahkan saat ini, sistem dan model terlibat dalam tugas pengambilan keputusan harian, seperti diagnosis kesehatan, persetujuan pinjaman, atau mendeteksi penipuan. Oleh karena itu, penting bahwa model-model ini bekerja dengan baik untuk memberikan hasil yang dapat dipercaya. Sama seperti aplikasi perangkat lunak lainnya, sistem AI dapat meleset dari ekspektasi atau menghasilkan hasil yang tidak diinginkan. Itulah mengapa penting untuk memahami dan menjelaskan perilaku model AI.
Dalam kurikulum ini, Anda akan mulai menemukan bagaimana machine learning dapat dan sedang memengaruhi kehidupan sehari-hari kita. Bahkan sekarang, sistem dan model terlibat dalam tugas pengambilan keputusan harian, seperti diagnosis perawatan kesehatan, persetujuan pinjaman, atau mendeteksi penipuan. Jadi, penting bahwa model-model ini bekerja dengan baik untuk memberikan hasil yang dapat dipercaya. Sama seperti aplikasi perangkat lunak lainnya, sistem AI kadang akan tidak memenuhi ekspektasi atau menghasilkan hasil yang tidak diinginkan. Itulah mengapa sangat penting untuk dapat memahami dan menjelaskan perilaku model AI.
Bayangkan apa yang bisa terjadi ketika data yang Anda gunakan untuk membangun model ini tidak mencakup demografi tertentu, seperti ras, gender, pandangan politik, agama, atau secara tidak proporsional mewakili demografi tersebut. Bagaimana jika output model diinterpretasikan untuk menguntungkan beberapa demografi? Apa konsekuensinya bagi aplikasi tersebut? Selain itu, apa yang terjadi ketika model menghasilkan hasil yang merugikan dan membahayakan orang? Siapa yang bertanggung jawab atas perilaku sistem AI? Ini adalah beberapa pertanyaan yang akan kita eksplorasi dalam kurikulum ini.
Bayangkan apa yang bisa terjadi ketika data yang Anda gunakan untuk membangun model ini kurang mencakup demografi tertentu, seperti ras, jenis kelamin, pandangan politik, agama, atau secara tidak proporsional mewakili demografi tersebut. Bagaimana jika output model diinterpretasikan untuk memihak demografi tertentu? Apa konsekuensinya bagi aplikasi tersebut? Selain itu, apa yang terjadi jika model menghasilkan hasil yang merugikan dan berbahaya bagi orang-orang? Siapa yang bertanggung jawab atas perilaku sistem AI? Ini adalah beberapa pertanyaan yang akan kita jelajahi dalam kurikulum ini.
Dalam pelajaran ini, Anda akan:
- Meningkatkan kesadaran tentang pentingnya keadilan dalam machine learning dan dampak terkait keadilan.
- Mengenal praktik eksplorasi outlier dan skenario tidak biasa untuk memastikan keandalan dan keamanan.
- Memahami kebutuhan untuk memberdayakan semua orang dengan merancang sistem yang inklusif.
- Mengeksplorasi betapa pentingnya melindungi privasi dan keamanan data serta individu.
- Melihat pentingnya pendekatan transparan untuk menjelaskan perilaku model AI.
- Menyadari bahwa akuntabilitas sangat penting untuk membangun kepercayaan pada sistem AI.
- Meningkatkan kesadaran Anda tentang pentingnya keadilan dalam machine learning dan bahaya terkait ketidakadilan.
- Mengenal praktik mengeksplorasi nilai ekstrim dan skenario tidak biasa untuk memastikan keandalan dan keselamatan.
- Memperoleh pemahaman akan kebutuhan memberdayakan semua orang dengan merancang sistem yang inklusif.
- Menyelami pentingnya melindungi privasi dan keamanan data serta orang.
- Melihat pentingnya pendekatan kotak kaca untuk menjelaskan perilaku model AI.
- Menjadi sadar akan bagaimana akuntabilitas penting untuk membangun kepercayaan dalam sistem AI.
## Prasyarat
Sebagai prasyarat, silakan ikuti "Responsible AI Principles" Learn Path dan tonton video di bawah ini tentang topik tersebut:
Sebagai prasyarat, silakan ikuti "Prinsip AI yang Bertanggung Jawab" dalam Jalur Pembelajaran dan tonton video di bawah ini tentang topik tersebut:
Pelajari lebih lanjut tentang AI yang Bertanggung Jawab dengan mengikuti [Learning Path](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
Pelajari lebih lanjut tentang AI yang Bertanggung Jawab dengan mengikuti [Jalur Pembelajaran ini](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
[![Pendekatan Microsoft terhadap AI yang Bertanggung Jawab](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Pendekatan Microsoft terhadap AI yang Bertanggung Jawab")
@ -32,130 +32,136 @@ Pelajari lebih lanjut tentang AI yang Bertanggung Jawab dengan mengikuti [Learni
## Keadilan
Sistem AI harus memperlakukan semua orang secara adil dan menghindari memengaruhi kelompok orang yang serupa dengan cara yang berbeda. Misalnya, ketika sistem AI memberikan panduan tentang pengobatan medis, aplikasi pinjaman, atau pekerjaan, mereka harus memberikan rekomendasi yang sama kepada semua orang dengan gejala, keadaan finansial, atau kualifikasi profesional yang serupa. Setiap dari kita sebagai manusia membawa bias yang diwarisi yang memengaruhi keputusan dan tindakan kita. Bias ini dapat terlihat dalam data yang kita gunakan untuk melatih sistem AI. Manipulasi semacam itu terkadang terjadi secara tidak sengaja. Sering kali sulit untuk secara sadar mengetahui kapan Anda memperkenalkan bias dalam data.
Sistem AI harus memperlakukan semua orang secara adil dan menghindari memberikan pengaruh berbeda pada kelompok orang yang serupa. Sebagai contoh, saat sistem AI memberikan panduan dalam perawatan medis, aplikasi pinjaman, atau pekerjaan, mereka harus memberikan rekomendasi yang sama kepada semua orang dengan gejala, kondisi keuangan, atau kualifikasi profesional yang serupa. Setiap dari kita sebagai manusia membawa bias yang diwariskan yang memengaruhi keputusan dan tindakan kita. Bias-bias ini bisa jelas dalam data yang kita gunakan untuk melatih sistem AI. Manipulasi semacam ini kadang terjadi tanpa disengaja. Seringkali sulit untuk sadar ketika Anda memperkenalkan bias dalam data.
**“Ketidakadilan”** mencakup dampak negatif, atau “kerugian”, bagi sekelompok orang, seperti yang didefinisikan dalam hal ras, gender, usia, atau status disabilitas. Kerugian utama terkait keadilan dapat diklasifikasikan sebagai:
**"Ketidakadilan"** mencakup dampak negatif, atau "kerugian", bagi kelompok orang tertentu, seperti yang didefinisikan berdasarkan ras, jenis kelamin, usia, atau status disabilitas. Bahaya utama terkait keadilan dapat diklasifikasikan sebagai:
- **Distribusi**, jika gender atau etnis tertentu, misalnya, lebih diuntungkan dibandingkan yang lain.
- **Kualitas layanan**. Jika Anda melatih data untuk satu skenario spesifik tetapi kenyataannya jauh lebih kompleks, ini menghasilkan layanan yang berkinerja buruk. Misalnya, dispenser sabun tangan yang tidak dapat mendeteksi orang dengan kulit gelap. [Referensi](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Pelecehan**. Mengkritik atau melabeli sesuatu atau seseorang secara tidak adil. Misalnya, teknologi pelabelan gambar yang secara keliru melabeli gambar orang berkulit gelap sebagai gorila.
- **Representasi berlebihan atau kurang**. Ide bahwa kelompok tertentu tidak terlihat dalam profesi tertentu, dan layanan atau fungsi apa pun yang terus mempromosikan hal itu berkontribusi pada kerugian.
- **Stereotip**. Mengaitkan atribut yang telah ditentukan sebelumnya dengan kelompok tertentu. Misalnya, sistem penerjemahan bahasa antara Inggris dan Turki mungkin memiliki ketidakakuratan karena kata-kata dengan asosiasi stereotip terhadap gender.
- **Alokasi**, jika misalnya sebuah gender atau etnis lebih diutamakan dibanding yang lain.
- **Kualitas layanan**. Jika Anda melatih data untuk satu skenario spesifik tapi kenyataannya jauh lebih kompleks, hal itu menghasilkan layanan dengan kinerja buruk. Misalnya, dispenser sabun tangan yang tampaknya tidak dapat mendeteksi orang dengan kulit gelap. [Referensi](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Penghinaan**. Mengkritik dan memberi label sesuatu atau seseorang secara tidak adil. Contohnya, teknologi pelabelan gambar yang secara terkenal salah memberi label gambar orang dengan kulit gelap sebagai gorila.
- **Keterwakilan berlebihan atau kekurangan**. Gagasan bahwa kelompok tertentu tidak terlihat di profesi tertentu, dan layanan atau fungsi yang terus mempromosikannya berkontribusi pada kerugian.
- **Stereotip**. Mengasosiasikan kelompok tertentu dengan atribut yang telah ditetapkan sebelumnya. Misalnya, sebuah sistem terjemahan bahasa antara Inggris dan Turki mungkin memiliki ketidakakuratan karena kata-kata yang terkait secara stereotip dengan gender.
![terjemahan ke Turki](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png)
> terjemahan ke Turki
![terjemahan ke bahasa Turki](../../../../translated_images/id/gender-bias-translate-en-tr.f185fd8822c2d437.webp)
> terjemahan ke bahasa Turki
![terjemahan kembali ke Inggris](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png)
> terjemahan kembali ke Inggris
![terjemahan kembali ke bahasa Inggris](../../../../translated_images/id/gender-bias-translate-tr-en.4eee7e3cecb8c70e.webp)
> terjemahan kembali ke bahasa Inggris
Saat merancang dan menguji sistem AI, kita perlu memastikan bahwa AI adil dan tidak diprogram untuk membuat keputusan yang bias atau diskriminatif, yang juga dilarang dilakukan oleh manusia. Menjamin keadilan dalam AI dan machine learning tetap menjadi tantangan sosial-teknis yang kompleks.
Saat merancang dan menguji sistem AI, kita harus memastikan bahwa AI adil dan tidak diprogram untuk membuat keputusan yang bias atau diskriminatif, yang juga dilarang bagi manusia. Menjamin keadilan dalam AI dan machine learning tetap menjadi tantangan sosioteknis yang kompleks.
### Keandalan dan keamanan
### Keandalan dan keselamatan
Untuk membangun kepercayaan, sistem AI perlu dapat diandalkan, aman, dan konsisten dalam kondisi normal maupun tak terduga. Penting untuk mengetahui bagaimana sistem AI akan berperilaku dalam berbagai situasi, terutama ketika mereka berada di luar batas normal. Saat membangun solusi AI, perlu ada fokus yang substansial pada bagaimana menangani berbagai keadaan yang mungkin dihadapi oleh solusi AI tersebut. Misalnya, mobil tanpa pengemudi harus mengutamakan keselamatan orang. Akibatnya, AI yang menggerakkan mobil harus mempertimbangkan semua kemungkinan skenario yang dapat dihadapi mobil, seperti malam hari, badai petir atau badai salju, anak-anak berlari di jalan, hewan peliharaan, konstruksi jalan, dll. Seberapa baik sistem AI dapat menangani berbagai kondisi secara andal dan aman mencerminkan tingkat antisipasi yang dipertimbangkan oleh ilmuwan data atau pengembang AI selama desain atau pengujian sistem.
Untuk membangun kepercayaan, sistem AI harus andal, aman, dan konsisten dalam kondisi normal maupun tak terduga. Penting untuk mengetahui bagaimana sistem AI berperilaku dalam berbagai situasi, terutama saat terjadi nilai ekstrim. Saat membangun solusi AI, perlu adanya fokus besar pada cara menangani berbagai keadaan yang mungkin dihadapi solusi AI tersebut. Misalnya, mobil swakemudi harus mengutamakan keselamatan manusia. Oleh karena itu, AI yang menggerakkan mobil harus mempertimbangkan semua skenario yang mungkin dihadapi seperti malam hari, badai petir atau badai salju, anak-anak yang berlari menyeberang jalan, binatang peliharaan, konstruksi jalan, dan sebagainya. Seberapa baik sistem AI dapat menangani berbagai kondisi ekstrem dengan andal dan aman mencerminkan tingkat antisipasi yang dipertimbangkan oleh ilmuwan data atau pengembang AI selama perancangan atau pengujian sistem.
> [🎥 Klik di sini untuk video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### Inklusivitas
Sistem AI harus dirancang untuk melibatkan dan memberdayakan semua orang. Saat merancang dan mengimplementasikan sistem AI, ilmuwan data dan pengembang AI mengidentifikasi dan mengatasi hambatan potensial dalam sistem yang dapat secara tidak sengaja mengecualikan orang. Misalnya, ada 1 miliar orang dengan disabilitas di seluruh dunia. Dengan kemajuan AI, mereka dapat mengakses berbagai informasi dan peluang dengan lebih mudah dalam kehidupan sehari-hari mereka. Dengan mengatasi hambatan tersebut, tercipta peluang untuk berinovasi dan mengembangkan produk AI dengan pengalaman yang lebih baik yang menguntungkan semua orang.
Sistem AI harus dirancang untuk melibatkan dan memberdayakan semua orang. Saat merancang dan menerapkan sistem AI, ilmuwan data dan pengembang AI mengidentifikasi dan mengatasi potensi penghalang dalam sistem yang mungkin tanpa sengaja mengecualikan orang. Misalnya, ada 1 miliar orang dengan disabilitas di seluruh dunia. Dengan kemajuan AI, mereka dapat mengakses berbagai informasi dan peluang dengan lebih mudah dalam kehidupan sehari-hari mereka. Dengan mengatasi penghalang tersebut, tercipta peluang untuk berinovasi dan mengembangkan produk AI dengan pengalaman yang lebih baik yang menguntungkan semua orang.
> [🎥 Klik di sini untuk video: inklusivitas dalam AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### Keamanan dan privasi
Sistem AI harus aman dan menghormati privasi orang. Orang memiliki kepercayaan yang lebih rendah pada sistem yang membahayakan privasi, informasi, atau kehidupan mereka. Saat melatih model machine learning, kita mengandalkan data untuk menghasilkan hasil terbaik. Dalam melakukannya, asal dan integritas data harus dipertimbangkan. Misalnya, apakah data dikirimkan oleh pengguna atau tersedia secara publik? Selanjutnya, saat bekerja dengan data, sangat penting untuk mengembangkan sistem AI yang dapat melindungi informasi rahasia dan tahan terhadap serangan. Seiring dengan semakin meluasnya penggunaan AI, melindungi privasi dan mengamankan informasi pribadi serta bisnis yang penting menjadi semakin kritis dan kompleks. Masalah privasi dan keamanan data memerlukan perhatian khusus untuk AI karena akses ke data sangat penting bagi sistem AI untuk membuat prediksi dan keputusan yang akurat dan terinformasi tentang orang.
Sistem AI harus aman dan menghormati privasi orang. Orang kurang percaya pada sistem yang membahayakan privasi, informasi, atau kehidupan mereka. Saat melatih model machine learning, kita mengandalkan data untuk menghasilkan hasil terbaik. Dalam melakukannya, asal dan integritas data harus dipertimbangkan. Misalnya, apakah data dikirimkan oleh pengguna atau tersedia secara publik? Selanjutnya, saat bekerja dengan data, sangat penting untuk mengembangkan sistem AI yang dapat melindungi informasi rahasia dan tahan terhadap serangan. Seiring AI semakin meluas, melindungi privasi dan mengamankan informasi pribadi serta bisnis menjadi semakin penting dan kompleks. Masalah privasi dan keamanan data memerlukan perhatian khusus untuk AI karena akses ke data sangat penting bagi sistem AI untuk membuat prediksi dan keputusan yang akurat dan tepat terkait orang.
> [🎥 Klik di sini untuk video: keamanan dalam AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Sebagai industri, kita telah membuat kemajuan signifikan dalam privasi & keamanan, yang didorong secara signifikan oleh regulasi seperti GDPR (General Data Protection Regulation).
- Namun, dengan sistem AI, kita harus mengakui adanya ketegangan antara kebutuhan akan data pribadi yang lebih banyak untuk membuat sistem lebih personal dan efektif dan privasi.
- Sebagai industri, kami telah membuat kemajuan signifikan dalam Privasi & keamanan, yang didorong secara signifikan oleh regulasi seperti GDPR (General Data Protection Regulation).
- Namun dengan sistem AI kita harus mengakui adanya ketegangan antara kebutuhan akan lebih banyak data pribadi agar sistem lebih personal dan efektif dengan privasi.
- Sama seperti dengan lahirnya komputer yang terhubung dengan internet, kita juga melihat peningkatan besar dalam jumlah masalah keamanan terkait AI.
- Pada saat yang sama, kita telah melihat AI digunakan untuk meningkatkan keamanan. Sebagai contoh, sebagian besar pemindai antivirus modern didukung oleh heuristik AI saat ini.
- Kita perlu memastikan bahwa proses Data Science kita berpadu harmonis dengan praktik privasi dan keamanan terbaru.
- Pada saat yang sama, kita telah melihat AI digunakan untuk meningkatkan keamanan. Sebagai contoh, sebagian besar pemindai anti-virus modern saat ini didorong oleh heuristik AI.
- Kita perlu memastikan bahwa proses Data Science kita selaras harmonis dengan praktik privasi dan keamanan terbaru.
### Transparansi
Sistem AI harus dapat dipahami. Bagian penting dari transparansi adalah menjelaskan perilaku sistem AI dan komponennya. Meningkatkan pemahaman tentang sistem AI membutuhkan para pemangku kepentingan untuk memahami bagaimana dan mengapa mereka berfungsi sehingga mereka dapat mengidentifikasi potensi masalah kinerja, kekhawatiran keamanan dan privasi, bias, praktik eksklusif, atau hasil yang tidak diinginkan. Kami juga percaya bahwa mereka yang menggunakan sistem AI harus jujur dan terbuka tentang kapan, mengapa, dan bagaimana mereka memilih untuk menerapkannya, serta keterbatasan sistem yang mereka gunakan. Misalnya, jika sebuah bank menggunakan sistem AI untuk mendukung keputusan pemberian pinjaman konsumen, penting untuk memeriksa hasilnya dan memahami data mana yang memengaruhi rekomendasi sistem. Pemerintah mulai mengatur AI di berbagai industri, sehingga ilmuwan data dan organisasi harus menjelaskan apakah sistem AI memenuhi persyaratan regulasi, terutama ketika ada hasil yang tidak diinginkan.
### Transparansi
Sistem AI harus dapat dipahami. Bagian penting dari transparansi adalah menjelaskan perilaku sistem AI dan komponennya. Meningkatkan pemahaman tentang sistem AI mengharuskan para pemangku kepentingan memahami bagaimana dan mengapa sistem berfungsi sehingga mereka dapat mengidentifikasi potensi masalah kinerja, kekhawatiran keselamatan dan privasi, bias, praktik pengecualian, atau hasil yang tidak diinginkan. Kami juga percaya bahwa mereka yang menggunakan sistem AI harus jujur dan terbuka tentang kapan, mengapa, dan bagaimana mereka memilih untuk menggunakannya. Serta keterbatasan sistem yang mereka gunakan. Misalnya, jika bank menggunakan sistem AI untuk mendukung keputusan pinjaman konsumen, penting untuk memeriksa hasil dan memahami data apa yang memengaruhi rekomendasi sistem. Pemerintah mulai mengatur AI di berbagai industri, sehingga ilmuwan data dan organisasi harus menjelaskan jika sistem AI memenuhi persyaratan regulasi, terutama saat terjadi hasil yang tidak diinginkan.
> [🎥 Klik di sini untuk video: transparansi dalam AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Karena sistem AI sangat kompleks, sulit untuk memahami cara kerjanya dan menafsirkan hasilnya.
- Karena sistem AI sangat kompleks, sulit untuk memahami cara kerja dan menginterpretasikan hasilnya.
- Kurangnya pemahaman ini memengaruhi cara sistem ini dikelola, dioperasikan, dan didokumentasikan.
- Lebih penting lagi, kurangnya pemahaman ini memengaruhi keputusan yang dibuat menggunakan hasil yang dihasilkan oleh sistem ini.
- Kurangnya pemahaman ini terutama memengaruhi keputusan yang dibuat menggunakan hasil yang dihasilkan sistem ini.
### Akuntabilitas
Orang yang merancang dan meluncurkan sistem AI harus bertanggung jawab atas cara sistem mereka beroperasi. Kebutuhan akan akuntabilitas sangat krusial untuk teknologi penggunaan sensitif seperti pengenalan wajah. Baru-baru ini, permintaan terhadap teknologi pengenalan wajah semakin meningkat, terutama dari organisasi penegak hukum yang melihat potensi teknologi ini untuk menemukan anak hilang. Namun, teknologi ini bisa digunakan oleh pemerintah untuk mempertaruhkan kebebasan mendasar warganya dengan, misalnya, memungkinkan pengawasan terus-menerus terhadap individu tertentu. Oleh karena itu, ilmuwan data dan organisasi harus bertanggung jawab atas dampak sistem AI mereka terhadap individu atau masyarakat.
Orang-orang yang merancang dan menerapkan sistem AI harus bertanggung jawab atas cara sistem mereka beroperasi. Kebutuhan akan akuntabilitas sangat penting dengan teknologi yang sensitif seperti pengenalan wajah. Baru-baru ini, ada permintaan yang meningkat untuk teknologi pengenalan wajah, terutama dari organisasi penegak hukum yang melihat potensi teknologi ini dalam penggunaan seperti menemukan anak-anak yang hilang. Namun, teknologi ini berpotensi digunakan oleh pemerintah untuk membahayakan kebebasan fundamental warganya, misalnya, dengan memungkinkan pengawasan terus-menerus terhadap individu tertentu. Oleh karena itu, ilmuwan data dan organisasi perlu bertanggung jawab atas bagaimana sistem AI mereka memengaruhi individu atau masyarakat.
[![Peneliti AI terkemuka memperingatkan Pengawasan Massal melalui Pengenalan Wajah](../../../../translated_images/id/accountability.41d8c0f4b85b6231.webp)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Pendekatan Microsoft terhadap AI yang Bertanggung Jawab")
[![Peneliti AI Terkemuka Memperingatkan Pengawasan Massal Melalui Pengenalan Wajah](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Pendekatan Microsoft terhadap AI yang Bertanggung Jawab")
> 🎥 Klik gambar di atas untuk video: Peringatan tentang Pengawasan Massal melalui Pengenalan Wajah
> 🎥 Klik gambar di atas untuk video: Peringatan Pengawasan Massal Melalui Pengenalan Wajah
Pada akhirnya, salah satu pertanyaan terbesar untuk generasi kita, sebagai generasi pertama yang membawa AI ke masyarakat, adalah bagaimana memastikan bahwa komputer tetap bertanggung jawab kepada manusia dan bagaimana memastikan bahwa orang-orang yang merancang komputer tetap bertanggung jawab kepada semua orang.
Pada akhirnya salah satu pertanyaan terbesar bagi generasi kita, sebagai generasi pertama yang membawa AI ke masyarakat, adalah bagaimana memastikan komputer tetap bertanggung jawab kepada manusia dan bagaimana memastikan orang yang merancang komputer tetap bertanggung jawab kepada semua orang.
## Penilaian Dampak
Sebelum melatih model machine learning, penting untuk melakukan penilaian dampak untuk memahami tujuan sistem AI; apa penggunaan yang dimaksudkan; di mana sistem akan diterapkan; dan siapa yang akan berinteraksi dengan sistem tersebut. Hal ini membantu peninjau atau penguji mengevaluasi sistem untuk mengetahui faktor-faktor yang perlu dipertimbangkan saat mengidentifikasi risiko potensial dan konsekuensi yang diharapkan.
Sebelum melatih model machine learning, penting untuk melakukan penilaian dampak untuk memahami tujuan sistem AI; apa penggunaan yang dimaksudkan; di mana sistem akan disebarkan; dan siapa yang akan berinteraksi dengan sistem. Ini berguna bagi peninjau atau penguji yang mengevaluasi sistem agar tahu faktor apa yang harus dipertimbangkan ketika mengidentifikasi potensi risiko dan konsekuensi yang diharapkan.
Berikut adalah area fokus saat melakukan penilaian dampak:
* **Dampak buruk pada individu**. Menyadari adanya pembatasan atau persyaratan, penggunaan yang tidak didukung, atau keterbatasan yang diketahui yang menghambat kinerja sistem sangat penting untuk memastikan bahwa sistem tidak digunakan dengan cara yang dapat merugikan individu.
* **Persyaratan data**. Memahami bagaimana dan di mana sistem akan menggunakan data memungkinkan peninjau untuk mengeksplorasi persyaratan data apa yang perlu diperhatikan (misalnya, regulasi data GDPR atau HIPPA). Selain itu, periksa apakah sumber atau jumlah data cukup untuk pelatihan.
* **Ringkasan dampak**. Kumpulkan daftar potensi kerugian yang dapat timbul dari penggunaan sistem. Sepanjang siklus hidup ML, tinjau apakah masalah yang diidentifikasi telah diatasi atau diminimalkan.
* **Tujuan yang berlaku** untuk masing-masing dari enam prinsip inti. Tinjau apakah tujuan dari setiap prinsip telah terpenuhi dan apakah ada celah.
* **Dampak merugikan pada individu**. Menyadari adanya pembatasan atau persyaratan, penggunaan yang tidak didukung atau keterbatasan yang diketahui yang menghambat kinerja sistem sangat penting untuk memastikan sistem tidak digunakan dengan cara yang dapat membahayakan individu.
* **Persyaratan data**. Memahami bagaimana dan di mana sistem akan menggunakan data memungkinkan peninjau mengeksplorasi persyaratan data yang harus diperhatikan (misal, regulasi data GDPR atau HIPAA). Selain itu, periksa apakah sumber atau jumlah data cukup untuk pelatihan.
* **Ringkasan dampak**. Kumpulkan daftar potensi bahaya yang bisa muncul dari penggunaan sistem. Sepanjang siklus hidup ML, tinjau apakah masalah yang diidentifikasi telah dikurangi atau ditangani.
* **Tujuan yang berlaku** untuk setiap dari enam prinsip inti. Nilai apakah tujuan dari masing-masing prinsip terpenuhi dan apakah ada celah.
## Debugging dengan AI yang Bertanggung Jawab
Seperti debugging aplikasi perangkat lunak, debugging sistem AI adalah proses yang diperlukan untuk mengidentifikasi dan menyelesaikan masalah dalam sistem. Ada banyak faktor yang dapat memengaruhi model tidak berkinerja seperti yang diharapkan atau secara bertanggung jawab. Sebagian besar metrik kinerja model tradisional adalah agregat kuantitatif dari kinerja model, yang tidak cukup untuk menganalisis bagaimana model melanggar prinsip AI yang bertanggung jawab. Selain itu, model machine learning adalah kotak hitam yang membuatnya sulit untuk memahami apa yang mendorong hasilnya atau memberikan penjelasan ketika terjadi kesalahan. Nanti dalam kursus ini, kita akan belajar bagaimana menggunakan dashboard AI yang Bertanggung Jawab untuk membantu debugging sistem AI. Dashboard ini menyediakan alat holistik bagi ilmuwan data dan pengembang AI untuk melakukan:
## Debugging dengan AI yang bertanggung jawab
* **Analisis kesalahan**. Untuk mengidentifikasi distribusi kesalahan model yang dapat memengaruhi keadilan atau keandalan sistem.
* **Ikhtisar model**. Untuk menemukan di mana terdapat disparitas dalam kinerja model di berbagai kelompok data.
* **Analisis data**. Untuk memahami distribusi data dan mengidentifikasi potensi bias dalam data yang dapat menyebabkan masalah keadilan, inklusivitas, dan keandalan.
* **Interpretabilitas model**. Untuk memahami apa yang memengaruhi atau memengaruhi prediksi model. Ini membantu menjelaskan perilaku model, yang penting untuk transparansi dan akuntabilitas.
Mirip dengan debugging aplikasi perangkat lunak, debugging sistem AI adalah proses yang diperlukan untuk mengidentifikasi dan menyelesaikan masalah dalam sistem. Ada banyak faktor yang dapat memengaruhi model tidak berperforma sesuai harapan atau dengan cara yang bertanggung jawab. Sebagian besar metrik kinerja model tradisional adalah agregat kuantitatif dari kinerja model, yang tidak cukup untuk menganalisa bagaimana model melanggar prinsip AI yang bertanggung jawab. Selain itu, model machine learning adalah kotak hitam yang menyulitkan untuk memahami apa yang menggerakkan hasilnya atau memberikan penjelasan saat membuat kesalahan. Nanti dalam kursus ini, kita akan belajar cara menggunakan dashboard Responsible AI untuk membantu debugging sistem AI. Dashboard ini menyediakan alat holistik bagi ilmuwan data dan pengembang AI untuk melakukan:
## 🚀 Tantangan
* **Analisis kesalahan**. Untuk mengidentifikasi distribusi kesalahan model yang dapat memengaruhi keadilan atau keandalannya.
* **Ikhtisar model**. Untuk menemukan di mana ada kesenjangan dalam kinerja model di berbagai kohort data.
* **Analisis data**. Untuk memahami distribusi data dan mengidentifikasi bias potensial dalam data yang dapat menyebabkan masalah keadilan, inklusivitas, dan keandalan.
* **Interpretabilitas model**. Untuk memahami apa yang memengaruhi atau mempengaruhi prediksi model. Ini membantu menjelaskan perilaku model, yang penting untuk transparansi dan akuntabilitas.
Untuk mencegah kerugian diperkenalkan sejak awal, kita harus:
## 🚀 Tantangan
Untuk mencegah bahaya diperkenalkan sejak awal, kita harus:
- memiliki keragaman latar belakang dan perspektif di antara orang-orang yang bekerja pada sistem
- berinvestasi dalam dataset yang mencerminkan keragaman masyarakat kita
- mengembangkan metode yang lebih baik di seluruh siklus hidup machine learning untuk mendeteksi dan memperbaiki AI yang bertanggung jawab saat terjadi
- mengembangkan metode yang lebih baik sepanjang siklus hidup machine learning untuk mendeteksi dan mengoreksi AI yang bertanggung jawab saat itu terjadi
Pikirkan skenario kehidupan nyata di mana ketidakpercayaan model terlihat dalam pembangunan dan penggunaan model. Apa lagi yang harus kita pertimbangkan?
Pikirkan tentang skenario kehidupan nyata di mana ketidakpercayaan model tampak jelas dalam pembangunan dan penggunaan model. Apa lagi yang harus kita pertimbangkan?
## [Kuis Pasca-Pelajaran](https://ff-quizzes.netlify.app/en/ml/)
## [Kuis setelah kuliah](https://ff-quizzes.netlify.app/en/ml/)
## Tinjauan & Studi Mandiri
## Ulasan & Studi Mandiri
Dalam pelajaran ini, Anda telah mempelajari beberapa dasar konsep keadilan dan ketidakadilan dalam machine learning.
Tonton lokakarya ini untuk mendalami topik berikut:
Dalam pelajaran ini, Anda telah mempelajari beberapa dasar konsep keadilan dan ketidakadilan dalam pembelajaran mesin.
Tonton lokakarya ini untuk menyelami lebih dalam topik-topik tersebut:
- Mengejar AI yang bertanggung jawab: Menerapkan prinsip ke dalam praktik oleh Besmira Nushi, Mehrnoosh Sameki, dan Amit Sharma
- Dalam upaya AI yang bertanggung jawab: Menerapkan prinsip ke praktik oleh Besmira Nushi, Mehrnoosh Sameki dan Amit Sharma
[![Responsible AI Toolbox: Kerangka kerja open-source untuk membangun AI yang bertanggung jawab](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Kerangka kerja open-source untuk membangun AI yang bertanggung jawab")
[![Responsible AI Toolbox: An open-source framework for building responsible AI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
> 🎥 Klik gambar di atas untuk menonton video: RAI Toolbox: Kerangka kerja open-source untuk membangun AI yang bertanggung jawab oleh Besmira Nushi, Mehrnoosh Sameki, dan Amit Sharma
> 🎥 Klik gambar di atas untuk video: RAI Toolbox: Kerangka kerja sumber terbuka untuk membangun AI yang bertanggung jawab oleh Besmira Nushi, Mehrnoosh Sameki, dan Amit Sharma
Selain itu, baca:
Juga, baca:
- Pusat sumber daya RAI Microsoft: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Pusat sumber daya RAI Microsoft: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Kelompok penelitian FATE Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- Kelompok riset FATE Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
RAI Toolbox:
RAI Toolbox:
- [Repositori GitHub Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox)
Baca tentang alat Azure Machine Learning untuk memastikan keadilan:
- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
## Tugas
[Eksplorasi RAI Toolbox](assignment.md)
[Jelajahi RAI Toolbox](assignment.md)
---
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,120 +1,121 @@
# Memulai dengan Python dan Scikit-learn untuk model regresi
![Ringkasan regresi dalam sketchnote](../../../../sketchnotes/ml-regression.png)
![Ringkasan regresi dalam sketchnote](../../../../translated_images/id/ml-regression.4e4f70e3b3ed446e.webp)
> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Kuis sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/)
## [Kuis sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/)
> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## Pendahuluan
Dalam empat pelajaran ini, Anda akan mempelajari cara membangun model regresi. Kita akan membahas kegunaannya sebentar lagi. Namun sebelum memulai, pastikan Anda memiliki alat yang tepat untuk memulai proses ini!
Dalam empat pelajaran ini, Anda akan menemukan cara membangun model regresi. Kita akan membahas kegunaannya sebentar lagi. Tetapi sebelum Anda melakukan apa pun, pastikan Anda memiliki alat yang tepat untuk memulai prosesnya!
Dalam pelajaran ini, Anda akan belajar:
Dalam pelajaran ini, Anda akan belajar bagaimana:
- Mengonfigurasi komputer Anda untuk tugas pembelajaran mesin lokal.
- Bekerja dengan Jupyter notebook.
- Bekerja dengan Jupyter Notebooks.
- Menggunakan Scikit-learn, termasuk instalasi.
- Mengeksplorasi regresi linier melalui latihan langsung.
- Mengeksplorasi regresi linier dengan latihan langsung.
## Instalasi dan konfigurasi
[![ML untuk pemula - Siapkan alat Anda untuk membangun model Pembelajaran Mesin](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML untuk pemula - Siapkan alat Anda untuk membangun model Pembelajaran Mesin")
[![ML untuk pemula - Persiapkan alat Anda untuk membangun model Pembelajaran Mesin](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML untuk pemula -Persiapkan alat Anda untuk membangun model Pembelajaran Mesin")
> 🎥 Klik gambar di atas untuk video singkat tentang cara mengonfigurasi komputer Anda untuk ML.
> 🎥 Klik gambar di atas untuk video singkat yang menjelaskan cara mengonfigurasi komputer Anda untuk ML.
1. **Instal Python**. Pastikan [Python](https://www.python.org/downloads/) sudah terinstal di komputer Anda. Anda akan menggunakan Python untuk banyak tugas ilmu data dan pembelajaran mesin. Sebagian besar sistem komputer sudah memiliki instalasi Python. Ada juga [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) yang berguna untuk mempermudah pengaturan bagi beberapa pengguna.
1. **Install Python**. Pastikan [Python](https://www.python.org/downloads/) terpasang di komputer Anda. Anda akan menggunakan Python untuk banyak tugas data science dan machine learning. Kebanyakan sistem komputer sudah menyertakan instalasi Python. Ada juga [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) yang berguna, untuk memudahkan pengaturan bagi beberapa pengguna.
Namun, beberapa penggunaan Python memerlukan satu versi perangkat lunak, sementara yang lain memerlukan versi yang berbeda. Oleh karena itu, sangat berguna untuk bekerja dalam [lingkungan virtual](https://docs.python.org/3/library/venv.html).
Namun, beberapa penggunaan Python memerlukan satu versi perangkat lunak, sedangkan lainnya membutuhkan versi berbeda. Karena itu, berguna untuk bekerja dalam [virtual environment](https://docs.python.org/3/library/venv.html).
2. **Instal Visual Studio Code**. Pastikan Anda memiliki Visual Studio Code yang terinstal di komputer Anda. Ikuti petunjuk ini untuk [menginstal Visual Studio Code](https://code.visualstudio.com/) untuk instalasi dasar. Anda akan menggunakan Python di Visual Studio Code dalam kursus ini, jadi Anda mungkin ingin mempelajari cara [mengonfigurasi Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) untuk pengembangan Python.
2. **Install Visual Studio Code**. Pastikan Anda memiliki Visual Studio Code di komputer Anda. Ikuti petunjuk ini untuk [menginstal Visual Studio Code](https://code.visualstudio.com/) untuk instalasi dasar. Anda akan menggunakan Python di Visual Studio Code dalam kursus ini, jadi Anda mungkin ingin belajar cara [mengonfigurasi Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) untuk pengembangan Python.
> Biasakan diri dengan Python dengan mempelajari koleksi [modul pembelajaran](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
> Kenali Python dengan bekerja melalui kumpulan [modul Learn](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
>
> [![Siapkan Python dengan Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Siapkan Python dengan Visual Studio Code")
> [![Setup Python dengan Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Setup Python dengan Visual Studio Code")
>
> 🎥 Klik gambar di atas untuk video: menggunakan Python dalam VS Code.
3. **Instal Scikit-learn**, dengan mengikuti [petunjuk ini](https://scikit-learn.org/stable/install.html). Karena Anda perlu memastikan bahwa Anda menggunakan Python 3, disarankan untuk menggunakan lingkungan virtual. Perhatikan, jika Anda menginstal pustaka ini di Mac M1, ada petunjuk khusus di halaman yang ditautkan di atas.
3. **Install Scikit-learn**, dengan mengikuti [petunjuk ini](https://scikit-learn.org/stable/install.html). Karena Anda perlu memastikan menggunakan Python 3, disarankan menggunakan virtual environment. Catatan, jika Anda menginstal perpustakaan ini di Mac M1, ada petunjuk khusus di halaman yang ditautkan di atas.
4. **Instal Jupyter Notebook**. Anda perlu [menginstal paket Jupyter](https://pypi.org/project/jupyter/).
1. **Install Jupyter Notebook**. Anda perlu [menginstal paket Jupyter](https://pypi.org/project/jupyter/).
## Lingkungan penulisan ML Anda
## Lingkungan penyusunan ML Anda
Anda akan menggunakan **notebook** untuk mengembangkan kode Python Anda dan membuat model pembelajaran mesin. Jenis file ini adalah alat umum bagi ilmuwan data, dan dapat diidentifikasi dengan akhiran atau ekstensi `.ipynb`.
Anda akan menggunakan **notebook** untuk mengembangkan kode Python dan membuat model pembelajaran mesin. Jenis file ini adalah alat umum untuk ilmuwan data, dan dapat dikenali dari akhiran atau ekstensi `.ipynb`.
Notebook adalah lingkungan interaktif yang memungkinkan pengembang untuk menulis kode sekaligus menambahkan catatan dan dokumentasi di sekitar kode, yang sangat membantu untuk proyek eksperimental atau berbasis penelitian.
Notebook adalah lingkungan interaktif yang memungkinkan pengembang untuk menulis kode sekaligus menambahkan catatan dan dokumentasi di sekitar kode yang sangat membantu untuk proyek eksperimental atau riset.
[![ML untuk pemula - Siapkan Jupyter Notebook untuk mulai membangun model regresi](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML untuk pemula - Siapkan Jupyter Notebook untuk mulai membangun model regresi")
[![ML untuk pemula - Siapkan Jupyter Notebooks untuk mulai membangun model regresi](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML untuk pemula - Siapkan Jupyter Notebooks untuk mulai membangun model regresi")
> 🎥 Klik gambar di atas untuk video singkat tentang latihan ini.
> 🎥 Klik gambar di atas untuk video singkat yang menjelaskan latihan ini.
### Latihan - bekerja dengan notebook
Di folder ini, Anda akan menemukan file _notebook.ipynb_.
Dalam folder ini, Anda akan menemukan file _notebook.ipynb_.
1. Buka _notebook.ipynb_ di Visual Studio Code.
Server Jupyter akan dimulai dengan Python 3+. Anda akan menemukan area di notebook yang dapat `dijalankan`, yaitu potongan kode. Anda dapat menjalankan blok kode dengan memilih ikon yang terlihat seperti tombol putar.
Server Jupyter akan mulai dengan Python 3+ aktif. Anda akan menemukan area di notebook yang dapat `run`, potongan kode. Anda dapat menjalankan blok kode dengan memilih ikon yang mirip tombol play.
2. Pilih ikon `md` dan tambahkan sedikit markdown, serta teks berikut **# Selamat datang di notebook Anda**.
1. Pilih ikon `md` dan tambahkan sedikit markdown, serta teks berikut **# Selamat datang di notebook Anda**.
Selanjutnya, tambahkan beberapa kode Python.
3. Ketik **print('hello notebook')** di blok kode.
4. Pilih panah untuk menjalankan kode.
1. Ketik **print('hello notebook')** dalam blok kode.
1. Pilih panah untuk menjalankan kodenya.
Anda akan melihat pernyataan yang dicetak:
Anda akan melihat pernyataan tercetak:
```output
hello notebook
```
![VS Code dengan notebook terbuka](../../../../2-Regression/1-Tools/images/notebook.jpg)
![VS Code dengan notebook terbuka](../../../../translated_images/id/notebook.4a3ee31f396b8832.webp)
Anda dapat menyisipkan kode Anda dengan komentar untuk mendokumentasikan notebook secara mandiri.
Anda dapat menyisipkan kode Anda dengan komentar untuk mendokumentasikan notebook sendiri.
✅ Pikirkan sejenak tentang betapa berbedanya lingkungan kerja pengembang web dibandingkan dengan ilmuwan data.
✅ Pikirkan sejenak bagaimana berbeda lingkungan kerja pengembang web dengan ilmuwan data.
## Memulai dengan Scikit-learn
## Jalankan Scikit-learn
Sekarang Python telah diatur di lingkungan lokal Anda, dan Anda merasa nyaman dengan Jupyter notebook, mari kita sama-sama merasa nyaman dengan Scikit-learn (diucapkan `sci` seperti dalam `science`). Scikit-learn menyediakan [API yang luas](https://scikit-learn.org/stable/modules/classes.html#api-ref) untuk membantu Anda melakukan tugas ML.
Sekarang Python sudah disiapkan di lingkungan lokal Anda, dan Anda sudah nyaman dengan Jupyter Notebooks, mari kita juga nyaman menggunakan Scikit-learn (baca `sci` seperti `science`). Scikit-learn menyediakan [API ekstensif](https://scikit-learn.org/stable/modules/classes.html#api-ref) untuk membantu Anda melakukan tugas ML.
Menurut [situs web mereka](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn adalah pustaka pembelajaran mesin sumber terbuka yang mendukung pembelajaran terawasi dan tidak terawasi. Pustaka ini juga menyediakan berbagai alat untuk fitting model, praproses data, pemilihan model, evaluasi, dan banyak utilitas lainnya."
Menurut [situs web mereka](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn adalah perpustakaan pembelajaran mesin sumber terbuka yang mendukung pembelajaran terawasi dan tak terawasi. Ia juga menyediakan berbagai alat untuk pemasangan model, prapengolahan data, pemilihan dan evaluasi model, dan banyak utilitas lainnya."
Dalam kursus ini, Anda akan menggunakan Scikit-learn dan alat lainnya untuk membangun model pembelajaran mesin untuk melakukan apa yang kita sebut tugas 'pembelajaran mesin tradisional'. Kami sengaja menghindari jaringan saraf dan pembelajaran mendalam, karena topik tersebut lebih baik dibahas dalam kurikulum 'AI untuk Pemula' kami yang akan datang.
Dalam kursus ini, Anda akan menggunakan Scikit-learn dan alat lain untuk membangun model pembelajaran mesin untuk melakukan apa yang kami sebut tugas 'pembelajaran mesin tradisional'. Kami sengaja menghindari neural network dan deep learning, karena itu dibahas lebih baik di kurikulum 'AI untuk Pemula' yang akan datang.
Scikit-learn membuatnya mudah untuk membangun model dan mengevaluasinya untuk digunakan. Pustaka ini terutama berfokus pada penggunaan data numerik dan berisi beberapa dataset siap pakai untuk digunakan sebagai alat pembelajaran. Pustaka ini juga mencakup model yang sudah dibuat sebelumnya untuk dicoba oleh siswa. Mari kita eksplorasi proses memuat data yang sudah dikemas dan menggunakan estimator bawaan untuk model ML pertama dengan Scikit-learn menggunakan data dasar.
Scikit-learn memudahkan membangun model dan mengevaluasinya untuk digunakan. Fokus utamanya menggunakan data numerik dan menyediakan beberapa dataset siap pakai sebagai alat pembelajaran. Ia juga termasuk model bawaan untuk dicoba oleh siswa. Mari jelajahi proses memuat data paket dan menggunakan estimator bawaan untuk model ML pertama dengan Scikit-learn menggunakan data dasar.
## Latihan - notebook Scikit-learn pertama Anda
> Tutorial ini terinspirasi oleh [contoh regresi linier](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) di situs web Scikit-learn.
> Tutorial ini terinspirasi oleh [contoh regresi linier](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) di situs Scikit-learn.
[![ML untuk pemula - Proyek Regresi Linier Pertama Anda dalam Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML untuk pemula - Proyek Regresi Linier Pertama Anda dalam Python")
> 🎥 Klik gambar di atas untuk video singkat tentang latihan ini.
[![ML untuk pemula - Proyek Regresi Linier Pertama Anda di Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML untuk pemula - Proyek Regresi Linier Pertama Anda di Python")
Di file _notebook.ipynb_ yang terkait dengan pelajaran ini, hapus semua sel dengan menekan ikon 'tempat sampah'.
> 🎥 Klik gambar di atas untuk video singkat yang menjelaskan latihan ini.
Di bagian ini, Anda akan bekerja dengan dataset kecil tentang diabetes yang sudah ada di Scikit-learn untuk tujuan pembelajaran. Bayangkan Anda ingin menguji pengobatan untuk pasien diabetes. Model Pembelajaran Mesin mungkin membantu Anda menentukan pasien mana yang akan merespons pengobatan dengan lebih baik, berdasarkan kombinasi variabel. Bahkan model regresi yang sangat dasar, ketika divisualisasikan, mungkin menunjukkan informasi tentang variabel yang dapat membantu Anda mengatur uji klinis teoritis Anda.
Dalam file _notebook.ipynb_ yang terkait dengan pelajaran ini, kosongkan semua sel dengan menekan ikon 'tempat sampah'.
✅ Ada banyak jenis metode regresi, dan pilihan metode tergantung pada jawaban yang Anda cari. Jika Anda ingin memprediksi tinggi badan yang mungkin untuk seseorang berdasarkan usia tertentu, Anda akan menggunakan regresi linier, karena Anda mencari **nilai numerik**. Jika Anda tertarik untuk mengetahui apakah jenis masakan tertentu harus dianggap vegan atau tidak, Anda mencari **penugasan kategori**, sehingga Anda akan menggunakan regresi logistik. Anda akan mempelajari lebih lanjut tentang regresi logistik nanti. Pikirkan sejenak tentang beberapa pertanyaan yang dapat Anda ajukan dari data, dan metode mana yang lebih sesuai.
Dalam bagian ini, Anda akan bekerja dengan dataset kecil tentang diabetes yang sudah terintegrasi dalam Scikit-learn untuk tujuan pembelajaran. Bayangkan Anda ingin menguji pengobatan untuk pasien diabetes. Model Pembelajaran Mesin dapat membantu menentukan pasien mana yang akan merespon lebih baik berdasarkan kombinasi variabel. Bahkan model regresi dasar, jika divisualisasikan, dapat menunjukkan informasi variabel yang membantu mengatur uji klinis teoretis Anda.
✅ Ada banyak jenis metode regresi, dan yang Anda pilih tergantung pada jawaban yang Anda cari. Jika ingin memprediksi tinggi badan yang mungkin untuk seseorang pada usia tertentu, gunakan regresi linier, karena Anda mencari **nilai numerik**. Jika ingin mengetahui apakah jenis masakan harus diklasifikasikan sebagai vegan atau tidak, Anda mencari **penugasan kategori**, sehingga Anda menggunakan regresi logistik. Anda akan belajar lebih tentang regresi logistik nanti. Pikirkan beberapa pertanyaan yang dapat diajukan pada data, dan metode mana yang lebih tepat digunakan.
Mari kita mulai tugas ini.
### Impor pustaka
Untuk tugas ini, kita akan mengimpor beberapa pustaka:
Untuk tugas ini kita akan mengimpor beberapa pustaka:
- **matplotlib**. Ini adalah [alat grafik](https://matplotlib.org/) yang berguna dan akan kita gunakan untuk membuat plot garis.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) adalah pustaka yang berguna untuk menangani data numerik dalam Python.
- **matplotlib**. Ini alat [grafik](https://matplotlib.org/) yang berguna dan akan kita gunakan untuk membuat plot garis.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) adalah pustaka berguna untuk menangani data numerik di Python.
- **sklearn**. Ini adalah pustaka [Scikit-learn](https://scikit-learn.org/stable/user_guide.html).
Impor beberapa pustaka untuk membantu tugas Anda.
1. Tambahkan impor dengan mengetik kode berikut:
1. Tambahkan import dengan mengetik kode berikut:
```python
import matplotlib.pyplot as plt
@ -122,24 +123,24 @@ Impor beberapa pustaka untuk membantu tugas Anda.
from sklearn import datasets, linear_model, model_selection
```
Di atas, Anda mengimpor `matplotlib`, `numpy`, dan Anda mengimpor `datasets`, `linear_model`, dan `model_selection` dari `sklearn`. `model_selection` digunakan untuk membagi data menjadi set pelatihan dan pengujian.
Di atas Anda mengimpor `matplotlib`, `numpy` dan mengimpor `datasets`, `linear_model` dan `model_selection` dari `sklearn`. `model_selection` digunakan untuk membagi data menjadi set pelatihan dan pengujian.
### Dataset diabetes
Dataset [diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) bawaan mencakup 442 sampel data tentang diabetes, dengan 10 variabel fitur, beberapa di antaranya meliputi:
Dataset bawaan [diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) berisi 442 sampel data diabetes, dengan 10 variabel fitur, beberapa di antaranya:
- age: usia dalam tahun
- bmi: indeks massa tubuh
- bp: tekanan darah rata-rata
- s1 tc: T-Cells (jenis sel darah putih)
- s1 tc: Sel-T (jenis sel darah putih)
✅ Dataset ini mencakup konsep 'jenis kelamin' sebagai variabel fitur yang penting untuk penelitian tentang diabetes. Banyak dataset medis mencakup jenis klasifikasi biner seperti ini. Pikirkan sejenak tentang bagaimana kategorisasi seperti ini mungkin mengecualikan bagian tertentu dari populasi dari pengobatan.
✅ Dataset ini menyertakan konsep 'jenis kelamin' sebagai variabel fitur penting untuk penelitian diabetes. Banyak dataset medis menyertakan klasifikasi biner seperti ini. Pikirkan bagaimana kategorisasi seperti ini dapat mengecualikan bagian populasi tertentu dari pengobatan.
Sekarang, muat data X dan y.
> 🎓 Ingat, ini adalah pembelajaran terawasi, dan kita membutuhkan target 'y' yang bernama.
> 🎓 Ingat, ini pembelajaran terawasi, dan kita membutuhkan target bernama 'y'.
Di sel kode baru, muat dataset diabetes dengan memanggil `load_diabetes()`. Input `return_X_y=True` menandakan bahwa `X` akan menjadi matriks data, dan `y` akan menjadi target regresi.
Di sel kode baru, muat dataset diabetes dengan memanggil `load_diabetes()`. Input `return_X_y=True` menandakan bahwa `X` akan menjadi matriks data, dan `y` target regresi.
1. Tambahkan beberapa perintah print untuk menunjukkan bentuk matriks data dan elemen pertamanya:
@ -149,9 +150,9 @@ Di sel kode baru, muat dataset diabetes dengan memanggil `load_diabetes()`. Inpu
print(X[0])
```
Apa yang Anda dapatkan sebagai respons adalah tuple. Anda menetapkan dua nilai pertama dari tuple ke `X` dan `y` masing-masing. Pelajari lebih lanjut [tentang tuple](https://wikipedia.org/wiki/Tuple).
Apa yang Anda dapatkan sebagai respons adalah tuple. Anda menetapkan dua nilai pertama tuple ke `X` dan `y` masing-masing. Pelajari lebih lanjut [tentang tuple](https://wikipedia.org/wiki/Tuple).
Anda dapat melihat bahwa data ini memiliki 442 item yang berbentuk array dengan 10 elemen:
Anda dapat melihat data ini memiliki 442 item yang berbentuk array dengan 10 elemen:
```text
(442, 10)
@ -159,9 +160,9 @@ Di sel kode baru, muat dataset diabetes dengan memanggil `load_diabetes()`. Inpu
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ Pikirkan sejenak tentang hubungan antara data dan target regresi. Regresi linier memprediksi hubungan antara fitur X dan variabel target y. Bisakah Anda menemukan [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) untuk dataset diabetes dalam dokumentasi? Apa yang ditunjukkan oleh dataset ini, mengingat targetnya?
✅ Pikirkan hubungan antara data dan target regresi. Regresi linier memprediksi hubungan antara fitur X dan variabel target y. Bisakah Anda menemukan [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) untuk dataset diabetes dalam dokumentasi? Apa yang ditunjukkan dataset ini, berdasarkan target tersebut?
2. Selanjutnya, pilih bagian dari dataset ini untuk dipetakan dengan memilih kolom ke-3 dari dataset. Anda dapat melakukannya dengan menggunakan operator `:` untuk memilih semua baris, lalu memilih kolom ke-3 menggunakan indeks (2). Anda juga dapat mengubah bentuk data menjadi array 2D - seperti yang diperlukan untuk pemetaan - dengan menggunakan `reshape(n_rows, n_columns)`. Jika salah satu parameter adalah -1, dimensi yang sesuai dihitung secara otomatis.
2. Selanjutnya, pilih sebagian dari dataset ini untuk dibuatkan plot dengan memilih kolom ke-3 dataset. Anda dapat melakukan ini dengan menggunakan operator `:` untuk memilih semua baris, lalu memilih kolom ke-3 dengan indeks (2). Anda juga dapat mengubah bentuk data menjadi array 2D - sesuai kebutuhan plotting - dengan menggunakan `reshape(n_rows, n_columns)`. Jika salah satu parameternya -1, dimensi yang sesuai dihitung secara otomatis.
```python
X = X[:, 2]
@ -170,28 +171,28 @@ Di sel kode baru, muat dataset diabetes dengan memanggil `load_diabetes()`. Inpu
✅ Kapan saja, cetak data untuk memeriksa bentuknya.
3. Sekarang setelah Anda memiliki data yang siap untuk dipetakan, Anda dapat melihat apakah mesin dapat membantu menentukan pembagian logis antara angka-angka dalam dataset ini. Untuk melakukan ini, Anda perlu membagi data (X) dan target (y) menjadi set pengujian dan pelatihan. Scikit-learn memiliki cara yang sederhana untuk melakukan ini; Anda dapat membagi data pengujian Anda pada titik tertentu.
3. Sekarang data sudah siap untuk diplot, lihat apakah mesin dapat membantu menentukan pemisahan logis antara angka dalam dataset ini. Untuk melakukan ini, Anda perlu membagi data (X) dan target (y) ke dalam set pengujian dan pelatihan. Scikit-learn menyediakan cara mudah untuk melakukan ini; Anda dapat membagi data pengujian pada titik tertentu.
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. Sekarang Anda siap untuk melatih model Anda! Muat model regresi linier dan latih dengan set pelatihan X dan y Anda menggunakan `model.fit()`:
4. Sekarang Anda siap melatih model! Muat model regresi linier dan latih dengan set pelatihan X dan y menggunakan `model.fit()`:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
`model.fit()` adalah fungsi yang akan sering Anda lihat di banyak pustaka ML seperti TensorFlow.
`model.fit()` adalah fungsi yang akan Anda temui di banyak perpustakaan ML seperti TensorFlow
5. Kemudian, buat prediksi menggunakan data pengujian, dengan menggunakan fungsi `predict()`. Ini akan digunakan untuk menggambar garis antara kelompok data.
5. Kemudian, buat prediksi menggunakan data uji, dengan fungsi `predict()`. Ini akan digunakan untuk menggambar garis di antara kelompok data
```python
y_pred = model.predict(X_test)
```
6. Sekarang saatnya untuk menunjukkan data dalam plot. Matplotlib adalah alat yang sangat berguna untuk tugas ini. Buat scatterplot dari semua data pengujian X dan y, dan gunakan prediksi untuk menggambar garis di tempat yang paling sesuai, di antara pengelompokan data model.
6. Sekarang saatnya menampilkan data dalam plot. Matplotlib adalah alat yang sangat berguna untuk tugas ini. Buat scatterplot dari semua data uji X dan y, dan gunakan prediksi untuk menggambar garis di tempat paling tepat, di antara pengelompokan data model.
```python
plt.scatter(X_test, y_test, color='black')
@ -202,29 +203,32 @@ Di sel kode baru, muat dataset diabetes dengan memanggil `load_diabetes()`. Inpu
plt.show()
```
![scatterplot yang menunjukkan titik data tentang diabetes](../../../../2-Regression/1-Tools/images/scatterplot.png)
✅ Pikirkan sebentar tentang apa yang sedang terjadi di sini. Sebuah garis lurus melewati banyak titik data kecil, tetapi apa sebenarnya yang sedang dilakukan? Bisakah Anda melihat bagaimana Anda seharusnya dapat menggunakan garis ini untuk memprediksi di mana titik data baru yang belum terlihat seharusnya berada dalam hubungannya dengan sumbu y pada plot? Cobalah untuk menjelaskan penggunaan praktis dari model ini.
![scatterplot yang menunjukkan titik data tentang diabetes](../../../../translated_images/id/scatterplot.ad8b356bcbb33be6.webp)
Selamat, Anda telah membangun model regresi linear pertama Anda, membuat prediksi dengannya, dan menampilkannya dalam sebuah plot!
✅ Pikirkan sejenak tentang apa yang sedang terjadi di sini. Sebuah garis lurus berjalan melalui banyak titik data kecil, tapi sebenarnya apa yang dilakukannya? Bisakah Anda melihat bagaimana seharusnya Anda bisa menggunakan garis ini untuk memprediksi di mana titik data baru yang belum terlihat harus ditempatkan relatif terhadap sumbu y pada plot? Cobalah untuk mengungkapkan dalam kata-kata kegunaan praktis dari model ini.
Selamat, Anda telah membangun model regresi linier pertama Anda, membuat prediksi dengannya, dan menampilkannya dalam sebuah plot!
---
## 🚀Tantangan
Plot variabel yang berbeda dari dataset ini. Petunjuk: edit baris ini: `X = X[:,2]`. Berdasarkan target dataset ini, apa yang dapat Anda temukan tentang perkembangan diabetes sebagai penyakit?
## [Kuis setelah kuliah](https://ff-quizzes.netlify.app/en/ml/)
Plot variabel yang berbeda dari dataset ini. Petunjuk: edit baris ini: `X = X[:,2]`. Mengingat target dari dataset ini, apa yang dapat Anda temukan tentang perkembangan diabetes sebagai penyakit?
## [Kuis pasca kuliah](https://ff-quizzes.netlify.app/en/ml/)
## Tinjauan & Studi Mandiri
## Tinjauan & Belajar Mandiri
Dalam tutorial ini, Anda bekerja dengan regresi linear sederhana, bukan regresi univariat atau regresi multivariat. Bacalah sedikit tentang perbedaan antara metode-metode ini, atau lihat [video ini](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef).
Dalam tutorial ini, Anda bekerja dengan regresi linier sederhana, bukan regresi linier univariat atau multipel. Bacalah sedikit tentang perbedaan antara metode-metode ini, atau lihat [video ini](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)
Pelajari lebih lanjut tentang konsep regresi dan pikirkan tentang jenis pertanyaan apa yang dapat dijawab dengan teknik ini. Ikuti [tutorial ini](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) untuk memperdalam pemahaman Anda.
Baca lebih lanjut tentang konsep regresi dan pikirkan jenis pertanyaan apa yang bisa dijawab dengan teknik ini. Ikuti [tutorial ini](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) untuk memperdalam pemahaman Anda.
## Tugas
[Dataset yang berbeda](assignment.md)
[Dataset berbeda](assignment.md)
---
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,58 +1,58 @@
# Membangun Model Regresi Menggunakan Scikit-learn: Persiapkan dan Visualisasikan Data
# Membangun model regresi menggunakan Scikit-learn: menyiapkan dan memvisualisasikan data
![Infografis visualisasi data](../../../../2-Regression/2-Data/images/data-visualization.png)
![Infografis visualisasi data](../../../../translated_images/id/data-visualization.54e56dded7c1a804.webp)
Infografis oleh [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Kuis Pra-Pelajaran](https://ff-quizzes.netlify.app/en/ml/)
## [Kuis sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/)
> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## Pendahuluan
Setelah Anda memiliki alat yang diperlukan untuk mulai membangun model pembelajaran mesin dengan Scikit-learn, Anda siap untuk mulai mengajukan pertanyaan terhadap data Anda. Saat bekerja dengan data dan menerapkan solusi ML, sangat penting untuk memahami cara mengajukan pertanyaan yang tepat agar dapat memanfaatkan potensi dataset Anda dengan benar.
Sekarang Anda sudah siap dengan alat yang Anda butuhkan untuk mulai menangani pembuatan model pembelajaran mesin dengan Scikit-learn, Anda siap untuk mulai mengajukan pertanyaan pada data Anda. Saat Anda bekerja dengan data dan menerapkan solusi ML, sangat penting untuk memahami cara mengajukan pertanyaan yang tepat agar dapat membuka potensi dataset Anda secara benar.
Dalam pelajaran ini, Anda akan belajar:
- Cara mempersiapkan data Anda untuk membangun model.
- Cara menyiapkan data Anda untuk pembangunan model.
- Cara menggunakan Matplotlib untuk visualisasi data.
- Cara menggunakan Seaborn untuk visualisasi data yang lebih ekspresif.
## Mengajukan Pertanyaan yang Tepat pada Data Anda
## Mengajukan pertanyaan yang tepat dari data Anda
Pertanyaan yang ingin Anda jawab akan menentukan jenis algoritma ML yang akan Anda gunakan. Kualitas jawaban yang Anda dapatkan sangat bergantung pada sifat data Anda.
Pertanyaan yang perlu Anda jawab akan menentukan jenis algoritma ML yang akan Anda gunakan. Dan kualitas jawaban yang Anda dapatkan sangat bergantung pada sifat data Anda.
Lihatlah [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang disediakan untuk pelajaran ini. Anda dapat membuka file .csv ini di VS Code. Sekilas, Anda akan segera melihat bahwa ada data kosong dan campuran antara string dan data numerik. Ada juga kolom aneh bernama 'Package' di mana datanya adalah campuran antara 'sacks', 'bins', dan nilai lainnya. Data ini, sebenarnya, cukup berantakan.
Lihatlah [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang disediakan untuk pelajaran ini. Anda bisa membuka file .csv ini di VS Code. Sekilas menunjukkan ada kekosongan dan campuran data string dan numerik. Ada juga kolom aneh bernama 'Package' di mana data merupakan campuran antara 'sacks', 'bins' dan nilai lainnya. Data ini sebenarnya agak berantakan.
[![ML untuk Pemula - Cara Menganalisis dan Membersihkan Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML untuk Pemula - Cara Menganalisis dan Membersihkan Dataset")
[![ML untuk pemula - Cara Menganalisis dan Membersihkan Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML untuk pemula - Cara Menganalisis dan Membersihkan Dataset")
> 🎥 Klik gambar di atas untuk video singkat tentang persiapan data untuk pelajaran ini.
> 🎥 Klik gambar di atas untuk video singkat yang membahas cara menyiapkan data untuk pelajaran ini.
Faktanya, sangat jarang mendapatkan dataset yang sepenuhnya siap digunakan untuk membuat model ML langsung. Dalam pelajaran ini, Anda akan belajar cara mempersiapkan dataset mentah menggunakan pustaka Python standar. Anda juga akan mempelajari berbagai teknik untuk memvisualisasikan data.
Sebenarnya, jarang sekali mendapatkan dataset yang benar-benar siap digunakan langsung untuk membuat model ML. Dalam pelajaran ini, Anda akan belajar cara menyiapkan dataset mentah menggunakan pustaka standar Python. Anda juga akan mempelajari berbagai teknik untuk memvisualisasikan data.
## Studi Kasus: 'Pasar Labu'
## Studi kasus: 'pasar labu'
Dalam folder ini, Anda akan menemukan file .csv di folder root `data` bernama [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang mencakup 1757 baris data tentang pasar labu, yang dikelompokkan berdasarkan kota. Ini adalah data mentah yang diekstrak dari [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang didistribusikan oleh Departemen Pertanian Amerika Serikat.
Dalam folder ini Anda akan menemukan file .csv di folder root `data` bernama [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang berisikan 1757 baris data tentang pasar labu, disortir berdasarkan kota. Ini adalah data mentah yang diambil dari [Laporan Standar Pasar Terminal Hasil Khusus](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang didistribusikan oleh Departemen Pertanian Amerika Serikat.
### Mempersiapkan Data
### Menyiapkan data
Data ini berada di domain publik. Data ini dapat diunduh dalam banyak file terpisah, per kota, dari situs web USDA. Untuk menghindari terlalu banyak file terpisah, kami telah menggabungkan semua data kota ke dalam satu spreadsheet, sehingga kami telah _mempersiapkan_ data sedikit. Selanjutnya, mari kita lihat lebih dekat data tersebut.
Data ini berada di domain publik. Bisa diunduh dalam banyak file terpisah per kota dari situs USDA. Untuk menghindari terlalu banyak file terpisah, kami telah menggabungkan semua data kota ke dalam satu spreadsheet, sehingga kami sudah _menyiapkan_ data tersebut sedikit. Selanjutnya, mari kita lihat lebih dekat data tersebut.
### Data Labu - Kesimpulan Awal
### Data labu - kesimpulan awal
Apa yang Anda perhatikan tentang data ini? Anda sudah melihat bahwa ada campuran string, angka, data kosong, dan nilai aneh yang perlu Anda pahami.
Apa yang Anda perhatikan dari data ini? Anda sudah melihat ada campuran string, angka, kekosongan, dan nilai aneh yang perlu Anda pahami.
Pertanyaan apa yang dapat Anda ajukan pada data ini menggunakan teknik Regresi? Bagaimana dengan "Memprediksi harga labu yang dijual selama bulan tertentu". Melihat kembali data tersebut, ada beberapa perubahan yang perlu Anda lakukan untuk membuat struktur data yang diperlukan untuk tugas ini.
Pertanyaan apa yang bisa Anda ajukan dari data ini, menggunakan teknik Regresi? Bagaimana dengan "Memprediksi harga labu yang dijual selama bulan tertentu". Melihat kembali data, ada beberapa perubahan yang perlu dilakukan untuk membuat struktur data yang diperlukan untuk tugas ini.
## Latihan - menganalisis data labu
## Latihan - Analisis Data Labu
Mari gunakan [Pandas](https://pandas.pydata.org/), (nama ini berasal dari `Python Data Analysis`) alat yang sangat berguna untuk membentuk data, untuk menganalisis dan menyiapkan data labu ini.
Mari gunakan [Pandas](https://pandas.pydata.org/), (nama ini berasal dari `Python Data Analysis`) alat yang sangat berguna untuk membentuk data, untuk menganalisis dan mempersiapkan data labu ini.
### Pertama, periksa tanggal yang hilang
### Pertama, Periksa Tanggal yang Hilang
Pertama Anda perlu mengambil langkah untuk memeriksa tanggal yang hilang:
Anda pertama-tama perlu mengambil langkah-langkah untuk memeriksa tanggal yang hilang:
1. Konversikan tanggal ke format bulan (ini adalah tanggal AS, jadi formatnya adalah `MM/DD/YYYY`).
2. Ekstrak bulan ke kolom baru.
1. Ubah tanggal ke format bulan (ini adalah tanggal AS, jadi formatnya `MM/DD/YYYY`).
2. Ekstrak bulan menjadi kolom baru.
Buka file _notebook.ipynb_ di Visual Studio Code dan impor spreadsheet ke dalam dataframe Pandas baru.
@ -66,26 +66,26 @@ Buka file _notebook.ipynb_ di Visual Studio Code dan impor spreadsheet ke dalam
✅ Fungsi apa yang akan Anda gunakan untuk melihat lima baris terakhir?
1. Periksa apakah ada data yang hilang dalam dataframe saat ini:
1. Periksa apakah ada data yang hilang di dataframe saat ini:
```python
pumpkins.isnull().sum()
```
Ada data yang hilang, tetapi mungkin tidak akan menjadi masalah untuk tugas ini.
Ada data yang hilang, tetapi mungkin tidak berpengaruh untuk tugas ini.
1. Untuk membuat dataframe Anda lebih mudah digunakan, pilih hanya kolom yang Anda butuhkan, menggunakan fungsi `loc` yang mengekstrak dari dataframe asli sekelompok baris (diberikan sebagai parameter pertama) dan kolom (diberikan sebagai parameter kedua). Ekspresi `:` dalam kasus ini berarti "semua baris".
1. Untuk memudahkan pengolahan dataframe Anda, pilih hanya kolom yang Anda butuhkan, menggunakan fungsi `loc` yang mengekstrak dari dataframe asli sekumpulan baris (dilewatkan sebagai parameter pertama) dan kolom (parameter kedua). Ekspresi `:` dalam contoh di bawah berarti "semua baris".
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.loc[:, columns_to_select]
```
### Kedua, Tentukan Harga Rata-rata Labu
### Kedua, tentukan harga rata-rata labu
Pikirkan tentang cara menentukan harga rata-rata labu dalam bulan tertentu. Kolom apa yang akan Anda pilih untuk tugas ini? Petunjuk: Anda akan membutuhkan 3 kolom.
Pikirkan cara menentukan harga rata-rata labu dalam bulan tertentu. Kolom apa yang akan Anda pilih untuk tugas ini? Petunjuk: Anda akan membutuhkan 3 kolom.
Solusi: ambil rata-rata dari kolom `Low Price` dan `High Price` untuk mengisi kolom Harga baru, dan konversikan kolom Tanggal untuk hanya menampilkan bulan. Untungnya, menurut pemeriksaan di atas, tidak ada data yang hilang untuk tanggal atau harga.
Solusi: ambil rata-rata dari kolom `Low Price` dan `High Price` untuk mengisi kolom Harga baru, dan ubah kolom Date hanya menampilkan bulan. Untungnya, menurut pemeriksaan di atas, tidak ada data yang hilang untuk tanggal atau harga.
1. Untuk menghitung rata-rata, tambahkan kode berikut:
@ -96,23 +96,23 @@ Solusi: ambil rata-rata dari kolom `Low Price` dan `High Price` untuk mengisi ko
```
Silakan cetak data apa pun yang ingin Anda periksa menggunakan `print(month)`.
Jangan ragu untuk mencetak data apa pun yang ingin Anda periksa menggunakan `print(month)`.
2. Sekarang, salin data yang telah dikonversi ke dataframe Pandas baru:
2. Sekarang, salin data yang sudah diubah ke dataframe Pandas baru:
```python
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
```
Mencetak dataframe Anda akan menunjukkan dataset yang bersih dan rapi yang dapat Anda gunakan untuk membangun model regresi baru Anda.
Mencetak dataframe Anda akan menunjukkan dataset bersih dan rapi yang bisa digunakan untuk membangun model regresi Anda.
### Tapi Tunggu! Ada Sesuatu yang Aneh di Sini
### Tapi tunggu! Ada yang ganjil di sini
Jika Anda melihat kolom `Package`, labu dijual dalam banyak konfigurasi yang berbeda. Beberapa dijual dalam ukuran '1 1/9 bushel', beberapa dalam ukuran '1/2 bushel', beberapa per labu, beberapa per pon, dan beberapa dalam kotak besar dengan lebar yang bervariasi.
Jika Anda lihat kolom `Package`, labu dijual dalam berbagai konfigurasi berbeda. Ada yang dijual dalam ukuran '1 1/9 bushel', ada yang '1/2 bushel', beberapa per labu, beberapa per pon, dan ada yang dalam kotak besar dengan lebar bervariasi.
> Labu tampaknya sangat sulit untuk ditimbang secara konsisten
Menggali data asli, menarik bahwa apa pun dengan `Unit of Sale` yang sama dengan 'EACH' atau 'PER BIN' juga memiliki tipe `Package` per inci, per bin, atau 'each'. Labu tampaknya sangat sulit untuk ditimbang secara konsisten, jadi mari kita memfilter mereka dengan memilih hanya labu dengan string 'bushel' di kolom `Package`.
Melihat data asli, menarik bahwa apa pun dengan `Unit of Sale` bernilai 'EACH' atau 'PER BIN' juga memiliki jenis `Package` per inci, per bin, atau 'each'. Labu memang sulit ditimbang secara konsisten, jadi mari kita saring dengan memilih hanya labu yang memiliki string 'bushel' di kolom `Package` mereka.
1. Tambahkan filter di bagian atas file, di bawah impor .csv awal:
@ -120,11 +120,11 @@ Menggali data asli, menarik bahwa apa pun dengan `Unit of Sale` yang sama dengan
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
Jika Anda mencetak data sekarang, Anda dapat melihat bahwa Anda hanya mendapatkan sekitar 415 baris data yang berisi labu berdasarkan bushel.
Jika Anda mencetak data sekarang, Anda akan melihat bahwa Anda hanya mendapatkan sekitar 415 baris data yang berisi labu per bushel.
### Tapi Tunggu! Ada Satu Hal Lagi yang Harus Dilakukan
### Tapi tunggu! Ada satu hal lagi yang harus dilakukan
Apakah Anda memperhatikan bahwa jumlah bushel bervariasi per baris? Anda perlu menormalkan harga sehingga Anda menunjukkan harga per bushel, jadi lakukan beberapa perhitungan untuk standarisasi.
Apakah Anda menyadari bahwa jumlah bushel bervariasi per baris? Anda perlu menormalkan harga sehingga menampilkan harga per bushel, jadi lakukan beberapa perhitungan untuk menstandarisasinya.
1. Tambahkan baris ini setelah blok yang membuat dataframe new_pumpkins:
@ -134,29 +134,29 @@ Apakah Anda memperhatikan bahwa jumlah bushel bervariasi per baris? Anda perlu m
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
```
✅ Menurut [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), berat bushel tergantung pada jenis hasil panen, karena ini adalah pengukuran volume. "Satu bushel tomat, misalnya, seharusnya memiliki berat 56 pon... Daun dan sayuran mengambil lebih banyak ruang dengan berat lebih sedikit, sehingga satu bushel bayam hanya memiliki berat 20 pon." Semuanya cukup rumit! Mari kita tidak repot-repot membuat konversi bushel-ke-pon, dan sebagai gantinya harga berdasarkan bushel. Semua studi tentang bushel labu ini, bagaimanapun, menunjukkan betapa pentingnya memahami sifat data Anda!
✅ Menurut [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), berat bushel tergantung jenis produk, karena ini adalah ukuran volume. "Satu bushel tomat, misalnya, seharusnya beratnya 56 pon... Daun dan sayuran hijau mengisi lebih banyak ruang dengan berat lebih sedikit, jadi satu bushel bayam hanya sekitar 20 pon." Semuanya cukup rumit! Mari kita tidak repot membuat konversi bushel ke pon, dan harga berdasarkan bushel saja. Studi tentang bushel labu ini menunjukkan betapa pentingnya memahami sifat data Anda!
Sekarang, Anda dapat menganalisis harga per unit berdasarkan pengukuran bushel mereka. Jika Anda mencetak data sekali lagi, Anda dapat melihat bagaimana data tersebut telah distandarisasi.
Sekarang Anda bisa menganalisis harga per unit berdasarkan ukuran bushelnya. Jika Anda mencetak data sekali lagi, Anda bisa melihat bagaimana data tersebut sudah distandarisasi.
✅ Apakah Anda memperhatikan bahwa labu yang dijual berdasarkan setengah bushel sangat mahal? Bisakah Anda mencari tahu alasannya? Petunjuk: labu kecil jauh lebih mahal daripada yang besar, mungkin karena ada lebih banyak labu kecil per bushel, mengingat ruang kosong yang tidak terpakai yang diambil oleh satu labu besar untuk pai.
✅ Apakah Anda menyadari labu yang dijual per setengah bushel sangat mahal? Bisakah Anda mencari tahu mengapa? Petunjuk: labu kecil jauh lebih mahal daripada yang besar, mungkin karena ada lebih banyak jumlah labu kecil per bushel, mengingat ruang tidak terpakai yang diambil oleh satu labu pie besar berongga.
## Strategi Visualisasi
Bagian dari peran ilmuwan data adalah menunjukkan kualitas dan sifat data yang mereka kerjakan. Untuk melakukan ini, mereka sering membuat visualisasi yang menarik, seperti plot, grafik, dan diagram, yang menunjukkan berbagai aspek data. Dengan cara ini, mereka dapat secara visual menunjukkan hubungan dan celah yang sulit ditemukan.
Bagian dari peran ilmuwan data adalah untuk menunjukkan kualitas dan sifat data yang mereka gunakan. Untuk melakukan ini, mereka sering membuat visualisasi menarik, atau plot, grafik, dan diagram, yang menunjukkan berbagai aspek data. Dengan cara ini, mereka dapat secara visual menunjukkan hubungan dan celah yang sulit ditemukan dengan cara lain.
[![ML untuk Pemula - Cara Memvisualisasikan Data dengan Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML untuk Pemula - Cara Memvisualisasikan Data dengan Matplotlib")
[![ML untuk pemula - Cara Memvisualisasikan Data dengan Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML untuk pemula - Cara Memvisualisasikan Data dengan Matplotlib")
> 🎥 Klik gambar di atas untuk video singkat tentang memvisualisasikan data untuk pelajaran ini.
> 🎥 Klik gambar di atas untuk video singkat yang membahas visualisasi data untuk pelajaran ini.
Visualisasi juga dapat membantu menentukan teknik pembelajaran mesin yang paling sesuai untuk data. Sebuah scatterplot yang tampaknya mengikuti garis, misalnya, menunjukkan bahwa data tersebut adalah kandidat yang baik untuk latihan regresi linier.
Visualisasi juga dapat membantu menentukan teknik pembelajaran mesin yang paling cocok untuk data. Sebuah scatterplot yang tampak mengikuti garis, misalnya, menunjukkan bahwa data tersebut adalah kandidat bagus untuk latihan regresi linier.
Salah satu pustaka visualisasi data yang bekerja dengan baik di Jupyter notebook adalah [Matplotlib](https://matplotlib.org/) (yang juga Anda lihat dalam pelajaran sebelumnya).
Salah satu pustaka visualisasi data yang bekerja baik di Jupyter notebook adalah [Matplotlib](https://matplotlib.org/) (yang juga Anda lihat di pelajaran sebelumnya).
> Dapatkan lebih banyak pengalaman dengan visualisasi data dalam [tutorial ini](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
> Dapatkan lebih banyak pengalaman dengan visualisasi data di [tutorial-tutorial ini](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
## Latihan - Bereksperimen dengan Matplotlib
## Latihan - bereksperimen dengan Matplotlib
Cobalah membuat beberapa plot dasar untuk menampilkan dataframe baru yang baru saja Anda buat. Apa yang akan ditampilkan oleh plot garis dasar?
Cobalah membuat beberapa plot dasar untuk menampilkan dataframe baru yang baru saja Anda buat. Apa yang akan ditampilkan plot garis dasar?
1. Impor Matplotlib di bagian atas file, di bawah impor Pandas:
@ -165,7 +165,7 @@ Cobalah membuat beberapa plot dasar untuk menampilkan dataframe baru yang baru s
```
1. Jalankan ulang seluruh notebook untuk menyegarkan.
1. Di bagian bawah notebook, tambahkan sel untuk memplot data sebagai kotak:
1. Di bagian bawah notebook, tambahkan sel untuk membuat plot data sebagai box:
```python
price = new_pumpkins.Price
@ -174,38 +174,113 @@ Cobalah membuat beberapa plot dasar untuk menampilkan dataframe baru yang baru s
plt.show()
```
![Scatterplot yang menunjukkan hubungan harga dengan bulan](../../../../2-Regression/2-Data/images/scatterplot.png)
![Sebuah scatterplot yang menunjukkan hubungan harga dengan bulan](../../../../translated_images/id/scatterplot.b6868f44cbd2051c.webp)
Apakah ini plot yang berguna? Apakah ada sesuatu yang mengejutkan Anda?
Ini tidak terlalu berguna karena hanya menampilkan data Anda sebagai sebaran titik dalam bulan tertentu.
Ini tidak terlalu berguna karena hanya menampilkan data Anda sebagai titik-titik yang tersebar di bulan tertentu.
### Buatlah Berguna
### Membuatnya berguna
Untuk mendapatkan grafik yang menampilkan data yang berguna, Anda biasanya perlu mengelompokkan data dengan cara tertentu. Mari coba membuat plot di mana sumbu y menunjukkan bulan dan data menunjukkan distribusi data.
Untuk mendapatkan grafik yang menampilkan data berguna, biasanya Anda perlu mengelompokkan data. Mari coba buat plot di mana sumbu y menunjukkan bulan dan datanya menunjukkan distribusi data.
1. Tambahkan sel untuk membuat grafik batang yang dikelompokkan:
1. Tambahkan sel untuk membuat diagram batang kelompok:
```python
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
plt.ylabel("Pumpkin Price")
```
![Grafik batang yang menunjukkan hubungan harga dengan bulan](../../../../2-Regression/2-Data/images/barchart.png)
![Diagram batang yang menunjukkan hubungan harga dengan bulan](../../../../translated_images/id/barchart.a833ea9194346d76.webp)
Ini adalah visualisasi data yang lebih berguna! Tampaknya menunjukkan bahwa harga tertinggi untuk labu terjadi pada bulan September dan Oktober. Apakah ini sesuai dengan harapan Anda? Mengapa atau mengapa tidak?
## Latihan - bereksperimen dengan Seaborn
Matplotlib sangat kuat, tetapi bisa membutuhkan banyak kode untuk menghasilkan grafik yang rapi. [Seaborn](https://seaborn.pydata.org/) adalah perpustakaan yang dibangun _di atas_ Matplotlib yang dirancang untuk visualisasi data statistik. Ia bekerja langsung dengan dataframe Pandas, menerapkan gaya default yang menarik, dan memungkinkan Anda membuat plot informatif dengan kode jauh lebih sedikit. Karena Seaborn mengembalikan objek Matplotlib, Anda masih bisa menggunakan semua yang sudah Anda ketahui tentang Matplotlib untuk menyempurnakan hasilnya.
> Jika Anda belum memasang Seaborn, pasang dengan `pip install seaborn`.
1. Impor Seaborn di bagian atas notebook, di bawah impor lainnya. Konvensinya diimpor sebagai `sns`:
```python
import seaborn as sns
```
### Scatter plot untuk menampilkan hubungan
Bagian besar dari eksplorasi data sebelum membangun model adalah mencari _hubungan_ antara variabel. [Scatter plot](https://en.wikipedia.org/wiki/Scatter_plot) adalah salah satu alat terbaik untuk ini: jika titik-titik tampak mengikuti garis, dua variabel tersebut mungkin berkorelasi, yang merupakan tanda baik bahwa model regresi linier bisa berhasil.
1. Buat ulang scatter plot harga terhadap bulan dari sebelumnya, kali ini menggunakan [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) Seaborn (plot relasional), yang bekerja langsung dengan kolom dataframe Anda:
```python
sns.relplot(x="Price", y="Month", data=new_pumpkins)
```
![Scatterplot Seaborn yang menunjukkan hubungan harga dengan bulan](../../../../translated_images/id/relplot.a03837d8f0329cec.webp)
Perhatikan bagaimana Anda melewatkan _nama kolom_ dan dataframe, dan Seaborn menangani label sumbu untuk Anda.
2. Anda dapat beralih ke plot garis dengan melewatkan `kind="line"`. Seaborn bahkan menggambar pita bayangan yang menunjukkan interval kepercayaan di sekitar garis:
```python
sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
```
![Plot garis Seaborn yang menunjukkan hubungan harga dengan bulan](../../../../translated_images/id/lineplot.f9034ba47b1e30ee.webp)
Data ini cukup berisik, jadi plot garis bukan pilihan paling jelas di sini — tetapi ini menunjukkan betapa mudahnya Anda mengubah jenis grafik di Seaborn.
### Diagram batang untuk menunjukkan distribusi
Sebelumnya Anda mengelompokkan data secara manual untuk membuat diagram batang dengan Matplotlib. Seaborn's [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (plot kategorikal) dapat melakukan pengelompokan dan agregasi untuk Anda. Secara default `kind="bar"` menampilkan rata-rata dari setiap kategori bersama dengan garis hitam yang menunjukkan interval kepercayaan.
1. Buat diagram batang harga rata-rata per bulan:
```python
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
```
![A Seaborn bar chart showing the price distribution per month](../../../../translated_images/id/catplot.e73fc35fdf96242b.webp)
Ini mengonfirmasi apa yang Anda lihat dengan Matplotlib — harga mencapai puncak sekitar September dan Oktober — tetapi Seaborn juga memvisualisasikan seberapa banyak harga _bervariasi_ dalam setiap bulan.
### Heatmap untuk menunjukkan korelasi
Scatter plot membandingkan dua variabel sekaligus. Ketika Anda memiliki beberapa kolom numerik, sebuah [heatmap](https://en.wikipedia.org/wiki/Heat_map) memungkinkan Anda melihat kekuatan hubungan antar _setiap_ pasangan kolom sekaligus. Ini adalah cara umum untuk melihat fitur mana yang paling berkorelasi sebelum memilih yang akan digunakan dalam model (dan jenis grafik yang sama kemudian digunakan untuk menampilkan matriks kebingungan dalam klasifikasi).
1. Bangun matriks korelasi dengan Pandas, lalu gambar menggunakan Seaborn's [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html). Opsi `annot=True` mencetak nilai korelasi pada setiap sel:
```python
correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
sns.heatmap(correlations, annot=True, cmap="coolwarm")
```
![A Seaborn heatmap showing correlations between the numeric columns](../../../../translated_images/id/heatmap.bd98dce43b404c57.webp)
Nilai yang mendekati `1` (atau `-1`) berarti kolom-kolom tersebut sangat berkorelasi secara _linear_. Perhatikan bagaimana `Low Price` dan `High Price` hampir berkorelasi sempurna. `Month`, di sisi lain, hanya menunjukkan korelasi linear yang lemah dengan harga — meskipun diagram batang di atas mengungkapkan puncak musiman yang jelas di September dan Oktober. Itu pelajaran penting: koefisien korelasi hanya mengukur hubungan _garis lurus_, jadi bisa melewatkan pola musiman atau pola non-linear lainnya. ✅ Mengapa berguna melihat baik heatmap *dan* grafik seperti diagram batang sebelum memutuskan kolom mana yang akan digunakan?
### Matplotlib atau Seaborn?
Kedua perpustakaan ini patut diketahui:
- **Matplotlib** memberi Anda kontrol detail atas setiap elemen grafik dan merupakan dasar dari hampir semua perpustakaan plotting Python lainnya.
- **Seaborn** menyediakan fungsi tingkat tinggi dan default menarik untuk grafik statistik, bekerja langsung dengan dataframe, dan seringkali lebih cepat untuk analisis data eksploratif.
Ini adalah visualisasi data yang lebih berguna! Tampaknya menunjukkan bahwa harga tertinggi untuk labu terjadi pada bulan September dan Oktober. Apakah itu sesuai dengan ekspektasi Anda? Mengapa atau mengapa tidak?
Alur kerja umum adalah menggunakan Seaborn untuk menjelajahi data dengan cepat, kemudian beralih ke Matplotlib ketika Anda perlu menyesuaikan detail.
---
## 🚀Tantangan
Jelajahi berbagai jenis visualisasi yang ditawarkan oleh Matplotlib. Jenis mana yang paling sesuai untuk masalah regresi?
Jelajahi berbagai jenis visualisasi yang ditawarkan Matplotlib dan Seaborn. Jenis mana yang paling tepat untuk masalah regresi?
## [Kuis Pasca-Pelajaran](https://ff-quizzes.netlify.app/en/ml/)
## [Kuis pasca kuliah](https://ff-quizzes.netlify.app/en/ml/)
## Tinjauan & Studi Mandiri
Lihatlah berbagai cara untuk memvisualisasikan data. Buat daftar berbagai pustaka yang tersedia dan catat mana yang terbaik untuk jenis tugas tertentu, misalnya visualisasi 2D vs. visualisasi 3D. Apa yang Anda temukan?
Lihat berbagai cara untuk memvisualisasikan data. Buatlah daftar berbagai perpustakaan yang tersedia dan catat mana yang terbaik untuk jenis tugas tertentu, misalnya visualisasi 2D vs. visualisasi 3D. Apa yang Anda temukan?
## Tugas
@ -213,5 +288,7 @@ Lihatlah berbagai cara untuk memvisualisasikan data. Buat daftar berbagai pustak
---
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -3,7 +3,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"## Regresi Linear untuk Labu - Pelajaran 2\n"
]
},
{
"cell_type": "code",
@ -220,6 +222,7 @@
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
"\n",
"pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
@ -383,18 +386,78 @@
"plt.ylabel(\"Pumpkin Price\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Visualisasi dengan Seaborn\n",
"\n",
"[Seaborn](https://seaborn.pydata.org/) dibangun di atas Matplotlib dan bekerja langsung dengan dataframe, membuatnya cepat untuk membuat plot statistik yang menarik dengan sangat sedikit kode.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Diagram sebar untuk menunjukkan hubungan\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sns.relplot(x=\"Price\", y=\"Month\", data=new_pumpkins)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sns.relplot(x=\"Price\", y=\"Month\", kind=\"line\", data=new_pumpkins)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Diagram batang untuk menunjukkan distribusi\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
"source": [
"sns.catplot(x=\"Month\", y=\"Price\", data=new_pumpkins, kind=\"bar\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Penafian**: \nDokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang berwenang. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa terjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.\n"
"### Heatmaps untuk menampilkan korelasi\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()\n",
"sns.heatmap(correlations, annot=True, cmap=\"coolwarm\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Penafian**:\nDokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -424,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
"translation_date": "2025-09-04T07:11:42+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "id"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -1,47 +1,47 @@
# Pengantar Pembelajaran Penguatan dan Q-Learning
![Ringkasan pembelajaran penguatan dalam pembelajaran mesin dalam bentuk sketchnote](../../../../sketchnotes/ml-reinforcement.png)
![Ringkasan reinforcement dalam pembelajaran mesin dalam bentuk sketchnote](../../../../translated_images/id/ml-reinforcement.94024374d63348db.webp)
> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac)
Pembelajaran penguatan melibatkan tiga konsep penting: agen, beberapa keadaan, dan satu set tindakan untuk setiap keadaan. Dengan melakukan suatu tindakan dalam keadaan tertentu, agen akan mendapatkan hadiah. Bayangkan permainan komputer Super Mario. Anda adalah Mario, berada di level permainan, berdiri di tepi jurang. Di atas Anda ada sebuah koin. Anda sebagai Mario, berada di level permainan, di posisi tertentu ... itulah keadaan Anda. Melangkah satu langkah ke kanan (tindakan) akan membuat Anda jatuh ke jurang, dan itu akan memberikan skor numerik rendah. Namun, menekan tombol lompat akan membuat Anda mendapatkan poin dan tetap hidup. Itu adalah hasil positif dan seharusnya memberikan skor numerik positif.
Pembelajaran penguatan melibatkan tiga konsep penting: agen, beberapa keadaan, dan seperangkat tindakan per keadaan. Dengan mengeksekusi sebuah tindakan di keadaan tertentu, agen diberikan hadiah. Bayangkan lagi permainan komputer Super Mario. Anda adalah Mario, Anda berada di sebuah level permainan, berdiri di tepi jurang. Di atas Anda ada sebuah koin. Anda sebagai Mario, dalam level permainan, pada posisi tertentu ... itulah keadaan Anda. Melangkah satu langkah ke kanan (sebuah tindakan) akan membuat Anda jatuh dari tepi, dan itu akan memberikan skor numerik rendah. Namun, menekan tombol lompat akan membuat Anda mendapatkan satu poin dan Anda akan tetap hidup. Itu adalah hasil positif dan harus memberikan skor numerik positif.
Dengan menggunakan pembelajaran penguatan dan simulator (permainan), Anda dapat belajar cara memainkan permainan untuk memaksimalkan hadiah, yaitu tetap hidup dan mendapatkan sebanyak mungkin poin.
Dengan menggunakan pembelajaran penguatan dan sebuah simulator (permainan), Anda bisa belajar cara bermain permainan untuk memaksimalkan hadiah yaitu tetap hidup dan mengumpulkan poin sebanyak mungkin.
[![Pengantar Pembelajaran Penguatan](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 Klik gambar di atas untuk mendengar Dmitry membahas Pembelajaran Penguatan
> 🎥 Klik gambar di atas untuk mendengarkan Dmitry membahas Pembelajaran Penguatan
## [Kuis sebelum pelajaran](https://ff-quizzes.netlify.app/en/ml/)
## [Kuis pra-perkuliahan](https://ff-quizzes.netlify.app/en/ml/)
## Prasyarat dan Pengaturan
Dalam pelajaran ini, kita akan bereksperimen dengan beberapa kode dalam Python. Anda harus dapat menjalankan kode Jupyter Notebook dari pelajaran ini, baik di komputer Anda atau di cloud.
Dalam pelajaran ini, kita akan bereksperimen dengan beberapa kode dalam Python. Anda harus bisa menjalankan kode Jupyter Notebook dari pelajaran ini, baik di komputer Anda atau di cloud.
Anda dapat membuka [notebook pelajaran](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) dan mengikuti pelajaran ini untuk membangun.
> **Catatan:** Jika Anda membuka kode ini dari cloud, Anda juga perlu mengambil file [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang digunakan dalam kode notebook. Tambahkan file tersebut ke direktori yang sama dengan notebook.
> **Catatan:** Jika Anda membuka kode ini dari cloud, Anda juga perlu mengambil file [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang digunakan dalam kode notebook. Tambahkan ke direktori yang sama dengan notebook.
## Pengantar
Dalam pelajaran ini, kita akan menjelajahi dunia **[Peter dan Serigala](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, terinspirasi oleh dongeng musikal karya komposer Rusia, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Kita akan menggunakan **Pembelajaran Penguatan** untuk membiarkan Peter menjelajahi lingkungannya, mengumpulkan apel yang lezat, dan menghindari bertemu dengan serigala.
Dalam pelajaran ini, kita akan menjelajahi dunia **[Peter dan Serigala](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, terinspirasi oleh dongeng musikal dari komposer Rusia, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Kita akan menggunakan **Pembelajaran Penguatan** untuk membiarkan Peter menjelajahi lingkungannya, mengumpulkan apel lezat dan menghindari bertemu dengan serigala.
**Pembelajaran Penguatan** (RL) adalah teknik pembelajaran yang memungkinkan kita mempelajari perilaku optimal dari seorang **agen** dalam suatu **lingkungan** dengan menjalankan banyak eksperimen. Agen dalam lingkungan ini harus memiliki **tujuan**, yang didefinisikan oleh **fungsi hadiah**.
**Pembelajaran Penguatan** (RL) adalah teknik pembelajaran yang memungkinkan kita belajar perilaku optimal dari sebuah **agen** dalam beberapa **lingkungan** dengan menjalankan banyak eksperimen. Agen dalam lingkungan ini harus memiliki beberapa **tujuan**, yang didefinisikan oleh **fungsi hadiah**.
## Lingkungan
Untuk kesederhanaan, mari kita anggap dunia Peter sebagai papan persegi berukuran `lebar` x `tinggi`, seperti ini:
Untuk kesederhanaan, mari kita anggap dunia Peter sebagai papan persegi berukuran `width` x `height`, seperti ini:
![Lingkungan Peter](../../../../8-Reinforcement/1-QLearning/images/environment.png)
![Lingkungan Peter](../../../../translated_images/id/environment.40ba3cb66256c93f.webp)
Setiap sel di papan ini dapat berupa:
Setiap sel di papan ini bisa berupa:
* **tanah**, tempat Peter dan makhluk lain dapat berjalan.
* **air**, tempat Anda jelas tidak bisa berjalan.
* **pohon** atau **rumput**, tempat Anda bisa beristirahat.
* **apel**, yang mewakili sesuatu yang Peter senang temukan untuk makanannya.
* **serigala**, yang berbahaya dan harus dihindari.
* **tanah**, tempat Peter dan makhluk lain bisa berjalan.
* **air**, yang jelas Anda tidak bisa berjalan di atasnya.
* sebuah **pohon** atau **rumput**, tempat Anda bisa beristirahat.
* sebuah **apel**, yang mewakili sesuatu yang akan menyenangkan Peter untuk ditemukan agar bisa memberi makan dirinya.
* sebuah **serigala**, yang berbahaya dan harus dihindari.
Ada modul Python terpisah, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang berisi kode untuk bekerja dengan lingkungan ini. Karena kode ini tidak penting untuk memahami konsep kita, kita akan mengimpor modul tersebut dan menggunakannya untuk membuat papan contoh (kode blok 1):
Ada modul Python terpisah, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang berisi kode untuk bekerja dengan lingkungan ini. Karena kode ini tidak penting untuk memahami konsep kita, kita akan mengimpor modul tersebut dan menggunakannya untuk membuat papan sampel (blok kode 1):
```python
from rlboard import *
@ -56,59 +56,59 @@ Kode ini harus mencetak gambar lingkungan yang mirip dengan yang di atas.
## Tindakan dan kebijakan
Dalam contoh kita, tujuan Peter adalah menemukan apel, sambil menghindari serigala dan rintangan lainnya. Untuk melakukan ini, dia pada dasarnya dapat berjalan-jalan sampai menemukan apel.
Dalam contoh kita, tujuan Peter adalah bisa menemukan apel, sambil menghindari serigala dan rintangan lainnya. Untuk melakukan ini, dia pada dasarnya bisa berjalan sampai menemukan apel.
Oleh karena itu, pada posisi mana pun, dia dapat memilih salah satu dari tindakan berikut: atas, bawah, kiri, dan kanan.
Oleh karena itu, di posisi manapun, dia dapat memilih salah satu dari tindakan berikut: ke atas, ke bawah, ke kiri dan ke kanan.
Kita akan mendefinisikan tindakan-tindakan tersebut sebagai kamus, dan memetakan mereka ke pasangan perubahan koordinat yang sesuai. Misalnya, bergerak ke kanan (`R`) akan sesuai dengan pasangan `(1,0)`. (kode blok 2):
Kita akan mendefinisikan tindakan-tindakan tersebut sebagai sebuah kamus, dan memetakannya ke pasangan perubahan koordinat yang sesuai. Misalnya, bergerak ke kanan (`R`) akan sesuai dengan pasangan `(1,0)`. (blok kode 2):
```python
actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) }
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
Secara keseluruhan, strategi dan tujuan dari skenario ini adalah sebagai berikut:
Untuk menyimpulkan, strategi dan tujuan skenario ini adalah sebagai berikut:
- **Strategi**, dari agen kita (Peter) didefinisikan oleh apa yang disebut **kebijakan**. Kebijakan adalah fungsi yang mengembalikan tindakan pada keadaan tertentu. Dalam kasus kita, keadaan masalah diwakili oleh papan, termasuk posisi pemain saat ini.
- **Strategi**, agen kita (Peter) didefinisikan oleh yang disebut **kebijakan**. Kebijakan adalah fungsi yang mengembalikan tindakan pada keadaan tertentu. Dalam kasus kita, keadaan masalah direpresentasikan oleh papan, termasuk posisi pemain saat ini.
- **Tujuan**, dari pembelajaran penguatan adalah akhirnya mempelajari kebijakan yang baik yang memungkinkan kita menyelesaikan masalah secara efisien. Namun, sebagai dasar, mari kita pertimbangkan kebijakan paling sederhana yang disebut **jalan acak**.
- **Tujuan**, pembelajaran penguatan adalah pada akhirnya mempelajari kebijakan yang baik yang memungkinkan kita menyelesaikan masalah secara efisien. Namun, sebagai baseline, mari kita pertimbangkan kebijakan paling sederhana yang disebut **random walk**.
## Jalan acak
## Random walk
Mari kita selesaikan masalah kita terlebih dahulu dengan menerapkan strategi jalan acak. Dengan jalan acak, kita akan secara acak memilih tindakan berikutnya dari tindakan yang diizinkan, sampai kita mencapai apel (kode blok 3).
Mari kita selesaikan masalah kita dengan menerapkan strategi random walk. Dengan random walk, kita akan memilih tindakan berikutnya secara acak dari tindakan yang diperbolehkan, sampai kita mencapai apel (blok kode 3).
1. Terapkan jalan acak dengan kode di bawah ini:
1. Implementasikan random walk dengan kode berikut:
```python
def random_policy(m):
return random.choice(list(actions))
def walk(m,policy,start_position=None):
n = 0 # number of steps
# set initial position
n = 0 # jumlah langkah
# atur posisi awal
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
return n # success!
return n # berhasil!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
return -1 # eaten by wolf or drowned
return -1 # dimakan serigala atau tenggelam
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
m.move(a) # do the actual move
m.move(a) # lakukan perpindahan sebenarnya
break
n+=1
walk(m,random_policy)
```
Panggilan ke `walk` harus mengembalikan panjang jalur yang sesuai, yang dapat bervariasi dari satu percobaan ke percobaan lainnya.
Panggilan ke `walk` harus mengembalikan panjang jalur yang sesuai, yang bisa berbeda dari satu percobaan ke percobaan lain.
1. Jalankan eksperimen jalan beberapa kali (misalnya, 100 kali), dan cetak statistik yang dihasilkan (kode blok 4):
1. Jalankan eksperimen walk beberapa kali (misalnya, 100), dan cetak statistik hasilnya (blok kode 4):
```python
def print_statistics(policy):
@ -125,17 +125,17 @@ Mari kita selesaikan masalah kita terlebih dahulu dengan menerapkan strategi jal
print_statistics(random_policy)
```
Perhatikan bahwa rata-rata panjang jalur adalah sekitar 30-40 langkah, yang cukup banyak, mengingat jarak rata-rata ke apel terdekat adalah sekitar 5-6 langkah.
Perhatikan bahwa panjang rata-rata jalur sekitar 30-40 langkah, yang cukup banyak, mengingat jarak rata-rata ke apel terdekat sekitar 5-6 langkah.
Anda juga dapat melihat bagaimana gerakan Peter terlihat selama jalan acak:
Anda juga dapat melihat bagaimana gerakan Peter selama random walk:
![Jalan Acak Peter](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
![Random Walk Peter](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
## Fungsi hadiah
Untuk membuat kebijakan kita lebih cerdas, kita perlu memahami langkah mana yang "lebih baik" daripada yang lain. Untuk melakukan ini, kita perlu mendefinisikan tujuan kita.
Untuk membuat kebijakan kita lebih cerdas, kita perlu memahami gerakan mana yang "lebih baik" daripada yang lain. Untuk melakukan ini, kita perlu mendefinisikan tujuan kita.
Tujuan dapat didefinisikan dalam bentuk **fungsi hadiah**, yang akan mengembalikan nilai skor untuk setiap keadaan. Semakin tinggi angkanya, semakin baik fungsi hadiahnya. (kode blok 5)
Tujuan dapat didefinisikan dalam bentuk **fungsi hadiah**, yang akan mengembalikan nilai skor untuk setiap keadaan. Semakin tinggi angkanya, semakin baik fungsi hadiah tersebut. (blok kode 5)
```python
move_reward = -0.1
@ -154,52 +154,175 @@ def reward(m,pos=None):
return move_reward
```
Hal menarik tentang fungsi hadiah adalah bahwa dalam banyak kasus, *kita hanya diberikan hadiah yang substansial di akhir permainan*. Ini berarti algoritma kita harus mengingat langkah-langkah "baik" yang mengarah pada hadiah positif di akhir, dan meningkatkan kepentingannya. Demikian pula, semua langkah yang mengarah pada hasil buruk harus dihindari.
Hal menarik tentang fungsi hadiah adalah bahwa dalam kebanyakan kasus, *kita hanya diberikan hadiah substansial pada akhir permainan*. Ini berarti algoritma kita harus somehow mengingat langkah "baik" yang mengarah pada hadiah positif di akhir, dan meningkatkan pentingnya. Demikian pula, semua gerakan yang mengarah ke hasil buruk harus dihindari.
## Q-Learning
Algoritma yang akan kita bahas di sini disebut **Q-Learning**. Dalam algoritma ini, kebijakan didefinisikan oleh fungsi (atau struktur data) yang disebut **Q-Table**. Q-Table mencatat "kebaikan" dari setiap tindakan dalam keadaan tertentu.
Algoritma yang akan kita bahas di sini disebut **Q-Learning**. Dalam algoritma ini, kebijakan didefinisikan oleh fungsi (atau struktur data) yang disebut **Q-Table**. Ini merekam "kebaikan" dari masing-masing tindakan dalam suatu keadaan tertentu.
Disebut Q-Table karena sering kali lebih nyaman untuk merepresentasikannya sebagai tabel, atau array multi-dimensi. Karena papan kita memiliki dimensi `lebar` x `tinggi`, kita dapat merepresentasikan Q-Table menggunakan array numpy dengan bentuk `lebar` x `tinggi` x `len(actions)`: (kode blok 6)
Disebut Q-Table karena seringkali mudah merepresentasikannya sebagai tabel, atau array multi-dimensi. Karena papan kita memiliki dimensi `width` x `height`, kita dapat merepresentasikan Q-Table menggunakan array numpy dengan bentuk `width` x `height` x `len(actions)`: (blok kode 6)
```python
Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)
```
Perhatikan bahwa kita menginisialisasi semua nilai Q-Table dengan nilai yang sama, dalam kasus kita - 0.25. Ini sesuai dengan kebijakan "jalan acak", karena semua langkah dalam setiap keadaan sama baiknya. Kita dapat meneruskan Q-Table ke fungsi `plot` untuk memvisualisasikan tabel di papan: `m.plot(Q)`.
Perhatikan bahwa kita menginisialisasi semua nilai Q-Table dengan nilai yang sama, dalam kasus kita - 0.25. Ini sesuai dengan kebijakan "random walk", karena semua gerakan pada setiap keadaan memiliki nilai sama. Kita dapat memberikan Q-Table ke fungsi `plot` untuk memvisualisasikan tabel di papan: `m.plot(Q)`.
![Lingkungan Peter](../../../../8-Reinforcement/1-QLearning/images/env_init.png)
![Lingkungan Peter](../../../../translated_images/id/env_init.04e8f26d2d60089e.webp)
Di tengah setiap sel terdapat "panah" yang menunjukkan arah gerakan yang disukai. Karena semua arah sama, sebuah titik ditampilkan.
Di tengah setiap sel terdapat "panah" yang menunjukkan arah gerak yang diinginkan. Karena semua arah sama, sebuah titik ditampilkan.
Sekarang kita perlu menjalankan simulasi, menjelajahi lingkungan kita, dan mempelajari distribusi nilai Q-Table yang lebih baik, yang akan memungkinkan kita menemukan jalur ke apel jauh lebih cepat.
Sekarang kita perlu menjalankan simulasi, menjelajahi lingkungan kita, dan mempelajari distribusi nilai Q-Table yang lebih baik, yang akan memungkinkan kita menemukan jalur ke apel lebih cepat.
## Inti dari Q-Learning: Persamaan Bellman
## Inti Q-Learning: Persamaan Bellman
Setelah kita mulai bergerak, setiap tindakan akan memiliki hadiah yang sesuai, yaitu kita secara teoritis dapat memilih tindakan berikutnya berdasarkan hadiah langsung tertinggi. Namun, dalam sebagian besar keadaan, langkah tersebut tidak akan mencapai tujuan kita untuk mencapai apel, sehingga kita tidak dapat langsung memutuskan arah mana yang lebih baik.
Setelah kita mulai bergerak, setiap aksi akan memiliki hadiah yang sesuai, yaitu secara teoritis kita dapat memilih aksi berikutnya berdasarkan hadiah langsung tertinggi. Namun, di kebanyakan keadaan, gerakan itu tidak akan mencapai tujuan kita untuk mendapatkan apel, sehingga kita tidak bisa segera memutuskan arah mana yang lebih baik.
> Ingatlah bahwa bukan hasil langsung yang penting, melainkan hasil akhir, yang akan kita peroleh di akhir simulasi.
> Ingatlah bahwa hasil langsung bukanlah yang penting, melainkan hasil akhir yang akan kita peroleh di akhir simulasi.
Untuk memperhitungkan hadiah yang tertunda ini, kita perlu menggunakan prinsip **[pemrograman dinamis](https://en.wikipedia.org/wiki/Dynamic_programming)**, yang memungkinkan kita memikirkan masalah kita secara rekursif.
Untuk memperhitungkan hadiah yang tertunda ini, kita perlu menggunakan prinsip **[pemrograman dinamis](https://en.wikipedia.org/wiki/Dynamic_programming)**, yang memungkinkan kita berpikir secara rekursif tentang masalah kita.
Misalkan kita sekarang berada di keadaan *s*, dan kita ingin bergerak ke keadaan berikutnya *s'*. Dengan melakukan itu, kita akan menerima hadiah langsung *r(s,a)*, yang didefinisikan oleh fungsi hadiah, ditambah beberapa hadiah di masa depan. Jika kita menganggap bahwa Q-Table kita secara akurat mencerminkan "daya tarik" dari setiap tindakan, maka pada keadaan *s'* kita akan memilih tindakan *a* yang sesuai dengan nilai maksimum *Q(s',a')*. Dengan demikian, hadiah masa depan terbaik yang bisa kita dapatkan pada keadaan *s* akan didefinisikan sebagai `max`
Misal kita sekarang berada di keadaan *s*, dan ingin pindah ke keadaan berikutnya *s'*. Dengan melakukan itu, kita akan menerima hadiah langsung *r(s,a)*, yang didefinisikan oleh fungsi hadiah, plus beberapa hadiah di masa depan. Jika kita menganggap Q-Table kita mencerminkan "daya tarik" dari setiap tindakan dengan benar, maka di keadaan *s'* kita akan memilih sebuah tindakan *a* yang sesuai dengan nilai maksimum dari *Q(s',a')*. Jadi, hadiah masa depan terbaik yang bisa kita dapatkan di keadaan *s* didefinisikan sebagai `max`<sub>a'</sub>*Q(s',a')* (maksimum di sini dihitung untuk semua tindakan *a'* yang mungkin di keadaan *s'*).
Pembelajaran dapat dirangkum sebagai berikut:
Ini memberikan **rumus Bellman** untuk menghitung nilai Q-Table di keadaan *s*, dengan tindakan *a*:
- **Rata-rata panjang jalur meningkat**. Pada awalnya, rata-rata panjang jalur meningkat. Hal ini kemungkinan disebabkan oleh fakta bahwa ketika kita tidak tahu apa-apa tentang lingkungan, kita cenderung terjebak di keadaan buruk, seperti air atau serigala. Saat kita belajar lebih banyak dan mulai menggunakan pengetahuan ini, kita dapat menjelajahi lingkungan lebih lama, tetapi kita masih belum tahu dengan baik di mana apel berada.
<img src="../../../../translated_images/id/bellman-equation.7c0c4c722e5a6b7c.webp"/>
- **Panjang jalur menurun seiring dengan pembelajaran**. Setelah kita belajar cukup banyak, menjadi lebih mudah bagi agen untuk mencapai tujuan, dan panjang jalur mulai menurun. Namun, kita masih terbuka untuk eksplorasi, sehingga kita sering menyimpang dari jalur terbaik dan mencoba opsi baru, yang membuat jalur lebih panjang dari yang optimal.
Di sini γ adalah yang disebut **faktor diskon** yang menentukan seberapa besar Anda harus lebih mengutamakan hadiah sekarang dibanding hadiah di masa depan dan sebaliknya.
- **Panjang meningkat secara tiba-tiba**. Apa yang juga kita amati pada grafik ini adalah bahwa pada suatu titik, panjang jalur meningkat secara tiba-tiba. Hal ini menunjukkan sifat stokastik dari proses tersebut, dan bahwa kita dapat pada suatu saat "merusak" koefisien Q-Table dengan menimpanya dengan nilai-nilai baru. Idealnya, hal ini harus diminimalkan dengan menurunkan tingkat pembelajaran (misalnya, menjelang akhir pelatihan, kita hanya menyesuaikan nilai Q-Table dengan nilai kecil).
## Algoritma Pembelajaran
Secara keseluruhan, penting untuk diingat bahwa keberhasilan dan kualitas proses pembelajaran sangat bergantung pada parameter seperti tingkat pembelajaran, penurunan tingkat pembelajaran, dan faktor diskon. Parameter-parameter ini sering disebut sebagai **hiperparameter**, untuk membedakannya dari **parameter**, yang kita optimalkan selama pelatihan (misalnya, koefisien Q-Table). Proses menemukan nilai hiperparameter terbaik disebut **optimasi hiperparameter**, dan topik ini layak untuk dibahas secara terpisah.
Berdasarkan persamaan di atas, kita sekarang bisa menulis pseudo-code untuk algoritma pembelajaran kita:
## [Kuis setelah kuliah](https://ff-quizzes.netlify.app/en/ml/)
* Inisialisasi Q-Table Q dengan angka sama untuk semua keadaan dan tindakan
* Tetapkan laju pembelajaran α ← 1
* Ulangi simulasi berkali-kali
1. Mulai dari posisi acak
1. Ulangi
1. Pilih tindakan *a* di keadaan *s*
2. Eksekusi tindakan dengan pindah ke keadaan baru *s'*
3. Jika kita menemui kondisi akhir permainan, atau total hadiah terlalu kecil - keluar dari simulasi
4. Hitung hadiah *r* di keadaan baru
5. Update Fungsi Q sesuai persamaan Bellman: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. Update total hadiah dan turunkan α.
## Eksploitasi vs. eksplorasi
Dalam algoritma di atas, kita tidak menentukan bagaimana tepatnya kita memilih tindakan pada langkah 2.1. Jika kita memilih tindakan secara acak, kita akan secara acak **mengeksplorasi** lingkungan, dan kita juga cukup mungkin mati sering serta menjelajahi area yang biasanya tidak kita kunjungi. Pendekatan alternatif adalah **mengeksploitasi** nilai-nilai Q-Table yang sudah kita ketahui, dan memilih tindakan terbaik (dengan nilai Q-Table lebih tinggi) di keadaan *s*. Namun, ini akan mencegah kita mengeksplorasi keadaan lain, dan kemungkinan kita tidak akan menemukan solusi optimal.
Oleh karena itu, pendekatan terbaik adalah menyeimbangkan eksplorasi dan eksploitasi. Ini dapat dilakukan dengan memilih tindakan di keadaan *s* dengan probabilitas yang proporsional terhadap nilai-nilai di Q-Table. Pada awalnya, ketika nilai Q-Table semua sama, ini akan sama dengan pilihan acak, tapi seiring kita belajar lebih banyak tentang lingkungan, kita lebih cenderung mengikuti rute optimal sekaligus membiarkan agen memilih jalur yang belum dijelajahi sesekali.
## Implementasi Python
Sekarang kita siap mengimplementasikan algoritma pembelajaran. Sebelum itu, kita juga perlu fungsi yang akan mengubah angka-angka sembarang dalam Q-Table menjadi vektor probabilitas untuk tindakan yang sesuai.
1. Buat fungsi `probs()`:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
Kita menambahkan beberapa `eps` ke vektor asli agar terhindar dari pembagian dengan 0 pada kasus awal, ketika semua komponen vektor identik.
Jalankan algoritma pembelajaran melalui 5000 eksperimen, yang juga disebut **epoch**: (blok kode 8)
```python
for epoch in range(5000):
# Pilih titik awal
m.random_start()
# Mulai perjalanan
n=0
cum_reward = 0
while True:
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
dpos = actions[a]
m.move(dpos,check_correctness=False) # kami mengizinkan pemain bergerak di luar papan, yang mengakhiri episode
r = reward(m)
cum_reward += r
if r==end_reward or cum_reward < -1000:
lpath.append(n)
break
alpha = np.exp(-n / 10e5)
gamma = 0.5
ai = action_idx[a]
Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max())
n+=1
```
Setelah menjalankan algoritma ini, Q-Table harus diperbarui dengan nilai yang mendefinisikan daya tarik tindakan berbeda di setiap langkah. Kita bisa mencoba memvisualisasikan Q-Table dengan menggambar vektor di setiap sel yang mengarah ke arah gerak yang diinginkan. Demi kesederhanaan, kita gambar lingkaran kecil sebagai pengganti ujung panah.
<img src="../../../../translated_images/id/learned.ed28bcd8484b5287.webp"/>
## Memeriksa kebijakan
Karena Q-Table mencantumkan "daya tarik" setiap tindakan di setiap keadaan, cukup mudah menggunakannya untuk mendefinisikan navigasi efisien di dunia kita. Dalam kasus paling sederhana, kita bisa memilih tindakan yang sesuai dengan nilai tertinggi di Q-Table: (blok kode 9)
```python
def qpolicy_strict(m):
x,y = m.human
v = probs(Q[x,y])
a = list(actions)[np.argmax(v)]
return a
walk(m,qpolicy_strict)
```
> Jika Anda mencoba kode di atas beberapa kali, Anda mungkin memperhatikan bahwa terkadang kode tersebut "terhenti", dan Anda perlu menekan tombol STOP di notebook untuk menghentikannya. Ini terjadi karena mungkin ada situasi di mana dua status "mengarah" satu sama lain dalam hal nilai Q optimal, sehingga agen berakhir bergerak antara status tersebut tanpa henti.
## 🚀Tantangan
> **Tugas 1:** Modifikasi fungsi `walk` untuk membatasi panjang jalur maksimum dengan sejumlah langkah tertentu (misalnya, 100), dan perhatikan kode di atas mengembalikan nilai ini dari waktu ke waktu.
> **Tugas 2:** Modifikasi fungsi `walk` sehingga tidak kembali ke tempat-tempat yang sudah pernah dikunjunginya sebelumnya. Ini akan mencegah `walk` berputar tanpa henti, namun, agen masih bisa terjebak di suatu lokasi yang tidak bisa ia tinggalkan.
## Navigasi
Kebijakan navigasi yang lebih baik adalah yang kita gunakan selama pelatihan, yaitu menggabungkan eksploitasi dan eksplorasi. Dalam kebijakan ini, kita akan memilih setiap tindakan dengan probabilitas tertentu, berbanding lurus dengan nilai-nilai dalam Q-Table. Strategi ini mungkin masih menyebabkan agen kembali ke posisi yang sudah dijelajahi, tetapi, seperti yang Anda lihat dari kode di bawah ini, hasilnya adalah jalur rata-rata yang sangat pendek ke lokasi yang diinginkan (ingat bahwa `print_statistics` menjalankan simulasi 100 kali): (blok kode 10)
```python
def qpolicy(m):
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
return a
print_statistics(qpolicy)
```
Setelah menjalankan kode ini, Anda seharusnya mendapatkan panjang jalur rata-rata yang jauh lebih kecil dari sebelumnya, dalam rentang 3-6.
## Menyelidiki proses pembelajaran
Seperti yang telah kami sebutkan, proses pembelajaran adalah keseimbangan antara eksplorasi dan eksploitasi pengetahuan yang didapat tentang struktur ruang masalah. Kami telah melihat bahwa hasil pembelajaran (kemampuan untuk membantu agen menemukan jalur pendek ke tujuan) telah meningkat, tetapi juga menarik untuk mengamati bagaimana panjang jalur rata-rata berperilaku selama proses pembelajaran:
<img src="../../../../translated_images/id/lpathlen1.0534784add58d4eb.webp"/>
Pembelajaran ini dapat dirangkum sebagai berikut:
- **Panjang jalur rata-rata meningkat**. Apa yang kita lihat di sini adalah pertama-tama, panjang jalur rata-rata meningkat. Ini mungkin disebabkan oleh fakta bahwa ketika kita tidak tahu apa pun tentang lingkungan, kita cenderung terjebak di status buruk, air atau serigala. Saat kita belajar lebih banyak dan mulai menggunakan pengetahuan ini, kita dapat menjelajahi lingkungan lebih lama, tetapi kita masih belum tahu dengan baik di mana letak apel.
- **Panjang jalur menurun, seiring kita mempelajari lebih banyak.** Setelah kita belajar cukup banyak, menjadi lebih mudah bagi agen mencapai tujuan, dan panjang jalur mulai menurun. Namun, kita masih terbuka untuk eksplorasi, jadi kita sering menyimpang dari jalur terbaik, dan menjelajahi opsi baru, membuat jalur lebih panjang dari yang optimal.
- **Panjang meningkat secara tiba-tiba.** Yang juga kami amati pada grafik ini adalah bahwa pada titik tertentu, panjang tiba-tiba meningkat. Ini menunjukkan sifat stokastik dari proses tersebut, dan bahwa kita dapat pada suatu titik "merusak" koefisien dalam Q-Table dengan menimpanya dengan nilai baru. Hal ini idealnya harus diminimalkan dengan mengurangi laju pembelajaran (misalnya, menjelang akhir pelatihan, kita hanya menyesuaikan nilai Q-Table dengan nilai kecil).
Secara keseluruhan, penting untuk diingat bahwa keberhasilan dan kualitas proses pembelajaran sangat bergantung pada parameter, seperti laju pembelajaran, penurunan laju pembelajaran, dan faktor diskonto. Parameter tersebut sering disebut **hiperparameter**, untuk membedakannya dari **parameter**, yang kita optimalkan selama pelatihan (misalnya, koefisien Q-Table). Proses menemukan nilai hiperparameter terbaik disebut **optimasi hiperparameter**, dan ini layak menjadi topik terpisah.
## [Kuis pasca kuliah](https://ff-quizzes.netlify.app/en/ml/)
## Tugas
[Dunia yang Lebih Realistis](assignment.md)
---
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,14 +1,34 @@
# CartPole Skating
Masalah yang telah kita selesaikan dalam pelajaran sebelumnya mungkin tampak seperti masalah mainan, tidak benar-benar berlaku untuk skenario kehidupan nyata. Ini bukanlah kasusnya, karena banyak masalah dunia nyata juga berbagi skenario ini - termasuk bermain Catur atau Go. Mereka serupa, karena kita juga memiliki papan dengan aturan tertentu dan **state diskrit**.
## [Kuis Pra-lecture](https://ff-quizzes.netlify.app/en/ml/)
## Pendahuluan
Dalam pelajaran ini kita akan menerapkan prinsip yang sama dari Q-Learning untuk sebuah masalah dengan **state kontinu**, yaitu state yang diberikan oleh satu atau lebih angka riil. Kita akan menangani masalah berikut:
> **Masalah**: Jika Peter ingin melarikan diri dari serigala, ia harus bisa bergerak lebih cepat. Kita akan melihat bagaimana Peter dapat belajar bermain skating, khususnya, menjaga keseimbangan, menggunakan Q-Learning.
![The great escape!](../../../../translated_images/id/escape.18862db9930337e3.webp)
> Peter dan teman-temannya menjadi kreatif untuk melarikan diri dari serigala! Gambar oleh [Jen Looper](https://twitter.com/jenlooper)
Kita akan menggunakan versi sederhana dari keseimbangan yang dikenal sebagai masalah **CartPole**. Dalam dunia cartpole, kita memiliki sebuah slider horizontal yang dapat bergerak ke kiri atau kanan, dan tujuannya adalah menyeimbangkan tiang vertikal di atas slider.
<img alt="a cartpole" src="../../../../translated_images/id/cartpole.b5609cc0494a14f7.webp" width="200"/>
## Prasyarat
Dalam pelajaran ini, kita akan menggunakan pustaka bernama **OpenAI Gym** untuk mensimulasikan berbagai **lingkungan**. Anda dapat menjalankan kode pelajaran ini secara lokal (misalnya dari Visual Studio Code), di mana simulasi akan terbuka di jendela baru. Saat menjalankan kode secara online, Anda mungkin perlu melakukan beberapa penyesuaian pada kode, seperti yang dijelaskan [di sini](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7).
Dalam pelajaran ini, kita akan menggunakan sebuah pustaka bernama **OpenAI Gym** untuk mensimulasikan berbagai **lingkungan**. Kamu dapat menjalankan kode pelajaran ini secara lokal (misalnya dari Visual Studio Code), dalam hal ini simulasi akan terbuka di jendela baru. Saat menjalankan kode secara online, kamu mungkin perlu melakukan beberapa penyesuaian pada kode, seperti yang dijelaskan [di sini](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7).
## OpenAI Gym
Dalam pelajaran sebelumnya, aturan permainan dan keadaan diberikan oleh kelas `Board` yang kita definisikan sendiri. Di sini kita akan menggunakan **lingkungan simulasi** khusus, yang akan mensimulasikan fisika di balik tiang yang seimbang. Salah satu lingkungan simulasi paling populer untuk melatih algoritma pembelajaran penguatan disebut [Gym](https://gym.openai.com/), yang dikelola oleh [OpenAI](https://openai.com/). Dengan menggunakan gym ini, kita dapat membuat berbagai **lingkungan** mulai dari simulasi cartpole hingga permainan Atari.
Dalam pelajaran sebelumnya, aturan permainan dan state diberikan oleh kelas `Board` yang kita definisikan sendiri. Di sini kita akan menggunakan **lingkungan simulasi** khusus, yang akan mensimulasikan fisika di balik tiang yang seimbang. Salah satu lingkungan simulasi paling populer untuk melatih algoritma reinforcement learning disebut [Gym](https://gym.openai.com/), yang dikelola oleh [OpenAI](https://openai.com/). Dengan menggunakan gym ini kita dapat membuat berbagai **lingkungan** mulai dari simulasi cartpole hingga permainan Atari.
> **Catatan**: Anda dapat melihat lingkungan lain yang tersedia dari OpenAI Gym [di sini](https://gym.openai.com/envs/#classic_control).
> **Catatan**: Kamu dapat melihat lingkungan lain yang tersedia dari OpenAI Gym [di sini](https://gym.openai.com/envs/#classic_control).
Pertama, mari kita instal gym dan impor pustaka yang diperlukan (kode blok 1):
Pertama, mari kita instal gym dan impor pustaka yang dibutuhkan (blok kode 1):
```python
import sys
@ -24,9 +44,9 @@ import random
Untuk bekerja dengan masalah keseimbangan cartpole, kita perlu menginisialisasi lingkungan yang sesuai. Setiap lingkungan terkait dengan:
- **Observation space** yang mendefinisikan struktur informasi yang kita terima dari lingkungan. Untuk masalah cartpole, kita menerima posisi tiang, kecepatan, dan beberapa nilai lainnya.
- **Ruang observasi** yang mendefinisikan struktur informasi yang kita terima dari lingkungan. Untuk masalah cartpole, kita menerima posisi tiang, kecepatan dan beberapa nilai lainnya.
- **Action space** yang mendefinisikan tindakan yang mungkin dilakukan. Dalam kasus kita, action space bersifat diskrit, dan terdiri dari dua tindakan - **kiri** dan **kanan**. (kode blok 2)
- **Ruang aksi** yang mendefinisikan kemungkinan tindakan. Dalam kasus kita ruang aksi bersifat diskrit, dan terdiri dari dua tindakan - **kiri** dan **kanan**. (blok kode 2)
1. Untuk menginisialisasi, ketik kode berikut:
@ -37,11 +57,11 @@ Untuk bekerja dengan masalah keseimbangan cartpole, kita perlu menginisialisasi
print(env.action_space.sample())
```
Untuk melihat bagaimana lingkungan bekerja, mari kita jalankan simulasi singkat selama 100 langkah. Pada setiap langkah, kita memberikan salah satu tindakan yang akan dilakukan - dalam simulasi ini kita hanya memilih tindakan secara acak dari `action_space`.
Untuk melihat bagaimana lingkungan bekerja, mari jalankan simulasi singkat selama 100 langkah. Pada setiap langkah, kita memberikan salah satu tindakan yang akan diambil - dalam simulasi ini kita hanya memilih tindakan secara acak dari `action_space`.
1. Jalankan kode di bawah ini dan lihat hasilnya.
1. Jalankan kode di bawah dan lihat hasilnya.
✅ Ingatlah bahwa lebih disarankan untuk menjalankan kode ini pada instalasi Python lokal! (kode blok 3)
✅ Ingat, sebaiknya jalankan kode ini pada instalasi Python lokal! (blok kode 3)
```python
env.reset()
@ -52,11 +72,11 @@ Untuk melihat bagaimana lingkungan bekerja, mari kita jalankan simulasi singkat
env.close()
```
Anda seharusnya melihat sesuatu yang mirip dengan gambar ini:
Kamu akan melihat sesuatu yang mirip dengan gambar ini:
![cartpole tanpa keseimbangan](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
![non-balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
1. Selama simulasi, kita perlu mendapatkan observasi untuk memutuskan tindakan apa yang harus dilakukan. Faktanya, fungsi langkah mengembalikan observasi saat ini, fungsi reward, dan flag selesai yang menunjukkan apakah simulasi masih perlu dilanjutkan atau tidak: (kode blok 4)
1. Selama simulasi, kita perlu mendapatkan observasi untuk memutuskan bagaimana bertindak. Faktanya, fungsi step mengembalikan observasi saat ini, fungsi reward, dan flag done yang menunjukkan apakah simulasi harus diteruskan atau tidak: (blok kode 4)
```python
env.reset()
@ -69,7 +89,7 @@ Untuk melihat bagaimana lingkungan bekerja, mari kita jalankan simulasi singkat
env.close()
```
Anda akan melihat sesuatu seperti ini di output notebook:
Kamu akan melihat sesuatu seperti ini di output notebook:
```text
[ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0
@ -83,42 +103,42 @@ Untuk melihat bagaimana lingkungan bekerja, mari kita jalankan simulasi singkat
```
Vektor observasi yang dikembalikan pada setiap langkah simulasi berisi nilai-nilai berikut:
- Posisi kereta
- Kecepatan kereta
- Posisi cart
- Kecepatan cart
- Sudut tiang
- Laju rotasi tiang
1. Dapatkan nilai minimum dan maksimum dari angka-angka tersebut: (kode blok 5)
1. Dapatkan nilai minimum dan maksimum dari angka-angka tersebut: (blok kode 5)
```python
print(env.observation_space.low)
print(env.observation_space.high)
```
Anda mungkin juga memperhatikan bahwa nilai reward pada setiap langkah simulasi selalu 1. Hal ini karena tujuan kita adalah bertahan selama mungkin, yaitu menjaga tiang tetap dalam posisi vertikal selama mungkin.
Kamu mungkin juga menyadari bahwa nilai reward pada setiap langkah simulasi selalu 1. Ini karena tujuan kita adalah bertahan selama mungkin, yaitu menjaga tiang dalam posisi yang relatif vertikal selama periode waktu terpanjang.
✅ Faktanya, simulasi CartPole dianggap berhasil jika kita berhasil mendapatkan rata-rata reward sebesar 195 selama 100 percobaan berturut-turut.
✅ Faktanya, simulasi CartPole dianggap berhasil jika kita berhasil mendapatkan rata-rata reward 195 selama 100 percobaan berturut-turut.
## Diskretisasi State
Dalam Q-Learning, kita perlu membangun Q-Table yang mendefinisikan tindakan apa yang harus dilakukan pada setiap state. Untuk dapat melakukan ini, kita memerlukan state yang **diskrit**, lebih tepatnya, state tersebut harus berisi sejumlah nilai diskrit yang terbatas. Oleh karena itu, kita perlu **mendiskretkan** observasi kita, memetakannya ke dalam kumpulan state yang terbatas.
Dalam Q-Learning, kita perlu membangun Q-Table yang mendefinisikan apa yang harus dilakukan pada setiap state. Agar bisa melakukan ini, kita perlu agar state menjadi **diskrit**, lebih tepatnya, harus berisi jumlah nilai diskrit yang terbatas. Maka dari itu, kita perlu **mendiskretisasi** observasi kita, memetakan mereka ke sebuah himpunan nilai diskrit yang terbatas.
Ada beberapa cara untuk melakukan ini:
- **Membagi menjadi beberapa bin**. Jika kita mengetahui interval dari suatu nilai tertentu, kita dapat membagi interval ini menjadi sejumlah **bin**, dan kemudian mengganti nilai dengan nomor bin tempat nilai tersebut berada. Hal ini dapat dilakukan menggunakan metode numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). Dalam kasus ini, kita akan mengetahui ukuran state secara tepat, karena ukuran tersebut akan bergantung pada jumlah bin yang kita pilih untuk digitalisasi.
- **Membagi ke dalam bins**. Jika kita mengetahui interval dari nilai tertentu, kita dapat membagi interval ini menjadi sejumlah **bins**, dan kemudian mengganti nilai dengan nomor bin yang sesuai. Ini dapat dilakukan menggunakan metode numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). Dalam hal ini, kita akan tahu dengan tepat ukuran state karena tergantung pada jumlah bins yang kita pilih untuk digitalisasi.
✅ Kita dapat menggunakan interpolasi linier untuk membawa nilai ke interval terbatas (misalnya, dari -20 sampai 20), kemudian mengubah angka menjadi bilangan bulat dengan pembulatan. Ini memberi kita kendali yang sedikit kurang pada ukuran state, terutama jika kita tidak mengetahui rentang pasti nilai input. Misalnya, dalam kasus kita 2 dari 4 nilai tidak memiliki batas atas/bawah yang pasti, yang dapat menghasilkan jumlah state yang tak hingga.
✅ Kita dapat menggunakan interpolasi linier untuk membawa nilai ke beberapa interval terbatas (misalnya, dari -20 hingga 20), dan kemudian mengonversi angka menjadi bilangan bulat dengan membulatkannya. Ini memberikan kita sedikit kontrol pada ukuran state, terutama jika kita tidak mengetahui rentang nilai input secara pasti. Misalnya, dalam kasus kita, 2 dari 4 nilai tidak memiliki batas atas/bawah pada nilainya, yang dapat menghasilkan jumlah state yang tak terbatas.
Dalam contoh kita, kita akan menggunakan pendekatan kedua. Seperti yang akan kamu lihat nanti, meskipun batas atas/bawah tidak terdefinisi, nilai-nilai tersebut jarang mengambil nilai di luar interval tertentu yang terbatas, sehingga state dengan nilai ekstrim akan sangat jarang.
Dalam contoh kita, kita akan menggunakan pendekatan kedua. Seperti yang mungkin Anda perhatikan nanti, meskipun batas atas/bawah tidak terdefinisi, nilai-nilai tersebut jarang mengambil nilai di luar interval tertentu, sehingga state dengan nilai ekstrem akan sangat jarang.
1. Berikut adalah fungsi yang akan mengambil observasi dari model kita dan menghasilkan tuple dari 4 nilai bilangan bulat: (kode blok 6)
1. Berikut fungsi yang akan mengambil observasi dari model kita dan menghasilkan tuple dari 4 nilai bilangan bulat: (blok kode 6)
```python
def discretize(x):
return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int))
```
1. Mari kita juga eksplorasi metode diskretisasi lain menggunakan bin: (kode blok 7)
1. Mari kita juga jelajahi metode diskretisasi lain menggunakan bins: (blok kode 7)
```python
def create_bins(i,num):
@ -126,17 +146,17 @@ Dalam contoh kita, kita akan menggunakan pendekatan kedua. Seperti yang mungkin
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
nbins = [20,20,10,10] # number of bins for each parameter
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # interval nilai untuk setiap parameter
nbins = [20,20,10,10] # jumlah bin untuk setiap parameter
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
1. Sekarang mari kita jalankan simulasi singkat dan amati nilai-nilai lingkungan diskrit tersebut. Silakan coba `discretize` dan `discretize_bins` dan lihat apakah ada perbedaan.
1. Sekarang mari jalankan simulasi singkat dan perhatikan nilai lingkungan diskrit tersebut. Silakan coba kedua `discretize` dan `discretize_bins` dan lihat apakah ada perbedaan.
✅ discretize_bins mengembalikan nomor bin, yang berbasis 0. Jadi untuk nilai variabel input di sekitar 0, ia mengembalikan nomor dari tengah interval (10). Dalam discretize, kita tidak peduli dengan rentang nilai output, memungkinkan mereka menjadi negatif, sehingga nilai state tidak bergeser, dan 0 sesuai dengan 0. (kode blok 8)
✅ discretize_bins mengembalikan nomor bin yang berbasis 0. Jadi untuk nilai variabel input sekitar 0, ini mengembalikan nomor dari tengah interval (10). Dalam discretize, kita tidak memperhatikan rentang nilai output, mengizinkan nilai negatif, sehingga nilai state tidak bergeser, dan 0 sesuai dengan 0. (blok kode 8)
```python
env.reset()
@ -150,15 +170,15 @@ Dalam contoh kita, kita akan menggunakan pendekatan kedua. Seperti yang mungkin
env.close()
```
Hapus komentar pada baris yang dimulai dengan env.render jika Anda ingin melihat bagaimana lingkungan dieksekusi. Jika tidak, Anda dapat menjalankannya di latar belakang, yang lebih cepat. Kami akan menggunakan eksekusi "tak terlihat" ini selama proses Q-Learning kami.
Batalkan komentar baris yang diawali dengan env.render jika kamu ingin melihat bagaimana lingkungan mengeksekusi. Jika tidak, kamu dapat mengeksekusinya di latar belakang, yang lebih cepat. Kita akan menggunakan eksekusi "tidak terlihat" ini selama proses Q-Learning.
## Struktur Q-Table
Dalam pelajaran sebelumnya, state adalah pasangan angka sederhana dari 0 hingga 8, sehingga nyaman untuk merepresentasikan Q-Table dengan tensor numpy dengan bentuk 8x8x2. Jika kita menggunakan diskretisasi bin, ukuran vektor state kita juga diketahui, sehingga kita dapat menggunakan pendekatan yang sama dan merepresentasikan state dengan array berbentuk 20x20x10x10x2 (di sini 2 adalah dimensi action space, dan dimensi pertama sesuai dengan jumlah bin yang kita pilih untuk setiap parameter dalam observation space).
Dalam pelajaran sebelumnya, state adalah pasangan angka sederhana dari 0 sampai 8, sehingga mudah merepresentasikan Q-Table dengan tensor numpy berbentuk 8x8x2. Jika kita menggunakan diskretisasi bins, ukuran vektor state juga diketahui, sehingga kita dapat menggunakan pendekatan yang sama dan merepresentasikan state dengan array berbentuk 20x20x10x10x2 (di sini 2 adalah dimensi ruang aksi, dan dimensi pertama sesuai dengan jumlah bins yang kita pilih untuk masing-masing parameter dalam ruang observasi).
Namun, terkadang dimensi observation space tidak diketahui secara pasti. Dalam kasus fungsi `discretize`, kita mungkin tidak pernah yakin bahwa state kita tetap berada dalam batas tertentu, karena beberapa nilai asli tidak memiliki batas. Oleh karena itu, kita akan menggunakan pendekatan yang sedikit berbeda dan merepresentasikan Q-Table dengan sebuah dictionary.
Namun, terkadang dimensi tepat dari ruang observasi tidak diketahui. Dalam kasus fungsi `discretize`, kita mungkin tidak pernah yakin state kita tetap dalam batas tertentu, karena beberapa nilai asli tidak dibatasi. Oleh karena itu, kita akan menggunakan pendekatan yang sedikit berbeda dan merepresentasikan Q-Table dengan dictionary.
1. Gunakan pasangan *(state,action)* sebagai kunci dictionary, dan nilainya akan sesuai dengan nilai entri Q-Table. (kode blok 9)
1. Gunakan pasangan *(state, action)* sebagai kunci dictionary, dan nilainya akan sesuai dengan entri nilai Q-Table. (blok kode 9)
```python
Q = {}
@ -168,38 +188,38 @@ Namun, terkadang dimensi observation space tidak diketahui secara pasti. Dalam k
return [Q.get((state,a),0) for a in actions]
```
Di sini kita juga mendefinisikan fungsi `qvalues()`, yang mengembalikan daftar nilai Q-Table untuk state tertentu yang sesuai dengan semua tindakan yang mungkin. Jika entri tidak ada dalam Q-Table, kita akan mengembalikan 0 sebagai default.
Di sini kita juga mendefinisikan fungsi `qvalues()`, yang mengembalikan daftar nilai Q-Table untuk state tertentu yang sesuai dengan semua aksi yang mungkin. Jika entri tidak ada di Q-Table, kita akan mengembalikan 0 sebagai default.
## Mari Mulai Q-Learning
## Mari mulai Q-Learning
Sekarang kita siap mengajari Peter untuk menjaga keseimbangan!
Sekarang kita siap mengajarkan Peter untuk menjaga keseimbangan!
1. Pertama, mari kita tetapkan beberapa hyperparameter: (kode blok 10)
1. Pertama, mari kita tetapkan beberapa hyperparameter: (blok kode 10)
```python
# hyperparameters
# hiperparameter
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
Di sini, `alpha` adalah **learning rate** yang menentukan sejauh mana kita harus menyesuaikan nilai Q-Table saat ini pada setiap langkah. Dalam pelajaran sebelumnya, kita memulai dengan 1, dan kemudian menurunkan `alpha` ke nilai yang lebih rendah selama pelatihan. Dalam contoh ini, kita akan mempertahankannya tetap konstan demi kesederhanaan, dan Anda dapat bereksperimen dengan menyesuaikan nilai `alpha` nanti.
`gamma` adalah **discount factor** yang menunjukkan sejauh mana kita harus memprioritaskan reward di masa depan dibandingkan reward saat ini.
Di sini, `alpha` adalah **laju pembelajaran** yang menentukan sejauh mana kita harus menyesuaikan nilai Q-Table saat ini di setiap langkah. Dalam pelajaran sebelumnya kita mulai dengan 1, kemudian menurunkan `alpha` ke nilai lebih rendah selama pelatihan. Dalam contoh ini kita akan mempertahankannya konstan untuk kesederhanaan, dan kamu bisa bereksperimen dengan mengubah nilai `alpha` nanti.
`epsilon` adalah **exploration/exploitation factor** yang menentukan apakah kita harus lebih memilih eksplorasi daripada eksploitasi atau sebaliknya. Dalam algoritma kita, kita akan memilih tindakan berikutnya sesuai dengan nilai Q-Table dalam persentase `epsilon` dari kasus, dan dalam jumlah kasus yang tersisa kita akan melakukan tindakan acak. Ini memungkinkan kita untuk menjelajahi area ruang pencarian yang belum pernah kita lihat sebelumnya.
`gamma` adalah **faktor diskonto** yang menunjukkan sejauh mana kita harus memprioritaskan reward masa depan dibandingkan reward saat ini.
✅ Dalam hal keseimbangan - memilih tindakan acak (eksplorasi) akan bertindak sebagai dorongan acak ke arah yang salah, dan tiang harus belajar bagaimana memulihkan keseimbangan dari "kesalahan" tersebut.
`epsilon` adalah **faktor eksplorasi/eksploitasi** yang menentukan apakah kita harus lebih memilih eksplorasi daripada eksploitasi atau sebaliknya. Dalam algoritma kita, `epsilon` persen dari kasus akan memilih aksi berikutnya sesuai nilai Q-Table, dan sisanya akan menjalankan aksi acak. Ini memungkinkan kita menjelajahi area ruang pencarian yang belum pernah kita lihat sebelumnya.
### Tingkatkan Algoritma
✅ Dalam hal menjaga keseimbangan - memilih tindakan acak (eksplorasi) akan bertindak seperti pukulan acak ke arah yang salah, dan tiang harus belajar cara mengembalikan keseimbangan dari "kesalahan" tersebut.
Kita juga dapat membuat dua peningkatan pada algoritma kita dari pelajaran sebelumnya:
### Memperbaiki Algoritma
- **Hitung rata-rata reward kumulatif**, selama sejumlah simulasi. Kita akan mencetak kemajuan setiap 5000 iterasi, dan kita akan merata-ratakan reward kumulatif kita selama periode waktu tersebut. Artinya, jika kita mendapatkan lebih dari 195 poin - kita dapat menganggap masalah telah terpecahkan, bahkan dengan kualitas yang lebih tinggi dari yang diperlukan.
Kita juga dapat membuat dua perbaikan pada algoritma dari pelajaran sebelumnya:
- **Hitung hasil kumulatif rata-rata maksimum**, `Qmax`, dan kita akan menyimpan Q-Table yang sesuai dengan hasil tersebut. Saat Anda menjalankan pelatihan, Anda akan melihat bahwa terkadang hasil kumulatif rata-rata mulai menurun, dan kita ingin menyimpan nilai Q-Table yang sesuai dengan model terbaik yang diamati selama pelatihan.
- **Menghitung rata-rata reward kumulatif**, selama sejumlah simulasi. Kita akan mencetak kemajuan setiap 5000 iterasi, dan kita akan mengambil rata-rata reward kumulatif selama periode waktu tersebut. Ini berarti jika kita mendapatkan lebih dari 195 poin - kita dapat menganggap masalah berhasil diselesaikan, dengan kualitas lebih tinggi dari yang diperlukan.
- **Menghitung maksimum rata-rata hasil kumulatif**, `Qmax`, dan kita akan menyimpan Q-Table yang sesuai dengan hasil tersebut. Saat kamu menjalankan pelatihan, kamu akan melihat terkadang hasil rata-ratanya mulai turun, dan kita ingin menyimpan nilai Q-Table yang sesuai dengan model terbaik yang diamati selama pelatihan.
1. Kumpulkan semua reward kumulatif pada setiap simulasi di vektor `rewards` untuk plotting lebih lanjut. (kode blok 11)
1. Kumpulkan semua reward kumulatif pada setiap simulasi dalam vektor `rewards` untuk plotting lebih lanjut. (blok kode 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ Kita juga dapat membuat dua peningkatan pada algoritma kita dari pelajaran sebel
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
# == lakukan simulasi ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
# eksploitasi - memilih aksi sesuai dengan probabilitas Q-Table
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
# eksplorasi - memilih aksi secara acak
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
@ -231,7 +251,7 @@ Kita juga dapat membuat dua peningkatan pada algoritma kita dari pelajaran sebel
Q[(s,a)] = (1 - alpha) * Q.get((s,a),0) + alpha * (rew + gamma * max(qvalues(ns)))
cum_rewards.append(cum_reward)
rewards.append(cum_reward)
# == Periodically print results and calculate average reward ==
# == Secara berkala cetak hasil dan hitung rata-rata hadiah ==
if epoch%5000==0:
print(f"{epoch}: {np.average(cum_rewards)}, alpha={alpha}, epsilon={epsilon}")
if np.average(cum_rewards) > Qmax:
@ -240,25 +260,25 @@ Kita juga dapat membuat dua peningkatan pada algoritma kita dari pelajaran sebel
cum_rewards=[]
```
Apa yang mungkin Anda perhatikan dari hasil tersebut:
Apa yang mungkin kamu perhatikan dari hasil tersebut:
- **Dekat dengan tujuan kita**. Kita sangat dekat dengan mencapai tujuan mendapatkan reward kumulatif sebesar 195 selama 100+ percobaan simulasi berturut-turut, atau kita mungkin telah benar-benar mencapainya! Bahkan jika kita mendapatkan angka yang lebih kecil, kita masih tidak tahu, karena kita merata-ratakan selama 5000 kali, dan hanya 100 kali yang diperlukan dalam kriteria formal.
- **Dekat dengan tujuan kita**. Kita sangat dekat dengan mencapai tujuan mendapatkan 195 reward kumulatif selama 100+ percobaan berturut-turut, atau mungkin kita sudah mencapainya! Bahkan jika nilainya lebih kecil, kita belum tahu pasti, karena kita mengambil rata-rata selama 5000 percobaan, dan hanya 100 percobaan yang diperlukan dalam kriteria formal.
- **Reward mulai turun**. Terkadang reward mulai turun, yang berarti kita dapat "menghancurkan" nilai yang telah dipelajari dalam Q-Table dengan nilai yang membuat situasi menjadi lebih buruk.
- **Reward mulai menurun**. Terkadang reward mulai menurun, yang berarti kita dapat "merusak" nilai yang sudah dipelajari dalam Q-Table dengan nilai yang membuat situasi menjadi lebih buruk.
Pengamatan ini lebih jelas terlihat jika kita memplot kemajuan pelatihan.
Pengamatan ini lebih jelas jika kita plot kemajuan pelatihan.
## Memplot Kemajuan Pelatihan
Selama pelatihan, kita telah mengumpulkan nilai reward kumulatif pada setiap iterasi ke dalam vektor `rewards`. Berikut adalah tampilannya saat kita plot terhadap nomor iterasi:
Selama pelatihan, kita mengumpulkan nilai reward kumulatif pada setiap iterasi di vektor `rewards`. Berikut adalah bagaimana tampilannya saat kita plot terhadap nomor iterasi:
```python
plt.plot(rewards)
```
![kemajuan mentah](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png)
![raw progress](../../../../translated_images/id/train_progress_raw.2adfdf2daea09c59.webp)
Dari grafik ini, tidak mungkin untuk menyimpulkan apa pun, karena sifat proses pelatihan stokastik membuat panjang sesi pelatihan sangat bervariasi. Untuk membuat grafik ini lebih masuk akal, kita dapat menghitung **rata-rata berjalan** selama serangkaian eksperimen, misalnya 100. Hal ini dapat dilakukan dengan mudah menggunakan `np.convolve`: (kode blok 12)
Dari grafik ini, tidak mungkin menyimpulkan apa pun, karena sifat proses pelatihan stokastik, durasi sesi pelatihan sangat bervariasi. Untuk lebih memahami grafik ini, kita dapat menghitung **rata-rata berjalan** selama serangkaian eksperimen, misalnya 100. Ini dapat dilakukan dengan mudah menggunakan `np.convolve`: (blok kode 12)
```python
def running_average(x,window):
@ -267,21 +287,24 @@ def running_average(x,window):
plt.plot(running_average(rewards,100))
```
![kemajuan pelatihan](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png)
![training progress](../../../../translated_images/id/train_progress_runav.c71694a8fa9ab359.webp)
## Mengubah Hyperparameter
Untuk membuat pembelajaran lebih stabil, masuk akal mengubah beberapa hyperparameter selama pelatihan. Secara khusus:
- **Untuk laju pembelajaran**, `alpha`, kita dapat mulai dengan nilai mendekati 1, lalu terus menurunkan parameter. Seiring waktu, kita akan mendapatkan nilai probabilitas bagus dalam Q-Table, sehingga harus menyesuaikannya sedikit, dan tidak menimpa sepenuhnya dengan nilai baru.
## Memvariasikan Hyperparameter
- **Meningkatkan epsilon**. Kita mungkin ingin meningkatkan `epsilon` secara perlahan, untuk mengurangi eksplorasi dan meningkatkan eksploitasi. Mungkin masuk akal mulai dengan nilai epsilon rendah, lalu naikkan mendekati 1.
Untuk membuat pembelajaran lebih stabil, masuk akal untuk menyesuaikan beberapa hyperparameter kita selama pelatihan. Secara khusus:
> **Tugas 1**: Bermain dengan nilai hyperparameter dan lihat apakah kamu bisa mencapai reward kumulatif lebih tinggi. Apakah kamu mendapat lebih dari 195?
- **Untuk learning rate**, `alpha`, kita dapat memulai dengan nilai yang mendekati 1, dan kemudian terus menurunkan parameter tersebut. Seiring waktu, kita akan mendapatkan nilai probabilitas yang baik dalam Q-Table, sehingga kita harus menyesuaikannya sedikit, dan tidak menimpa sepenuhnya dengan nilai baru.
- **Tingkatkan epsilon**. Kita mungkin ingin meningkatkan `epsilon` secara perlahan, agar lebih sedikit eksplorasi dan lebih banyak eksploitasi. Mungkin masuk akal untuk memulai dengan nilai `epsilon` yang lebih rendah, dan meningkatkannya hingga hampir 1.
> **Tugas 1**: Coba ubah nilai hyperparameter dan lihat apakah Anda bisa mencapai total reward yang lebih tinggi. Apakah Anda mendapatkan di atas 195?
> **Tugas 2**: Untuk secara formal menyelesaikan masalah ini, Anda perlu mencapai rata-rata reward sebesar 195 dalam 100 kali percobaan berturut-turut. Ukur itu selama pelatihan dan pastikan bahwa Anda telah secara formal menyelesaikan masalah ini!
> **Tugas 2**: Untuk menyelesaikan masalah secara formal, Anda perlu mendapatkan rata-rata hadiah 195 selama 100 kali percobaan berturut-turut. Ukur itu selama pelatihan dan pastikan bahwa Anda benar-benar telah menyelesaikan masalah!
## Melihat hasilnya secara langsung
## Melihat hasil dalam aksi
Akan menarik untuk melihat bagaimana model yang telah dilatih berperilaku. Mari kita jalankan simulasi dan gunakan strategi pemilihan aksi yang sama seperti saat pelatihan, yaitu sampling berdasarkan distribusi probabilitas di Q-Table: (blok kode 13)
Akan menarik untuk benar-benar melihat bagaimana perilaku model yang sudah dilatih. Mari kita jalankan simulasi dan ikuti strategi pemilihan aksi yang sama seperti saat pelatihan, dengan sampling sesuai distribusi probabilitas di Q-Table: (blok kode 13)
```python
obs = env.reset()
@ -295,7 +318,7 @@ while not done:
env.close()
```
Anda seharusnya melihat sesuatu seperti ini:
Anda harus melihat sesuatu seperti ini:
![a balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
@ -303,22 +326,24 @@ Anda seharusnya melihat sesuatu seperti ini:
## 🚀Tantangan
> **Tugas 3**: Di sini, kita menggunakan salinan akhir dari Q-Table, yang mungkin bukan yang terbaik. Ingat bahwa kita telah menyimpan Q-Table dengan performa terbaik ke dalam variabel `Qbest`! Coba contoh yang sama dengan Q-Table terbaik dengan menyalin `Qbest` ke `Q` dan lihat apakah Anda melihat perbedaannya.
> **Tugas 3**: Di sini, kami menggunakan salinan terakhir dari Q-Table, yang mungkin bukan yang terbaik. Ingat bahwa kami telah menyimpan Q-Table dengan performa terbaik ke dalam variabel `Qbest`! Cobalah contoh yang sama dengan Q-Table berperforma terbaik dengan menyalin `Qbest` ke `Q` dan lihat apakah Anda memperhatikan perbedaannya.
> **Tugas 4**: Di sini kita tidak memilih aksi terbaik di setiap langkah, melainkan sampling berdasarkan distribusi probabilitas yang sesuai. Apakah lebih masuk akal untuk selalu memilih aksi terbaik, dengan nilai Q-Table tertinggi? Ini dapat dilakukan dengan menggunakan fungsi `np.argmax` untuk menemukan nomor aksi yang sesuai dengan nilai Q-Table tertinggi. Implementasikan strategi ini dan lihat apakah itu meningkatkan keseimbangan.
> **Tugas 4**: Di sini kami tidak memilih aksi terbaik pada setiap langkah, tapi sampling sesuai distribusi probabilitas yang sesuai. Apakah lebih masuk akal untuk selalu memilih aksi terbaik, dengan nilai Q-Table tertinggi? Ini bisa dilakukan dengan menggunakan fungsi `np.argmax` untuk mencari nomor aksi yang sesuai dengan nilai Q-Table tertinggi. Implementasikan strategi ini dan lihat apakah itu meningkatkan keseimbangan.
## [Kuis setelah kuliah](https://ff-quizzes.netlify.app/en/ml/)
## [Kuis pasca kuliah](https://ff-quizzes.netlify.app/en/ml/)
## Tugas
[Latih Mountain Car](assignment.md)
[Latih sebuah Mountain Car](assignment.md)
## Kesimpulan
Kita sekarang telah belajar bagaimana melatih agen untuk mencapai hasil yang baik hanya dengan memberikan mereka fungsi reward yang mendefinisikan keadaan yang diinginkan dalam permainan, dan dengan memberikan mereka kesempatan untuk secara cerdas menjelajahi ruang pencarian. Kita telah berhasil menerapkan algoritma Q-Learning dalam kasus lingkungan diskret dan kontinu, tetapi dengan aksi diskret.
Sekarang kita telah belajar bagaimana melatih agen untuk mencapai hasil yang baik hanya dengan memberikan fungsi hadiah yang mendefinisikan keadaan permainan yang diinginkan, dan dengan memberi mereka kesempatan untuk menjelajahi ruang pencarian secara cerdas. Kita telah berhasil menerapkan algoritma Q-Learning dalam kasus lingkungan diskrit dan kontinu, tetapi dengan aksi diskrit.
Penting juga untuk mempelajari situasi di mana keadaan aksi juga kontinu, dan ketika ruang observasi jauh lebih kompleks, seperti gambar dari layar permainan Atari. Dalam masalah-masalah tersebut, kita sering kali perlu menggunakan teknik pembelajaran mesin yang lebih kuat, seperti jaringan saraf, untuk mencapai hasil yang baik. Topik-topik yang lebih maju ini akan menjadi subjek dari kursus AI lanjutan kami yang akan datang.
Penting juga mempelajari situasi dimana ruang aksi juga kontinu, dan ketika ruang observasi jauh lebih kompleks, seperti gambar dari layar permainan Atari. Dalam masalah tersebut kita sering perlu menggunakan teknik pembelajaran mesin yang lebih kuat, seperti jaringan saraf, untuk mencapai hasil yang baik. Topik yang lebih lanjut tersebut adalah subjek dari kursus AI lanjutan kami yang akan datang.
---
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -24,8 +24,8 @@
"language_code": "ms"
},
"1-Introduction/3-fairness/README.md": {
"original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
"translation_date": "2025-09-05T19:33:25+00:00",
"original_hash": "0f00d72169a0d37eecfd16d71e01700a",
"translation_date": "2026-07-14T06:48:33+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "ms"
},
@ -54,8 +54,8 @@
"language_code": "ms"
},
"2-Regression/1-Tools/README.md": {
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
"translation_date": "2025-09-05T18:52:44+00:00",
"original_hash": "0b8635427b582d03ea4ab7089b93e505",
"translation_date": "2026-07-14T06:43:33+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "ms"
},
@ -72,8 +72,8 @@
"language_code": "ms"
},
"2-Regression/2-Data/README.md": {
"original_hash": "7c077988328ebfe33b24d07945f16eca",
"translation_date": "2025-09-05T18:56:22+00:00",
"original_hash": "a58b2c4d16c6b122643391745ac15af6",
"translation_date": "2026-07-14T06:44:47+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "ms"
},
@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "ms"
},
"2-Regression/2-Data/solution/notebook.ipynb": {
"original_hash": "96b95f8cf473481f2f371de8156f1571",
"translation_date": "2026-07-14T06:28:46+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "ms"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:43:58+00:00",
@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
"translation_date": "2025-09-05T20:16:08+00:00",
"translation_date": "2026-07-14T06:46:07+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "ms"
},
@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
"translation_date": "2025-09-05T20:22:05+00:00",
"translation_date": "2026-07-14T06:47:26+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "ms"
},
@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "ms"
},
"__translation_failures__": {
"sketchnotes/LICENSE.md": {
"original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
"source_file": "sketchnotes/LICENSE.md",
"language_code": "ms",
"failure_date": "2026-07-14T06:42:29+00:00",
"status": "failed",
"error_type": "TranslationIncompleteError",
"error_message": "Markdown translation remained incomplete for chunk 1.1.1 of 'LICENSE.md', and the chunk could not be split further.",
"translator_version": "0.20.0",
"failure_policy_version": 1
}
},
"docs/_sidebar.md": {
"original_hash": "68dd06c685f6ce840e0acfa313352e7c",
"translation_date": "2025-09-05T19:20:27+00:00",

@ -1,161 +1,167 @@
# Membina Penyelesaian Pembelajaran Mesin dengan AI yang Bertanggungjawab
![Ringkasan AI yang bertanggungjawab dalam Pembelajaran Mesin dalam bentuk sketchnote](../../../../sketchnotes/ml-fairness.png)
# Membina penyelesaian Pembelajaran Mesin dengan AI bertanggungjawab
![Ringkasan AI bertanggungjawab dalam Pembelajaran Mesin dalam sketchnote](../../../../translated_images/ms/ml-fairness.ef296ebec6afc98a.webp)
> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Kuiz Pra-Kuliah](https://ff-quizzes.netlify.app/en/ml/)
## [Kuiz pra-ceramah](https://ff-quizzes.netlify.app/en/ml/)
## Pengenalan
Dalam kurikulum ini, anda akan mula meneroka bagaimana pembelajaran mesin boleh dan sedang memberi kesan kepada kehidupan seharian kita. Pada masa kini, sistem dan model terlibat dalam tugas membuat keputusan harian seperti diagnosis kesihatan, kelulusan pinjaman, atau pengesanan penipuan. Oleh itu, adalah penting bahawa model ini berfungsi dengan baik untuk memberikan hasil yang boleh dipercayai. Sama seperti mana-mana aplikasi perisian, sistem AI mungkin tidak memenuhi jangkaan atau menghasilkan hasil yang tidak diingini. Itulah sebabnya penting untuk memahami dan menjelaskan tingkah laku model AI.
Dalam kurikulum ini, anda akan mula menemui bagaimana pembelajaran mesin boleh dan sedang mempengaruhi kehidupan seharian kita. Malah sekarang, sistem dan model terlibat dalam tugasan membuat keputusan harian, seperti diagnosis penjagaan kesihatan, kelulusan pinjaman atau mengesan penipuan. Oleh itu, adalah penting bahawa model-model ini berfungsi dengan baik untuk menyediakan hasil yang boleh dipercayai. Sama seperti mana-mana aplikasi perisian, sistem AI akan gagal memenuhi jangkaan atau mempunyai hasil yang tidak diingini. Justeru itu, adalah penting untuk memahami dan menjelaskan tingkah laku model AI.
Bayangkan apa yang boleh berlaku apabila data yang anda gunakan untuk membina model ini kekurangan demografi tertentu seperti bangsa, jantina, pandangan politik, agama, atau secara tidak seimbang mewakili demografi tersebut. Bagaimana pula apabila output model ditafsirkan untuk memihak kepada sesetengah demografi? Apakah akibatnya kepada aplikasi tersebut? Selain itu, apa yang berlaku apabila model menghasilkan hasil yang buruk dan membahayakan orang? Siapa yang bertanggungjawab terhadap tingkah laku sistem AI? Ini adalah beberapa soalan yang akan kita terokai dalam kurikulum ini.
Bayangkan apa yang boleh berlaku apabila data yang anda gunakan untuk membina model ini kekurangan demografi tertentu, seperti bangsa, jantina, pandangan politik, agama, atau secara tidak seimbang mewakili demografi tersebut. Bagaimana pula apabila output model ditafsirkan untuk memihak kepada sesetengah demografi? Apakah akibatnya untuk aplikasi tersebut? Selain itu, apa yang berlaku apabila model mempunyai hasil yang buruk dan membahayakan orang? Siapakah yang bertanggungjawab terhadap tingkah laku sistem AI? Ini adalah beberapa soalan yang akan kita terokai dalam kurikulum ini.
Dalam pelajaran ini, anda akan:
Dalam pelajaran ini, anda akan:
- Meningkatkan kesedaran tentang kepentingan keadilan dalam pembelajaran mesin dan bahaya berkaitan keadilan.
- Mengenali amalan meneroka outlier dan senario luar biasa untuk memastikan kebolehpercayaan dan keselamatan.
- Memahami keperluan untuk memperkasakan semua orang dengan mereka bentuk sistem yang inklusif.
- Meneroka betapa pentingnya melindungi privasi dan keselamatan data serta individu.
- Melihat kepentingan pendekatan kotak kaca untuk menjelaskan tingkah laku model AI.
- Berhati-hati tentang bagaimana akauntabiliti adalah penting untuk membina kepercayaan dalam sistem AI.
- Meningkatkan kesedaran anda tentang kepentingan keadilan dalam pembelajaran mesin dan kemudaratan berkaitan keadilan.
- Membiasakan diri dengan amalan meneroka outlier dan senario luar biasa untuk memastikan kebolehpercayaan dan keselamatan
- Memperoleh pemahaman tentang keperluan memberdayakan semua orang dengan mereka bentuk sistem inklusif
- Meneroka betapa pentingnya melindungi privasi dan keselamatan data dan orang
- Melihat kepentingan mempunyai pendekatan kotak kaca untuk menerangkan tingkah laku model AI
- Berhati-hati bagaimana akauntabiliti adalah penting untuk membina kepercayaan dalam sistem AI
## Prasyarat
Sebagai prasyarat, sila ambil Laluan Pembelajaran "Prinsip AI yang Bertanggungjawab" dan tonton video di bawah mengenai topik ini:
Sebagai prasyarat, sila ambil Laluan Pembelajaran "Prinsip AI Bertanggungjawab" dan tonton video di bawah mengenai topik ini:
Ketahui lebih lanjut tentang AI yang Bertanggungjawab dengan mengikuti [Laluan Pembelajaran](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
Ketahui lebih lanjut mengenai AI Bertanggungjawab dengan mengikuti [Laluan Pembelajaran ini](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
[![Pendekatan Microsoft terhadap AI yang Bertanggungjawab](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Pendekatan Microsoft terhadap AI yang Bertanggungjawab")
[![Pendekatan Microsoft terhadap AI Bertanggungjawab](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Pendekatan Microsoft terhadap AI Bertanggungjawab")
> 🎥 Klik imej di atas untuk video: Pendekatan Microsoft terhadap AI yang Bertanggungjawab
> 🎥 Klik imej di atas untuk video: Pendekatan Microsoft terhadap AI Bertanggungjawab
## Keadilan
Sistem AI harus melayan semua orang dengan adil dan mengelakkan memberi kesan yang berbeza kepada kumpulan orang yang serupa. Sebagai contoh, apabila sistem AI memberikan panduan tentang rawatan perubatan, permohonan pinjaman, atau pekerjaan, ia harus memberikan cadangan yang sama kepada semua orang dengan simptom, keadaan kewangan, atau kelayakan profesional yang serupa. Setiap daripada kita sebagai manusia membawa bias yang diwarisi yang mempengaruhi keputusan dan tindakan kita. Bias ini boleh kelihatan dalam data yang kita gunakan untuk melatih sistem AI. Manipulasi sedemikian kadang-kadang berlaku secara tidak sengaja. Selalunya sukar untuk secara sedar mengetahui bila anda memperkenalkan bias dalam data.
Sistem AI harus melayan semua orang dengan adil dan mengelakkan daripada mempengaruhi kumpulan orang yang serupa dengan cara yang berbeza. Sebagai contoh, apabila sistem AI memberikan panduan mengenai rawatan perubatan, permohonan pinjaman, atau pekerjaan, mereka harus membuat cadangan yang sama kepada semua orang dengan simptom, keadaan kewangan, atau kelayakan profesional yang serupa. Setiap daripada kita sebagai manusia membawa bias yang diwarisi yang mempengaruhi keputusan dan tindakan kita. Bias ini boleh jelas dalam data yang kita gunakan untuk melatih sistem AI. Manipulasi sedemikian kadangkala berlaku tanpa disedari. Selalunya sukar untuk sedar apabila anda memperkenalkan bias dalam data.
**“Ketidakadilan”** merangkumi kesan negatif, atau “bahaya”, kepada sekumpulan orang, seperti yang ditakrifkan dalam istilah bangsa, jantina, umur, atau status kecacatan. Bahaya berkaitan keadilan utama boleh diklasifikasikan sebagai:
**“Ketidakadilan”** merangkumi impak negatif, atau “kemudaratan”, untuk kumpulan orang, seperti yang ditakrifkan berdasarkan bangsa, jantina, umur, atau status kecacatan. Kemudaratan berkaitan keadilan yang utama boleh diklasifikasikan sebagai:
- **Peruntukan**, jika jantina atau etnik, sebagai contoh, lebih diutamakan berbanding yang lain.
- **Kualiti perkhidmatan**. Jika anda melatih data untuk satu senario tertentu tetapi realiti jauh lebih kompleks, ia membawa kepada perkhidmatan yang kurang berprestasi. Sebagai contoh, dispenser sabun tangan yang tidak dapat mengesan orang dengan kulit gelap. [Rujukan](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Pencemaran nama baik**. Mengkritik dan melabel sesuatu atau seseorang secara tidak adil. Sebagai contoh, teknologi pelabelan imej secara terkenal melabelkan imej orang berkulit gelap sebagai gorila.
- **Perwakilan berlebihan atau kurang**. Idea bahawa kumpulan tertentu tidak dilihat dalam profesion tertentu, dan mana-mana perkhidmatan atau fungsi yang terus mempromosikan itu menyumbang kepada bahaya.
- **Stereotaip**. Mengaitkan kumpulan tertentu dengan atribut yang telah ditetapkan. Sebagai contoh, sistem terjemahan bahasa antara Bahasa Inggeris dan Bahasa Turki mungkin mempunyai ketidaktepatan disebabkan oleh perkataan dengan kaitan stereotaip kepada jantina.
- **Peruntukan**, jika jantina atau etnik contohnya dipilih berbanding yang lain.
- **Kualiti perkhidmatan**. Jika anda melatih data untuk satu senario tertentu tetapi realiti adalah lebih kompleks, ia menghasilkan perkhidmatan yang berprestasi rendah. Contohnya, pelepas sabun tangan yang seolah-olah tidak dapat mengesan orang dengan kulit gelap. [Rujukan](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Pencemaran nama baik**. Mengkritik dan melabel sesuatu atau seseorang dengan tidak adil. Contohnya, teknologi pelabelan imej telah terkenal kerana salah melabel imej orang berkulit gelap sebagai gorila.
- **Over- atau under- representasi**. Idea ini adalah bahawa sesetengah kumpulan tidak dilihat dalam profesion tertentu, dan mana-mana perkhidmatan atau fungsi yang terus mempromosikannya menyumbang kepada kemudaratan.
- **Stereotaip**. Mengaitkan kumpulan tertentu dengan atribut yang telah ditetapkan sebelumnya. Contohnya, sistem terjemahan bahasa antara Bahasa Inggeris dan Turki mungkin mempunyai ketidaktepatan disebabkan oleh kata-kata yang mempunyai kaitan stereotaip dengan jantina.
![terjemahan ke Bahasa Turki](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png)
> terjemahan ke Bahasa Turki
![terjemahan ke Turki](../../../../translated_images/ms/gender-bias-translate-en-tr.f185fd8822c2d437.webp)
> terjemahan ke Turki
![terjemahan kembali ke Bahasa Inggeris](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png)
![terjemahan kembali ke Bahasa Inggeris](../../../../translated_images/ms/gender-bias-translate-tr-en.4eee7e3cecb8c70e.webp)
> terjemahan kembali ke Bahasa Inggeris
Apabila mereka bentuk dan menguji sistem AI, kita perlu memastikan bahawa AI adalah adil dan tidak diprogramkan untuk membuat keputusan yang berat sebelah atau diskriminasi, yang juga dilarang untuk dibuat oleh manusia. Menjamin keadilan dalam AI dan pembelajaran mesin kekal sebagai cabaran sosio-teknikal yang kompleks.
Apabila mereka bentuk dan menguji sistem AI, kita perlu memastikan AI adalah adil dan tidak diprogram untuk membuat keputusan berat sebelah atau diskriminasi, yang juga dilarang dilakukan oleh manusia. Menjamin keadilan dalam AI dan pembelajaran mesin kekal sebagai cabaran sosial teknikal yang kompleks.
### Kebolehpercayaan dan keselamatan
Untuk membina kepercayaan, sistem AI perlu boleh dipercayai, selamat, dan konsisten di bawah keadaan biasa dan luar jangka. Adalah penting untuk mengetahui bagaimana sistem AI akan berkelakuan dalam pelbagai situasi, terutamanya apabila ia adalah outlier. Apabila membina penyelesaian AI, perlu ada fokus yang besar pada cara menangani pelbagai keadaan yang mungkin dihadapi oleh penyelesaian AI. Sebagai contoh, kereta pandu sendiri perlu meletakkan keselamatan orang sebagai keutamaan utama. Akibatnya, AI yang menggerakkan kereta perlu mempertimbangkan semua senario yang mungkin dihadapi oleh kereta seperti waktu malam, ribut petir atau salji, kanak-kanak berlari melintasi jalan, haiwan peliharaan, pembinaan jalan, dan sebagainya. Sejauh mana sistem AI boleh menangani pelbagai keadaan dengan kebolehpercayaan dan keselamatan mencerminkan tahap jangkaan yang dipertimbangkan oleh saintis data atau pembangun AI semasa mereka bentuk atau menguji sistem.
Untuk membina kepercayaan, sistem AI perlu boleh dipercayai, selamat, dan konsisten di bawah keadaan normal dan tidak dijangka. Penting untuk mengetahui bagaimana sistem AI akan berkelakuan dalam pelbagai situasi, terutamanya apabila mereka adalah outlier. Apabila membina penyelesaian AI, perlu ada tumpuan besar pada cara menangani pelbagai keadaan yang mungkin ditemui oleh penyelesaian AI. Contohnya, kereta pandu sendiri perlu meletakkan keselamatan orang sebagai keutamaan utama. Akibatnya, AI yang menggerakkan kereta perlu mengambil kira semua senario yang mungkin dihadapi kereta seperti malam, ribut petir atau ribut salji, kanak-kanak berlari melintasi jalan, haiwan peliharaan, pembinaan jalan, dan sebagainya. Sejauh mana sistem AI dapat menangani pelbagai keadaan dengan boleh dipercayai dan selamat mencerminkan tahap jangkaan yang dipertimbangkan oleh saintis data atau pembangun AI semasa mereka bentuk atau menguji sistem itu.
> [🎥 Klik di sini untuk video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### Inklusiviti
Sistem AI harus direka untuk melibatkan dan memperkasakan semua orang. Apabila mereka bentuk dan melaksanakan sistem AI, saintis data dan pembangun AI mengenal pasti dan menangani halangan yang berpotensi dalam sistem yang boleh secara tidak sengaja mengecualikan orang. Sebagai contoh, terdapat 1 bilion orang kurang upaya di seluruh dunia. Dengan kemajuan AI, mereka boleh mengakses pelbagai maklumat dan peluang dengan lebih mudah dalam kehidupan seharian mereka. Dengan menangani halangan, ia mencipta peluang untuk berinovasi dan membangunkan produk AI dengan pengalaman yang lebih baik yang memberi manfaat kepada semua orang.
Sistem AI perlu direka untuk melibatkan dan memberdayakan semua orang. Apabila mereka bentuk dan melaksanakan sistem AI, saintis data dan pembangun AI mengenal pasti dan menangani halangan yang mungkin ada dalam sistem yang boleh secara tidak sengaja mengecualikan orang. Contohnya, terdapat 1 bilion orang kurang upaya di seluruh dunia. Dengan kemajuan AI, mereka boleh mengakses pelbagai maklumat dan peluang dengan lebih mudah dalam kehidupan harian mereka. Dengan menangani halangan, ia mewujudkan peluang untuk berinovasi dan membangunkan produk AI dengan pengalaman yang lebih baik yang memberi manfaat kepada semua orang.
> [🎥 Klik di sini untuk video: inklusiviti dalam AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### Keselamatan dan privasi
### Keselamatan dan privasi
Sistem AI harus selamat dan menghormati privasi orang. Orang kurang percaya kepada sistem yang meletakkan privasi, maklumat, atau nyawa mereka dalam risiko. Apabila melatih model pembelajaran mesin, kita bergantung pada data untuk menghasilkan hasil terbaik. Dalam melakukannya, asal usul data dan integriti mesti dipertimbangkan. Sebagai contoh, adakah data dihantar oleh pengguna atau tersedia secara umum? Seterusnya, semasa bekerja dengan data, adalah penting untuk membangunkan sistem AI yang boleh melindungi maklumat sulit dan menahan serangan. Apabila AI menjadi lebih meluas, melindungi privasi dan mengamankan maklumat peribadi dan perniagaan yang penting menjadi semakin kritikal dan kompleks. Isu privasi dan keselamatan data memerlukan perhatian yang sangat teliti untuk AI kerana akses kepada data adalah penting untuk sistem AI membuat ramalan dan keputusan yang tepat dan bermaklumat tentang orang.
Sistem AI perlu selamat dan menghormati privasi orang. Orang kurang mempercayai sistem yang meletakkan privasi, maklumat, atau nyawa mereka berisiko. Apabila melatih model pembelajaran mesin, kita bergantung pada data untuk menghasilkan hasil terbaik. Dalam melakukan itu, asal usul data dan integritinya mesti diambil kira. Contohnya, adakah data tersebut dihantar oleh pengguna atau tersedia secara awam? Seterusnya, semasa bekerja dengan data, adalah penting untuk membangunkan sistem AI yang dapat melindungi maklumat sulit dan menahan serangan. Dengan AI menjadi lebih meluas, melindungi privasi dan mengamankan maklumat peribadi dan perniagaan yang penting menjadi semakin kritikal dan kompleks. Isu privasi dan keselamatan data memerlukan perhatian khusus untuk AI kerana akses kepada data adalah penting untuk sistem AI membuat ramalan dan keputusan tepat dan berinformasi mengenai orang.
> [🎥 Klik di sini untuk video: keselamatan dalam AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Sebagai industri, kita telah membuat kemajuan yang ketara dalam privasi & keselamatan, yang didorong secara signifikan oleh peraturan seperti GDPR (Peraturan Perlindungan Data Umum).
- Namun dengan sistem AI, kita mesti mengakui ketegangan antara keperluan untuk lebih banyak data peribadi untuk menjadikan sistem lebih peribadi dan berkesan dan privasi.
- Sama seperti kelahiran komputer yang disambungkan dengan internet, kita juga melihat peningkatan besar dalam jumlah isu keselamatan yang berkaitan dengan AI.
- Pada masa yang sama, kita telah melihat AI digunakan untuk meningkatkan keselamatan. Sebagai contoh, kebanyakan pengimbas anti-virus moden didorong oleh heuristik AI hari ini.
- Kita perlu memastikan bahawa proses Sains Data kita bergabung secara harmoni dengan amalan privasi dan keselamatan terkini.
- Sebagai industri, kita telah membuat kemajuan ketara dalam Privasi & keselamatan, didorong dengan ketara oleh peraturan seperti GDPR (Peraturan Perlindungan Data Umum).
- Namun dengan sistem AI kita mesti mengakui ketegangan antara keperluan data peribadi yang lebih banyak untuk menjadikan sistem lebih peribadi dan berkesan dan privasi.
- Sama seperti dengan kelahiran komputer berhubung dengan internet, kita juga melihat peningkatan besar dalam jumlah isu keselamatan berkaitan AI.
- Pada masa yang sama, kita telah melihat AI digunakan untuk meningkatkan keselamatan. Sebagai contoh, kebanyakan pengimbas anti-virus moden kini dipacu oleh heuristik AI.
- Kita perlu memastikan bahawa proses Sains Data kita bergabung secara harmoni dengan amalan privasi dan keselamatan terkini.
### Ketelusan
Sistem AI harus dapat difahami. Bahagian penting ketelusan adalah menjelaskan tingkah laku sistem AI dan komponennya. Meningkatkan pemahaman tentang sistem AI memerlukan pihak berkepentingan memahami bagaimana dan mengapa ia berfungsi supaya mereka dapat mengenal pasti isu prestasi yang berpotensi, kebimbangan keselamatan dan privasi, bias, amalan pengecualian, atau hasil yang tidak diingini. Kami juga percaya bahawa mereka yang menggunakan sistem AI harus jujur dan terbuka tentang bila, mengapa, dan bagaimana mereka memilih untuk menggunakannya. Serta batasan sistem yang mereka gunakan. Sebagai contoh, jika sebuah bank menggunakan sistem AI untuk menyokong keputusan pemberian pinjaman kepada pengguna, adalah penting untuk memeriksa hasilnya dan memahami data mana yang mempengaruhi cadangan sistem. Kerajaan mula mengawal selia AI merentasi industri, jadi saintis data dan organisasi mesti menjelaskan jika sistem AI memenuhi keperluan peraturan, terutamanya apabila terdapat hasil yang tidak diingini.
### Ketelusan
Sistem AI harus difahami. Bahagian penting ketelusan adalah menerangkan tingkah laku sistem AI dan komponennya. Meningkatkan pemahaman tentang sistem AI memerlukan pihak berkepentingan memahami bagaimana dan mengapa ia berfungsi supaya mereka dapat mengenal pasti isu prestasi yang berpotensi, kebimbangan keselamatan dan privasi, bias, amalan pengecualian, atau hasil yang tidak dijangka. Kami juga percaya bahawa mereka yang menggunakan sistem AI harus jujur dan terbuka mengenai bila, mengapa, dan bagaimana mereka memilih untuk menggunakannya. Serta had sistem yang mereka gunakan. Contohnya, jika sebuah bank menggunakan sistem AI untuk menyokong keputusan pemberian pinjaman pengguna, adalah penting untuk meneliti hasil dan memahami data mana yang mempengaruhi cadangan sistem. Kerajaan mula mengawal AI dalam pelbagai industri, jadi saintis data dan organisasi mesti menerangkan jika sistem AI memenuhi keperluan pengawalseliaan, terutama apabila terdapat hasil yang tidak diingini.
> [🎥 Klik di sini untuk video: ketelusan dalam AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Oleh kerana sistem AI sangat kompleks, sukar untuk memahami bagaimana ia berfungsi dan mentafsir hasilnya.
- Kekurangan pemahaman ini mempengaruhi cara sistem ini diuruskan, dioperasikan, dan didokumentasikan.
- Kekurangan pemahaman ini lebih penting lagi mempengaruhi keputusan yang dibuat menggunakan hasil yang dihasilkan oleh sistem ini.
- Kerana sistem AI sangat kompleks, sukar untuk memahami bagaimana ia berfungsi dan mentafsir hasilnya.
- Kekurangan pemahaman ini mempengaruhi cara sistem ini diurus, dioperasikan, dan didokumentasikan.
- Kekurangan pemahaman ini lebih penting mempengaruhi keputusan yang dibuat menggunakan hasil yang dihasilkan oleh sistem ini.
### Akauntabiliti
### Akauntabiliti
Orang yang mereka bentuk dan melaksanakan sistem AI mesti bertanggungjawab terhadap bagaimana sistem mereka beroperasi. Keperluan untuk akauntabiliti adalah sangat penting dengan teknologi penggunaan sensitif seperti pengecaman wajah. Baru-baru ini, terdapat permintaan yang semakin meningkat untuk teknologi pengecaman wajah, terutama dari organisasi penguatkuasaan undang-undang yang melihat potensi teknologi dalam penggunaan seperti mencari kanak-kanak hilang. Namun, teknologi ini berpotensi digunakan oleh kerajaan untuk meletakkan kebebasan asas warganya berisiko dengan, contohnya, membolehkan pengawasan berterusan terhadap individu tertentu. Oleh itu, saintis data dan organisasi perlu bertanggungjawab terhadap bagaimana sistem AI mereka memberi kesan kepada individu atau masyarakat.
Orang yang mereka bentuk dan menggunakan sistem AI mesti bertanggungjawab terhadap cara sistem mereka beroperasi. Keperluan untuk akauntabiliti amat penting dengan teknologi penggunaan sensitif seperti pengecaman wajah. Baru-baru ini, terdapat permintaan yang semakin meningkat untuk teknologi pengecaman wajah, terutamanya daripada organisasi penguatkuasaan undang-undang yang melihat potensi teknologi dalam kegunaan seperti mencari kanak-kanak yang hilang. Walau bagaimanapun, teknologi ini berpotensi digunakan oleh kerajaan untuk meletakkan kebebasan asas rakyat mereka dalam risiko dengan, sebagai contoh, membolehkan pengawasan berterusan terhadap individu tertentu. Oleh itu, saintis data dan organisasi perlu bertanggungjawab terhadap bagaimana sistem AI mereka memberi kesan kepada individu atau masyarakat.
[![Penyelidik AI Terkemuka Memperingatkan Pengawasan Massa Melalui Pengecaman Wajah](../../../../translated_images/ms/accountability.41d8c0f4b85b6231.webp)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Pendekatan Microsoft terhadap AI Bertanggungjawab")
[![Penyelidik AI Terkemuka Memberi Amaran tentang Pengawasan Massa Melalui Pengecaman Wajah](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Pendekatan Microsoft terhadap AI yang Bertanggungjawab")
> 🎥 Klik imej di atas untuk video: Amaran Pengawasan Massa Melalui Pengecaman Wajah
> 🎥 Klik imej di atas untuk video: Amaran tentang Pengawasan Massa Melalui Pengecaman Wajah
Akhirnya satu daripada soalan terbesar untuk generasi kita, sebagai generasi pertama yang membawa AI ke masyarakat, ialah bagaimana memastikan komputer kekal bertanggungjawab kepada orang dan bagaimana memastikan orang yang mereka bentuk komputer kekal bertanggungjawab kepada semua orang lain.
Akhirnya, salah satu soalan terbesar untuk generasi kita, sebagai generasi pertama yang membawa AI kepada masyarakat, adalah bagaimana memastikan komputer akan kekal bertanggungjawab kepada manusia dan bagaimana memastikan orang yang mereka bentuk komputer kekal bertanggungjawab kepada semua orang.
## Penilaian impak
## Penilaian Impak
Sebelum melatih model pembelajaran mesin, adalah penting untuk menjalankan penilaian impak untuk memahami tujuan sistem AI; apakah penggunaan yang dimaksudkan; di mana ia akan digunakan; dan siapa yang akan berinteraksi dengan sistem. Ini berguna untuk penilai atau penguji menilai sistem supaya tahu faktor apa yang perlu dipertimbangkan apabila mengenal pasti risiko berpotensi dan akibat yang dijangkakan.
Sebelum melatih model pembelajaran mesin, adalah penting untuk menjalankan penilaian impak untuk memahami tujuan sistem AI; apa kegunaan yang dimaksudkan; di mana ia akan digunakan; dan siapa yang akan berinteraksi dengan sistem tersebut. Ini berguna untuk pengulas atau penguji yang menilai sistem untuk mengetahui faktor apa yang perlu dipertimbangkan semasa mengenal pasti risiko yang berpotensi dan akibat yang dijangkakan.
Berikut adalah bidang tumpuan apabila menjalankan penilaian impak:
Berikut adalah kawasan fokus semasa menjalankan penilaian impak:
* **Impak buruk ke atas individu**. Sedar tentang sebarang had atau keperluan, penggunaan yang tidak disokong atau sebarang had yang diketahui yang menghalang prestasi sistem adalah penting untuk memastikan sistem tidak digunakan dengan cara yang boleh membahayakan individu.
* **Keperluan data**. Memperoleh pemahaman tentang bagaimana dan di mana sistem akan menggunakan data membolehkan penilai meneroka sebarang keperluan data yang perlu diambil kira (contohnya, peraturan data GDPR atau HIPAA). Selain itu, periksa sama ada sumber atau kuantiti data mencukupi untuk latihan.
* **Ringkasan impak**. Kumpul senarai kemudaratan berpotensi yang boleh timbul daripada menggunakan sistem. Sepanjang kitaran hayat ML, semak jika isu yang dikenal pasti telah dikurangkan atau ditangani.
* **Matlamat yang boleh digunakan** untuk setiap prinsip teras yang enam. Nilai sama ada matlamat dari setiap prinsip telah dipenuhi dan jika terdapat sebarang jurang.
* **Kesan buruk terhadap individu**. Menyedari sebarang sekatan atau keperluan, penggunaan yang tidak disokong atau sebarang batasan yang diketahui yang menghalang prestasi sistem adalah penting untuk memastikan sistem tidak digunakan dengan cara yang boleh menyebabkan bahaya kepada individu.
* **Keperluan data**. Memahami bagaimana dan di mana sistem akan menggunakan data membolehkan pengulas meneroka sebarang keperluan data yang perlu anda perhatikan (contohnya, peraturan data GDPR atau HIPPA). Selain itu, periksa sama ada sumber atau kuantiti data adalah mencukupi untuk latihan.
* **Ringkasan impak**. Kumpulkan senarai potensi bahaya yang boleh timbul daripada menggunakan sistem. Sepanjang kitaran hayat ML, semak sama ada isu yang dikenal pasti telah dikurangkan atau ditangani.
* **Matlamat yang boleh digunakan** untuk setiap enam prinsip teras. Nilai sama ada matlamat daripada setiap prinsip telah dicapai dan jika terdapat sebarang jurang.
## Debugging dengan AI yang Bertanggungjawab
## Penyahpepijatan dengan AI bertanggungjawab
Sama seperti debugging aplikasi perisian, debugging sistem AI adalah proses yang diperlukan untuk mengenal pasti dan menyelesaikan isu dalam sistem. Terdapat banyak faktor yang boleh mempengaruhi model tidak berprestasi seperti yang diharapkan atau bertanggungjawab. Kebanyakan metrik prestasi model tradisional adalah agregat kuantitatif prestasi model, yang tidak mencukupi untuk menganalisis bagaimana model melanggar prinsip AI yang bertanggungjawab. Tambahan pula, model pembelajaran mesin adalah kotak hitam yang menjadikannya sukar untuk memahami apa yang mendorong hasilnya atau memberikan penjelasan apabila ia membuat kesilapan. Kemudian dalam kursus ini, kita akan belajar bagaimana menggunakan papan pemuka AI yang Bertanggungjawab untuk membantu debugging sistem AI. Papan pemuka menyediakan alat holistik untuk saintis data dan pembangun AI untuk melaksanakan:
Sama seperti menyahpepijat aplikasi perisian, penyahpepijatan sistem AI adalah proses yang perlu untuk mengenal pasti dan menyelesaikan isu dalam sistem. Terdapat banyak faktor yang boleh menyebabkan model tidak berprestasi seperti yang dijangka atau secara bertanggungjawab. Kebanyakan metrik prestasi model tradisional adalah agregat kuantitatif prestasi model, yang tidak mencukupi untuk menganalisis bagaimana model melanggar prinsip AI bertanggungjawab. Lebih-lebih lagi, model pembelajaran mesin adalah kotak hitam yang menyukarkan untuk memahami apa yang mendorong hasilnya atau memberikan penjelasan apabila ia melakukan kesilapan. Nanti dalam kursus ini, kita akan belajar bagaimana menggunakan papan pemuka AI bertanggungjawab untuk membantu menyahpepijat sistem AI. Papan pemuka menyediakan alat holistik untuk saintis data dan pembangun AI untuk melakukan:
* **Analisis ralat**. Untuk mengenal pasti pengedaran ralat model yang boleh menjejaskan keadilan atau kebolehpercayaan sistem.
* **Gambaran keseluruhan model**. Untuk menemui di mana terdapat perbezaan dalam prestasi model merentasi kohort data.
* **Analisis data**. Untuk memahami pengedaran data dan mengenal pasti sebarang potensi bias dalam data yang boleh membawa kepada isu keadilan, inklusiviti, dan kebolehpercayaan.
* **Kebolehinterpretasian model**. Untuk memahami apa yang mempengaruhi atau mempengaruhi ramalan model. Ini membantu dalam menjelaskan tingkah laku model, yang penting untuk ketelusan dan akauntabiliti.
* **Analisis ralat**. Untuk mengenal pasti taburan ralat model yang boleh menjejaskan keadilan atau kebolehpercayaan sistem.
* **Sorotan model**. Untuk menemui di mana terdapat ketidaksamaan dalam prestasi model merentasi kumpulan data.
* **Analisis data**. Untuk memahami taburan data dan mengenal pasti sebarang bias berpotensi dalam data yang boleh menyebabkan isu keadilan, inklusiviti, dan kebolehpercayaan.
* **Kebolehtafsiran model**. Untuk memahami apa yang mempengaruhi atau memberi kesan pada ramalan model. Ini membantu dalam menerangkan tingkah laku model, yang penting untuk ketelusan dan akauntabiliti.
## 🚀 Cabaran
Untuk mengelakkan bahaya daripada diperkenalkan sejak awal, kita harus:
## 🚀 Cabaran
Untuk mencegah kemudaratan diperkenalkan pada mulanya, kita harus:
- mempunyai kepelbagaian latar belakang dan perspektif di kalangan orang yang bekerja pada sistem
- melabur dalam set data yang mencerminkan kepelbagaian masyarakat kita
- membangunkan kaedah yang lebih baik sepanjang kitaran hayat pembelajaran mesin untuk mengesan dan membetulkan AI yang bertanggungjawab apabila ia berlaku
- mempunyai kepelbagaian latar belakang dan perspektif dalam kalangan orang yang bekerja pada sistem
- melabur dalam set data yang mencerminkan kepelbagaian masyarakat kita
- membangunkan kaedah yang lebih baik sepanjang kitaran hayat pembelajaran mesin untuk mengesan dan membetulkan AI bertanggungjawab apabila ia berlaku
Fikirkan tentang senario kehidupan sebenar di mana ketidakpercayaan model jelas dalam pembinaan dan penggunaan model. Apa lagi yang perlu kita pertimbangkan?
Fikirkan tentang senario dalam kehidupan sebenar di mana ketidakpercayaan model jelas dalam pembinaan dan penggunaan model. Apa lagi yang perlu kita pertimbangkan?
## [Kuiz Pasca-Kuliah](https://ff-quizzes.netlify.app/en/ml/)
## [Kuiz pasca-ceramah](https://ff-quizzes.netlify.app/en/ml/)
## Ulasan & Kajian Kendiri
## Ulasan & Kajian Kendiri
Dalam pelajaran ini, anda telah mempelajari beberapa asas konsep keadilan dan ketidakadilan dalam pembelajaran mesin.
Tonton bengkel ini untuk mendalami topik:
Dalam pelajaran ini, anda telah mempelajari beberapa asas konsep keadilan dan ketidakadilan dalam pembelajaran mesin.
Tonton bengkel ini untuk mendalami topik-topik berikut:
- Dalam usaha AI yang bertanggungjawab: Membawa prinsip ke amalan oleh Besmira Nushi, Mehrnoosh Sameki dan Amit Sharma
- Mengejar AI yang bertanggungjawab: Membawa prinsip ke amalan oleh Besmira Nushi, Mehrnoosh Sameki dan Amit Sharma
[![Responsible AI Toolbox: Kerangka sumber terbuka untuk membina AI yang bertanggungjawab](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Kerangka sumber terbuka untuk membina AI yang bertanggungjawab")
[![Kotak Alat AI Bertanggungjawab: Rangka kerja sumber terbuka untuk membina AI yang bertanggungjawab](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
> 🎥 Klik imej di atas untuk video: RAI Toolbox: Kerangka sumber terbuka untuk membina AI yang bertanggungjawab oleh Besmira Nushi, Mehrnoosh Sameki, dan Amit Sharma
> 🎥 Klik imej di atas untuk menonton video: RAI Toolbox: Rangka kerja sumber terbuka untuk membina AI yang bertanggungjawab oleh Besmira Nushi, Mehrnoosh Sameki, dan Amit Sharma
Juga, baca:
Juga, baca:
- Pusat sumber RAI Microsoft: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Pusat sumber RAI Microsoft: [Sumber AI Bertanggungjawab Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Kumpulan penyelidikan FATE Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- Kumpulan penyelidikan FATE Microsoft: [FATE: Keadilan, Akauntabiliti, Ketelusan, dan Etika dalam AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
RAI Toolbox:
Kotak Alat RAI:
- [Repositori GitHub Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox)
- [Repositori GitHub Kotak Alat AI Bertanggungjawab](https://github.com/microsoft/responsible-ai-toolbox)
Baca tentang alat Azure Machine Learning untuk memastikan keadilan:
- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
## Tugasan
[Terokai RAI Toolbox](assignment.md)
[Terokai Kotak Alat RAI](assignment.md)
---
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan oleh manusia profesional adalah disyorkan. Kami tidak bertanggungjawab terhadap sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,55 +1,55 @@
# Bermula dengan Python dan Scikit-learn untuk model regresi
# Mulakan dengan Python dan Scikit-learn untuk model regresi
![Ringkasan regresi dalam sketchnote](../../../../sketchnotes/ml-regression.png)
![Ringkasan regresi dalam nota lakaran](../../../../translated_images/ms/ml-regression.4e4f70e3b3ed446e.webp)
> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac)
> Nota lakaran oleh [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Kuiz sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/)
## [Kuiz pra-ceramah](https://ff-quizzes.netlify.app/en/ml/)
> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## Pengenalan
Dalam empat pelajaran ini, anda akan belajar cara membina model regresi. Kita akan membincangkan kegunaannya sebentar lagi. Tetapi sebelum memulakan apa-apa, pastikan anda mempunyai alat yang betul untuk memulakan proses ini!
Dalam empat pelajaran ini, anda akan menemui cara membina model regresi. Kami akan membincangkan kegunaannya sebentar lagi. Tetapi sebelum anda melakukan apa-apa, pastikan anda mempunyai alat yang betul untuk memulakan proses ini!
Dalam pelajaran ini, anda akan belajar cara:
Dalam pelajaran ini, anda akan belajar bagaimana:
- Mengkonfigurasi komputer anda untuk tugas pembelajaran mesin secara tempatan.
- Bekerja dengan Jupyter notebooks.
- Mengkonfigurasi komputer anda untuk tugasan pembelajaran mesin tempatan.
- Bekerja dengan Jupyter Notebooks.
- Menggunakan Scikit-learn, termasuk pemasangan.
- Meneroka regresi linear melalui latihan praktikal.
- Meneroka regresi linear dengan latihan praktikal.
## Pemasangan dan konfigurasi
[![ML untuk pemula - Sediakan alat anda untuk membina model Pembelajaran Mesin](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML untuk pemula - Sediakan alat anda untuk membina model Pembelajaran Mesin")
> 🎥 Klik imej di atas untuk video pendek tentang cara mengkonfigurasi komputer anda untuk ML.
> 🎥 Klik imej di atas untuk video pendek mengenai cara mengkonfigurasi komputer anda untuk ML.
1. **Pasang Python**. Pastikan [Python](https://www.python.org/downloads/) dipasang pada komputer anda. Anda akan menggunakan Python untuk banyak tugas sains data dan pembelajaran mesin. Kebanyakan sistem komputer sudah mempunyai Python yang dipasang. Terdapat juga [Pakej Pengkodan Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) yang berguna untuk memudahkan pemasangan bagi sesetengah pengguna.
1. **Pasang Python**. Pastikan [Python](https://www.python.org/downloads/) dipasang pada komputer anda. Anda akan menggunakan Python untuk banyak tugasan sains data dan pembelajaran mesin. Kebanyakan sistem komputer sudah termasuk pemasangan Python. Terdapat juga [Pakej Kod Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) yang berguna untuk memudahkan penyediaan bagi sesetengah pengguna.
Walau bagaimanapun, beberapa penggunaan Python memerlukan satu versi perisian, manakala yang lain memerlukan versi yang berbeza. Oleh itu, adalah berguna untuk bekerja dalam [persekitaran maya](https://docs.python.org/3/library/venv.html).
Walau bagaimanapun, beberapa kegunaan Python memerlukan versi perisian yang berbeza. Oleh itu, adalah berguna untuk bekerja dalam [persekitaran maya](https://docs.python.org/3/library/venv.html).
2. **Pasang Visual Studio Code**. Pastikan anda mempunyai Visual Studio Code yang dipasang pada komputer anda. Ikuti arahan ini untuk [memasang Visual Studio Code](https://code.visualstudio.com/) untuk pemasangan asas. Anda akan menggunakan Python dalam Visual Studio Code dalam kursus ini, jadi anda mungkin ingin menyegarkan pengetahuan anda tentang cara [mengkonfigurasi Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) untuk pembangunan Python.
2. **Pasang Visual Studio Code**. Pastikan Visual Studio Code dipasang pada komputer anda. Ikuti arahan ini untuk [memasang Visual Studio Code](https://code.visualstudio.com/) bagi pemasangan asas. Anda akan menggunakan Python dalam Visual Studio Code dalam kursus ini, jadi anda mungkin mahu mengasah kemahiran bagaimana untuk [mengkonfigurasi Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) untuk pembangunan Python.
> Biasakan diri dengan Python dengan melalui koleksi [modul pembelajaran ini](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
> Biasakan diri dengan Python dengan melalui koleksi [modul Pembelajaran](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
>
> [![Sediakan Python dengan Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Sediakan Python dengan Visual Studio Code")
> [![Pasang Python dengan Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Pasang Python dengan Visual Studio Code")
>
> 🎥 Klik imej di atas untuk video: menggunakan Python dalam VS Code.
3. **Pasang Scikit-learn**, dengan mengikuti [arahan ini](https://scikit-learn.org/stable/install.html). Oleh kerana anda perlu memastikan bahawa anda menggunakan Python 3, disarankan agar anda menggunakan persekitaran maya. Perhatikan, jika anda memasang pustaka ini pada Mac M1, terdapat arahan khas pada halaman yang dipautkan di atas.
3. **Pasang Scikit-learn**, dengan mengikuti [arahan ini](https://scikit-learn.org/stable/install.html). Oleh kerana anda perlu memastikan menggunakan Python 3, adalah disyorkan menggunakan persekitaran maya. Nota, jika anda memasang perpustakaan ini pada Mac M1, terdapat arahan khas di halaman pautan di atas.
4. **Pasang Jupyter Notebook**. Anda perlu [memasang pakej Jupyter](https://pypi.org/project/jupyter/).
1. **Pasang Jupyter Notebook**. Anda perlu [memasang pakej Jupyter](https://pypi.org/project/jupyter/).
## Persekitaran pengarang ML anda
## Persekitaran penulisan ML anda
Anda akan menggunakan **notebooks** untuk membangunkan kod Python anda dan mencipta model pembelajaran mesin. Jenis fail ini adalah alat biasa untuk saintis data, dan ia boleh dikenalpasti melalui akhiran atau sambungan `.ipynb`.
Anda akan menggunakan **notebook** untuk membangunkan kod Python dan mencipta model pembelajaran mesin. Jenis fail ini adalah alat biasa untuk saintis data, dan ia boleh dikenali melalui akhiran atau sambungan `.ipynb`.
Notebooks adalah persekitaran interaktif yang membolehkan pembangun untuk menulis kod serta menambah nota dan dokumentasi di sekitar kod, yang sangat berguna untuk projek eksperimen atau berorientasikan penyelidikan.
Notebook ialah persekitaran interaktif yang membolehkan pembangun menulis kod dan menambah nota serta dokumentasi di sekitar kod yang sangat membantu untuk projek eksperimen atau berorientasikan penyelidikan.
[![ML untuk pemula - Sediakan Jupyter Notebooks untuk mula membina model regresi](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML untuk pemula - Sediakan Jupyter Notebooks untuk mula membina model regresi")
> 🎥 Klik imej di atas untuk video pendek melalui latihan ini.
> 🎥 Klik imej di atas untuk video pendek yang menunjukkan latihan ini.
### Latihan - bekerja dengan notebook
@ -57,62 +57,63 @@ Dalam folder ini, anda akan menemui fail _notebook.ipynb_.
1. Buka _notebook.ipynb_ dalam Visual Studio Code.
Pelayan Jupyter akan bermula dengan Python 3+ dimulakan. Anda akan menemui kawasan dalam notebook yang boleh `dijalankan`, iaitu potongan kod. Anda boleh menjalankan blok kod dengan memilih ikon yang kelihatan seperti butang main.
Pelayan Jupyter akan bermula dengan Python 3+ dimulakan. Anda akan menjumpai bahagian notebook yang boleh `run`, potongan kod. Anda boleh menjalankan blok kod dengan memilih ikon yang kelihatan seperti butang main.
2. Pilih ikon `md` dan tambahkan sedikit markdown, serta teks berikut **# Selamat datang ke notebook anda**.
1. Pilih ikon `md` dan tambahkan sedikit markdown, serta teks berikut **# Selamat datang ke notebook anda**.
Seterusnya, tambahkan beberapa kod Python.
Seterusnya, tambah sedikit kod Python.
3. Taip **print('hello notebook')** dalam blok kod.
4. Pilih anak panah untuk menjalankan kod.
1. Taip **print('hello notebook')** dalam blok kod.
1. Pilih anak panah untuk menjalankan kod.
Anda sepatutnya melihat kenyataan yang dicetak:
Anda harus melihat pernyataan cetak:
```output
hello notebook
```
![VS Code dengan notebook dibuka](../../../../2-Regression/1-Tools/images/notebook.jpg)
![VS Code dengan notebook dibuka](../../../../translated_images/ms/notebook.4a3ee31f396b8832.webp)
Anda boleh menyelitkan kod anda dengan komen untuk mendokumentasikan notebook secara sendiri.
Anda boleh menyelingi kod anda dengan komen untuk mendokumentasikan notebook secara sendiri.
✅ Fikirkan sebentar tentang betapa berbezanya persekitaran kerja pembangun web berbanding dengan saintis data.
✅ Fikirkan sekejap bagaimana persekitaran kerja pembangun web berbeza dengan persekitaran saintis data.
## Memulakan dengan Scikit-learn
## Bersedia dengan Scikit-learn
Sekarang Python telah disediakan dalam persekitaran tempatan anda, dan anda sudah selesa dengan Jupyter notebooks, mari kita menjadi sama selesa dengan Scikit-learn (disebut `sci` seperti dalam `science`). Scikit-learn menyediakan [API yang luas](https://scikit-learn.org/stable/modules/classes.html#api-ref) untuk membantu anda melaksanakan tugas ML.
Sekarang Python telah disediakan dalam persekitaran tempatan anda, dan anda sudah selesa dengan Jupyter Notebooks, mari kita juga biasa dengan Scikit-learn (sebut `sci` seperti dalam `science`). Scikit-learn menyediakan [API yang luas](https://scikit-learn.org/stable/modules/classes.html#api-ref) untuk membantu anda melaksanakan tugasan ML.
Menurut [laman web mereka](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn adalah pustaka pembelajaran mesin sumber terbuka yang menyokong pembelajaran terarah dan tidak terarah. Ia juga menyediakan pelbagai alat untuk pemasangan model, prapemprosesan data, pemilihan model dan penilaian, serta banyak utiliti lain."
Menurut [laman web mereka](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn adalah perpustakaan pembelajaran mesin sumber terbuka yang menyokong pembelajaran terpantau dan tidak terpantau. Ia juga menyediakan pelbagai alat untuk pemasangan model, prapengendalian data, pemilihan dan penilaian model, dan banyak utiliti lain."
Dalam kursus ini, anda akan menggunakan Scikit-learn dan alat lain untuk membina model pembelajaran mesin untuk melaksanakan apa yang kita panggil tugas 'pembelajaran mesin tradisional'. Kami sengaja mengelakkan rangkaian neural dan pembelajaran mendalam, kerana ia lebih sesuai diliputi dalam kurikulum 'AI untuk Pemula' kami yang akan datang.
Dalam kursus ini, anda akan menggunakan Scikit-learn dan alat lain untuk membina model pembelajaran mesin bagi melaksanakan apa yang kami panggil tugasan 'pembelajaran mesin tradisional'. Kami sengaja mengelakkan rangkaian neural dan pembelajaran mendalam kerana ia lebih sesuai dibincangkan dalam kurikulum 'AI untuk Pemula' yang akan datang.
Scikit-learn memudahkan untuk membina model dan menilai mereka untuk digunakan. Ia terutamanya memberi tumpuan kepada penggunaan data berangka dan mengandungi beberapa dataset siap sedia untuk digunakan sebagai alat pembelajaran. Ia juga termasuk model pra-bina untuk pelajar mencuba. Mari kita terokai proses memuatkan data yang telah dipakejkan dan menggunakan estimator terbina untuk model ML pertama dengan Scikit-learn menggunakan data asas.
Scikit-learn memudahkan pembangunan model dan penilaiannya untuk kegunaan. Ia terutamanya fokus pada penggunaan data berangka dan mengandungi beberapa set data siap guna sebagai alat pembelajaran. Ia juga termasuk model terbina khas untuk pelajar cuba. Mari kita teroka proses memuatkan data pra-pakej dan menggunakan penilai terbina dalam model ML pertama dengan Scikit-learn menggunakan data asas.
## Latihan - notebook Scikit-learn pertama anda
> Tutorial ini diilhamkan oleh [contoh regresi linear](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) di laman web Scikit-learn.
[![ML untuk pemula - Projek Regresi Linear Pertama Anda dalam Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML untuk pemula - Projek Regresi Linear Pertama Anda dalam Python")
> 🎥 Klik imej di atas untuk video pendek melalui latihan ini.
[![ML untuk pemula - Projek Regresi Linear Pertama anda dalam Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML untuk pemula - Projek Regresi Linear Pertama anda dalam Python")
Dalam fail _notebook.ipynb_ yang berkaitan dengan pelajaran ini, kosongkan semua sel dengan menekan ikon 'tong sampah'.
> 🎥 Klik imej di atas untuk video pendek yang menunjukkan latihan ini.
Dalam bahagian ini, anda akan bekerja dengan dataset kecil tentang diabetes yang dibina dalam Scikit-learn untuk tujuan pembelajaran. Bayangkan anda ingin menguji rawatan untuk pesakit diabetes. Model Pembelajaran Mesin mungkin membantu anda menentukan pesakit mana yang akan memberi tindak balas lebih baik terhadap rawatan, berdasarkan gabungan pembolehubah. Malah model regresi yang sangat asas, apabila divisualisasikan, mungkin menunjukkan maklumat tentang pembolehubah yang akan membantu anda mengatur ujian klinikal teori anda.
Dalam fail _notebook.ipynb_ yang berkaitan dengan pelajaran ini, bersihkan semua sel dengan menekan ikon 'tong sampah'.
✅ Terdapat banyak jenis kaedah regresi, dan yang mana anda pilih bergantung pada jawapan yang anda cari. Jika anda ingin meramalkan ketinggian yang mungkin untuk seseorang berdasarkan umur tertentu, anda akan menggunakan regresi linear, kerana anda mencari **nilai berangka**. Jika anda berminat untuk mengetahui sama ada jenis masakan harus dianggap vegan atau tidak, anda mencari **penugasan kategori**, jadi anda akan menggunakan regresi logistik. Anda akan belajar lebih lanjut tentang regresi logistik kemudian. Fikirkan sedikit tentang beberapa soalan yang boleh anda tanyakan kepada data, dan kaedah mana yang lebih sesuai.
Dalam seksyen ini, anda akan bekerja dengan set data kecil tentang diabetes yang dibina dalam Scikit-learn untuk tujuan pembelajaran. Bayangkan anda ingin menguji rawatan untuk pesakit diabetes. Model Pembelajaran Mesin mungkin membantu anda menentukan pesakit mana yang akan memberi tindak balas lebih baik kepada rawatan berdasarkan gabungan pembolehubah. Walaupun model regresi yang sangat asas, apabila divisualisasikan, mungkin menunjukkan maklumat tentang pembolehubah yang membantu anda mengatur ujian klinikal teori anda.
Mari kita mulakan tugas ini.
✅ Terdapat banyak jenis kaedah regresi, dan pilihan anda bergantung pada jawapan yang anda cari. Jika anda ingin meramalkan tinggi badan yang mungkin bagi seseorang pada umur tertentu, anda akan menggunakan regresi linear kerana anda mencari **nilai berangka**. Jika anda berminat untuk mengetahui sama ada jenis masakan dianggap vegan atau tidak, anda mencari **penentuan kategori**, jadi anda akan menggunakan regresi logistik. Anda akan belajar lebih lanjut tentang regresi logistik nanti. Fikirkan sedikit tentang beberapa soalan yang anda boleh ajukan kepada data, dan kaedah mana yang lebih sesuai.
### Import pustaka
Mari kita mula tugasan ini.
Untuk tugas ini, kita akan mengimport beberapa pustaka:
### Import perpustakaan
- **matplotlib**. Ia adalah alat [grafik yang berguna](https://matplotlib.org/) dan kita akan menggunakannya untuk mencipta plot garis.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) adalah pustaka berguna untuk mengendalikan data berangka dalam Python.
- **sklearn**. Ini adalah pustaka [Scikit-learn](https://scikit-learn.org/stable/user_guide.html).
Untuk tugasan ini kita akan import beberapa perpustakaan:
Import beberapa pustaka untuk membantu tugas anda.
- **matplotlib**. Ia ialah [alat graf](https://matplotlib.org/) yang berguna dan kami akan menggunakannya untuk membuat plot garis.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) adalah perpustakaan berguna untuk mengendalikan data berangka dalam Python.
- **sklearn**. Ini adalah perpustakaan [Scikit-learn](https://scikit-learn.org/stable/user_guide.html).
Import beberapa perpustakaan untuk membantu anda dalam tugasan.
1. Tambahkan import dengan menaip kod berikut:
@ -122,26 +123,26 @@ Import beberapa pustaka untuk membantu tugas anda.
from sklearn import datasets, linear_model, model_selection
```
Di atas, anda mengimport `matplotlib`, `numpy` dan anda mengimport `datasets`, `linear_model` dan `model_selection` dari `sklearn`. `model_selection` digunakan untuk membahagikan data kepada set latihan dan ujian.
Di atas anda mengimport `matplotlib`, `numpy` dan anda mengimport `datasets`, `linear_model` dan `model_selection` dari `sklearn`. `model_selection` digunakan untuk membahagikan data kepada set latihan dan ujian.
### Dataset diabetes
### Set data diabetes
Dataset [diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) yang dibina dalam Scikit-learn termasuk 442 sampel data tentang diabetes, dengan 10 pembolehubah ciri, beberapa daripadanya termasuk:
Set data bawaan [diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) mengandungi 442 sampel data diabetes, dengan 10 pembolehubah ciri, beberapa daripadanya termasuk:
- age: umur dalam tahun
- umur: umur dalam tahun
- bmi: indeks jisim badan
- bp: tekanan darah purata
- s1 tc: T-Cells (sejenis sel darah putih)
- s1 tc: Sel T (sejenis sel darah putih)
Dataset ini termasuk konsep 'sex' sebagai pembolehubah ciri yang penting untuk penyelidikan tentang diabetes. Banyak dataset perubatan termasuk jenis klasifikasi binari ini. Fikirkan sedikit tentang bagaimana pengkategorian seperti ini mungkin mengecualikan bahagian tertentu populasi daripada rawatan.
Set data ini termasuk konsep 'jantina' sebagai pembolehubah ciri penting dalam penyelidikan diabetes. Banyak set data perubatan mengandungi klasifikasi binari seperti ini. Fikirkan sedikit bagaimana pengelasan seperti ini mungkin mengecualikan sebahagian populasi daripada rawatan.
Sekarang, muatkan data X dan y.
Sekarang, muat naik data X dan y.
> 🎓 Ingat, ini adalah pembelajaran terarah, dan kita memerlukan sasaran 'y' yang bernama.
> 🎓 Ingat, ini adalah pembelajaran terpantau, dan kita perlu ada sasaran 'y' yang dinamakan.
Dalam sel kod baru, muatkan dataset diabetes dengan memanggil `load_diabetes()`. Input `return_X_y=True` menandakan bahawa `X` akan menjadi matriks data, dan `y` akan menjadi sasaran regresi.
Dalam sel kod baru, muat set data diabetes dengan memanggil `load_diabetes()`. Input `return_X_y=True` memberitahu bahawa `X` akan menjadi matriks data, dan `y` akan menjadi sasaran regresi.
1. Tambahkan beberapa arahan cetak untuk menunjukkan bentuk matriks data dan elemen pertamanya:
1. Tambah beberapa perintah print untuk menunjukkan bentuk matriks data dan unsur pertamanya:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@ -149,9 +150,9 @@ Dalam sel kod baru, muatkan dataset diabetes dengan memanggil `load_diabetes()`.
print(X[0])
```
Apa yang anda dapat sebagai respons adalah tuple. Apa yang anda lakukan adalah menetapkan dua nilai pertama tuple kepada `X` dan `y` masing-masing. Ketahui lebih lanjut [tentang tuple](https://wikipedia.org/wiki/Tuple).
Apa yang anda dapat balik sebagai respons, ialah tuple. Anda sedang memberikan dua nilai pertama tuple kepada `X` dan `y` secara berasingan. Ketahui lebih lanjut [ mengenai tuple](https://wikipedia.org/wiki/Tuple).
Anda boleh melihat bahawa data ini mempunyai 442 item yang dibentuk dalam array 10 elemen:
Anda boleh lihat data ini ada 442 item yang dibentuk dalam array 10 elemen:
```text
(442, 10)
@ -159,9 +160,9 @@ Dalam sel kod baru, muatkan dataset diabetes dengan memanggil `load_diabetes()`.
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ Fikirkan sedikit tentang hubungan antara data dan sasaran regresi. Regresi linear meramalkan hubungan antara ciri X dan pembolehubah sasaran y. Bolehkah anda mencari [sasaran](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) untuk dataset diabetes dalam dokumentasi? Apa yang dataset ini tunjukkan, memandangkan sasaran?
✅ Fikirkan sedikit tentang hubungan antara data dan sasaran regresi. Regresi linear meramalkan hubungan antara ciri X dan pembolehubah sasaran y. Bolehkah anda temukan [sasaran](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) untuk set data diabetes dalam dokumentasi? Apakah yang dataset ini demonstrasikan, memandangkan sasaran itu?
2. Seterusnya, pilih sebahagian dataset ini untuk diplot dengan memilih lajur ke-3 dataset. Anda boleh melakukannya dengan menggunakan operator `:` untuk memilih semua baris, dan kemudian memilih lajur ke-3 menggunakan indeks (2). Anda juga boleh membentuk semula data menjadi array 2D - seperti yang diperlukan untuk plot - dengan menggunakan `reshape(n_rows, n_columns)`. Jika salah satu parameter adalah -1, dimensi yang sepadan dikira secara automatik.
2. Seterusnya, pilih sebahagian set data ini untuk dilukis dengan memilih lajur ke-3 dataset. Anda boleh lakukan ini dengan menggunakan operator `:` untuk memilih semua baris, dan kemudian memilih lajur ke-3 menggunakan indeks (2). Anda juga boleh bentuk semula data menjadi array 2D - seperti yang diperlukan untuk plot - dengan menggunakan `reshape(n_rows, n_columns)`. Jika salah satu parameter adalah -1, dimensi yang bersesuaian dikira secara automatik.
```python
X = X[:, 2]
@ -170,28 +171,28 @@ Dalam sel kod baru, muatkan dataset diabetes dengan memanggil `load_diabetes()`.
✅ Pada bila-bila masa, cetak data untuk memeriksa bentuknya.
3. Sekarang setelah anda mempunyai data yang siap untuk diplot, anda boleh melihat sama ada mesin dapat membantu menentukan pemisahan logik antara nombor dalam dataset ini. Untuk melakukan ini, anda perlu membahagikan kedua-dua data (X) dan sasaran (y) kepada set ujian dan latihan. Scikit-learn mempunyai cara yang mudah untuk melakukan ini; anda boleh membahagikan data ujian anda pada titik tertentu.
3. Sekarang data sudah sedia untuk dilukis, anda boleh lihat sama ada mesin boleh membantu menentukan pembahagian logik antara nombor dalam set data ini. Untuk ini, anda perlu membahagikan kedua-dua data (X) dan sasaran (y) kepada set ujian dan latihan. Scikit-learn ada cara mudah untuk melakukan ini; anda boleh membahagikan data ujian anda pada titik yang diberikan.
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. Sekarang anda bersedia untuk melatih model anda! Muatkan model regresi linear dan latih dengan set latihan X dan y anda menggunakan `model.fit()`:
4. Sekarang anda bersedia untuk melatih model! Muat model regresi linear dan latih dengan set latihan X dan y menggunakan `model.fit()`:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
`model.fit()` adalah fungsi yang akan anda lihat dalam banyak pustaka ML seperti TensorFlow.
`model.fit()` adalah fungsi yang anda akan jumpa dalam banyak perpustakaan ML seperti TensorFlow
5. Kemudian, buat ramalan menggunakan data ujian, dengan menggunakan fungsi `predict()`. Ini akan digunakan untuk melukis garis antara kumpulan data model.
5. Kemudian, cipta ramalan menggunakan data ujian, dengan fungsi `predict()`. Ini akan digunakan untuk melukis garis antara kumpulan data
```python
y_pred = model.predict(X_test)
```
6. Sekarang tiba masanya untuk menunjukkan data dalam plot. Matplotlib adalah alat yang sangat berguna untuk tugas ini. Buat scatterplot semua data ujian X dan y, dan gunakan ramalan untuk melukis garis di tempat yang paling sesuai, antara kumpulan data model.
6. Kini tiba masa untuk memaparkan data dalam plot. Matplotlib adalah alat yang sangat berguna untuk tugasan ini. Buat scatterplot semua data X dan y ujian, dan gunakan ramalan untuk melukis garis di tempat yang paling sesuai, antara kelompok data model.
```python
plt.scatter(X_test, y_test, color='black')
@ -202,23 +203,24 @@ Dalam sel kod baru, muatkan dataset diabetes dengan memanggil `load_diabetes()`.
plt.show()
```
![scatterplot menunjukkan titik data tentang diabetes](../../../../2-Regression/1-Tools/images/scatterplot.png)
✅ Fikirkan sedikit tentang apa yang sedang berlaku di sini. Garis lurus sedang melalui banyak titik kecil data, tetapi apa sebenarnya yang sedang dilakukan? Bolehkah anda melihat bagaimana anda sepatutnya dapat menggunakan garis ini untuk meramalkan di mana titik data baru yang belum dilihat sepatutnya sesuai dalam hubungan dengan paksi y plot? Cuba nyatakan dalam kata-kata kegunaan praktikal model ini.
![scatterplot menunjukkan titik data berkaitan diabetes](../../../../translated_images/ms/scatterplot.ad8b356bcbb33be6.webp)
Tahniah, anda telah membina model regresi linear pertama anda, mencipta ramalan dengannya, dan memaparkannya dalam plot!
✅ Fikirkan sedikit tentang apa yang sedang berlaku di sini. Garisan lurus sedang melintasi banyak titik data kecil, tetapi apa sebenarnya yang dilakukannya? Bolehkah anda lihat bagaimana anda sepatutnya dapat menggunakan garisan ini untuk meramalkan di mana titik data baru yang belum dilihat sepatutnya diletakkan berhubung dengan paksi y plot tersebut? Cuba nyatakan secara praktikal kegunaan model ini.
Tahniah, anda telah membina model regresi linear pertama anda, membuat ramalan dengannya, dan memaparkannya dalam plot!
---
## 🚀Cabaran
Plotkan pemboleh ubah yang berbeza daripada dataset ini. Petunjuk: edit baris ini: `X = X[:,2]`. Berdasarkan sasaran dataset ini, apakah yang anda dapat temui tentang perkembangan diabetes sebagai penyakit?
## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/)
Plotkan pemboleh ubah yang berbeza dari dataset ini. Petunjuk: sunting baris ini: `X = X[:,2]`. Memandangkan sasaran dataset ini, apa yang anda dapat temui tentang perkembangan diabetes sebagai penyakit?
## [Kuiz pasca kuliah](https://ff-quizzes.netlify.app/en/ml/)
## Ulasan & Kajian Kendiri
## Ulasan & Belajar Kendiri
Dalam tutorial ini, anda bekerja dengan regresi linear mudah, bukannya regresi univariat atau regresi berganda. Baca sedikit tentang perbezaan antara kaedah-kaedah ini, atau lihat [video ini](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef).
Dalam tutorial ini, anda bekerja dengan regresi linear mudah, bukan regresi linear univariat atau berganda. Baca sedikit tentang perbezaan antara kaedah-kaedah ini, atau lihat [video ini](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)
Baca lebih lanjut tentang konsep regresi dan fikirkan tentang jenis soalan yang boleh dijawab oleh teknik ini. Ambil [tutorial ini](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) untuk mendalami pemahaman anda.
Baca lebih lanjut tentang konsep regresi dan fikirkan tentang jenis soalan apa yang boleh dijawab oleh teknik ini. Ikuti [tutorial ini](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) untuk mendalami pemahaman anda.
## Tugasan
@ -226,5 +228,7 @@ Baca lebih lanjut tentang konsep regresi dan fikirkan tentang jenis soalan yang
---
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan oleh manusia profesional adalah disyorkan. Kami tidak bertanggungjawab terhadap sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,60 +1,60 @@
# Bina model regresi menggunakan Scikit-learn: sediakan dan visualisasikan data
# Membina model regresi menggunakan Scikit-learn: menyediakan dan memvisualisasikan data
![Infografik visualisasi data](../../../../2-Regression/2-Data/images/data-visualization.png)
![Infografik visualisasi data](../../../../translated_images/ms/data-visualization.54e56dded7c1a804.webp)
Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Kuiz sebelum kuliah](https://ff-quizzes.netlify.app/en/ml/)
## [Kuiz pra-ceramah](https://ff-quizzes.netlify.app/en/ml/)
> ### [Pelajaran ini tersedia dalam R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
> ### [Pengajaran ini tersedia dalam R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## Pengenalan
Sekarang anda telah bersedia dengan alat yang diperlukan untuk mula membina model pembelajaran mesin menggunakan Scikit-learn, anda sudah bersedia untuk mula bertanya soalan kepada data anda. Semasa anda bekerja dengan data dan menerapkan penyelesaian ML, adalah sangat penting untuk memahami cara bertanya soalan yang betul untuk membuka potensi dataset anda dengan tepat.
Sekarang bahawa anda telah menyediakan alat yang anda perlukan untuk mula menangani pembinaan model pembelajaran mesin dengan Scikit-learn, anda sudah bersedia untuk mula bertanya soalan tentang data anda. Semasa anda bekerja dengan data dan menggunakan penyelesaian ML, sangat penting untuk memahami cara bertanya soalan yang betul untuk membuka potensi dataset anda dengan betul.
Dalam pelajaran ini, anda akan belajar:
Dalam pengajaran ini, anda akan belajar:
- Cara menyediakan data anda untuk pembinaan model.
- Cara menggunakan Matplotlib untuk visualisasi data.
- Cara menggunakan Seaborn untuk visualisasi data yang lebih ekspresif.
## Bertanya soalan yang betul kepada data anda
## Bertanya soalan yang betul mengenai data anda
Soalan yang anda perlukan jawapannya akan menentukan jenis algoritma ML yang akan anda gunakan. Dan kualiti jawapan yang anda peroleh sangat bergantung pada sifat data anda.
Soalan yang anda perlukan untuk dijawab akan menentukan jenis algoritma ML yang akan anda gunakan. Dan kualiti jawapan yang anda terima akan sangat bergantung pada sifat data anda.
Lihat [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang disediakan untuk pelajaran ini. Anda boleh membuka fail .csv ini dalam VS Code. Sekilas pandang menunjukkan terdapat kekosongan dan campuran data string dan numerik. Terdapat juga kolum yang pelik dipanggil 'Package' di mana datanya adalah campuran antara 'sacks', 'bins' dan nilai lain. Data ini, sebenarnya, agak bersepah.
Lihat [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang disediakan untuk pengajaran ini. Anda boleh membuka fail .csv ini dalam VS Code. Sekilas pandang segera menunjukkan terdapat ruang kosong dan campuran data rentetan dan berangka. Ada juga lajur aneh yang dipanggil 'Package' di mana datanya campuran antara 'sacks', 'bins' dan nilai lain. Malah, data itu agak berantakan.
[![ML untuk pemula - Cara Menganalisis dan Membersihkan Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML untuk pemula - Cara Menganalisis dan Membersihkan Dataset")
> 🎥 Klik imej di atas untuk video pendek yang menunjukkan cara menyediakan data untuk pelajaran ini.
> 🎥 Klik imej di atas untuk video pendek yang menunjukkan cara menyediakan data untuk pengajaran ini.
Sebenarnya, adalah tidak biasa untuk menerima dataset yang sepenuhnya siap digunakan untuk mencipta model ML secara langsung. Dalam pelajaran ini, anda akan belajar cara menyediakan dataset mentah menggunakan pustaka Python standard. Anda juga akan belajar pelbagai teknik untuk memvisualisasikan data.
Hakikatnya, tidaklah biasa diberikan dataset yang sudah lengkap untuk terus digunakan membuat model ML dengan serta-merta. Dalam pengajaran ini, anda akan belajar cara menyediakan dataset mentah menggunakan perpustakaan Python standard. Anda juga akan belajar pelbagai teknik untuk memvisualisasikan data.
## Kajian kes: 'pasaran labu'
Dalam folder ini, anda akan menemui fail .csv dalam folder root `data` yang dipanggil [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang mengandungi 1757 baris data tentang pasaran labu, disusun mengikut kumpulan berdasarkan bandar. Ini adalah data mentah yang diekstrak daripada [Laporan Standard Pasaran Terminal Tanaman Khas](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang diedarkan oleh Jabatan Pertanian Amerika Syarikat.
Dalam folder ini anda akan dapati fail .csv dalam folder root `data` yang dipanggil [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) yang mengandungi 1757 baris data tentang pasaran labu, diatur mengikut kumpulan mengikut bandar. Ini adalah data mentah yang diekstrak dari [Laporan Piawai Pasaran Terminal Tanaman Khas](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang diedarkan oleh Jabatan Pertanian Amerika Syarikat.
### Menyediakan data
Data ini adalah dalam domain awam. Ia boleh dimuat turun dalam banyak fail berasingan, mengikut bandar, dari laman web USDA. Untuk mengelakkan terlalu banyak fail berasingan, kami telah menggabungkan semua data bandar ke dalam satu spreadsheet, jadi kami telah _menyediakan_ data sedikit. Seterusnya, mari kita lihat lebih dekat data ini.
Data ini adalah dalam domain awam. Ia boleh dimuat turun dalam banyak fail berasingan, mengikut bandar, dari laman web USDA. Untuk mengelakkan terlalu banyak fail berasingan, kami telah menggabungkan semua data bandar ke dalam satu helaian, jadi kami telah sedikit _menyediakan_ data itu. Seterusnya, mari kita lihat data dengan lebih dekat.
### Data labu - kesimpulan awal
Apa yang anda perhatikan tentang data ini? Anda sudah melihat bahawa terdapat campuran string, nombor, kekosongan dan nilai pelik yang perlu anda fahami.
Soalan apa yang boleh anda tanyakan kepada data ini, menggunakan teknik Regresi? Bagaimana dengan "Meramalkan harga labu yang dijual pada bulan tertentu". Melihat semula data, terdapat beberapa perubahan yang perlu anda lakukan untuk mencipta struktur data yang diperlukan untuk tugas ini.
Apa yang anda perhatikan tentang data ini? Anda sudah lihat bahawa terdapat campuran rentetan, nombor, ruang kosong dan nilai aneh yang perlu anda fahami.
Soalan apa yang boleh anda tanya mengenai data ini, menggunakan teknik Regresi? Bagaimana dengan "Ramalkan harga labu untuk dijual dalam bulan tertentu". Melihat semula data, ada beberapa perubahan yang anda perlu buat untuk mencipta struktur data yang diperlukan untuk tugasan ini.
## Latihan - analisis data labu
Mari gunakan [Pandas](https://pandas.pydata.org/), (nama ini bermaksud `Python Data Analysis`) alat yang sangat berguna untuk membentuk data, untuk menganalisis dan menyediakan data labu ini.
Mari gunakan [Pandas](https://pandas.pydata.org/), (nama bermaksud `Python Data Analysis`) alat yang sangat berguna untuk membentuk data, untuk menganalisis dan menyediakan data labu ini.
### Pertama, periksa tarikh yang hilang
Anda perlu mengambil langkah untuk memeriksa tarikh yang hilang:
1. Tukarkan tarikh kepada format bulan (ini adalah tarikh AS, jadi formatnya adalah `MM/DD/YYYY`).
2. Ekstrak bulan ke kolum baru.
1. Tukar tarikh kepada format bulan (ini adalah tarikh AS, jadi formatnya ialah `MM/DD/YYYY`).
2. Ekstrak bulan ke lajur baru.
Buka fail _notebook.ipynb_ dalam Visual Studio Code dan import spreadsheet ke dalam dataframe Pandas yang baru.
Buka fail _notebook.ipynb_ dalam Visual Studio Code dan import helaian ke dalam dataframe Pandas baru.
1. Gunakan fungsi `head()` untuk melihat lima baris pertama.
@ -66,15 +66,15 @@ Buka fail _notebook.ipynb_ dalam Visual Studio Code dan import spreadsheet ke da
✅ Fungsi apa yang akan anda gunakan untuk melihat lima baris terakhir?
1. Periksa jika terdapat data yang hilang dalam dataframe semasa:
1. Periksa jika ada data yang hilang dalam dataframe semasa:
```python
pumpkins.isnull().sum()
```
Terdapat data yang hilang, tetapi mungkin ia tidak akan menjadi masalah untuk tugas ini.
Ada data yang hilang, tetapi mungkin tidak menjadi masalah untuk tugasan ini.
1. Untuk memudahkan dataframe anda bekerja, pilih hanya kolum yang anda perlukan, menggunakan fungsi `loc` yang mengekstrak dari dataframe asal sekumpulan baris (diberikan sebagai parameter pertama) dan kolum (diberikan sebagai parameter kedua). Ungkapan `:` dalam kes di bawah bermaksud "semua baris".
1. Untuk memudahkan kerja dengan dataframe anda, pilih hanya lajur yang anda perlukan, menggunakan fungsi `loc` yang mengekstrak dari dataframe asal sekumpulan baris (parameter pertama) dan lajur (parameter kedua). Ungkapan `:` dalam kes ini bermaksud "semua baris".
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
@ -83,11 +83,11 @@ Buka fail _notebook.ipynb_ dalam Visual Studio Code dan import spreadsheet ke da
### Kedua, tentukan harga purata labu
Fikirkan cara menentukan harga purata labu dalam bulan tertentu. Kolum apa yang akan anda pilih untuk tugas ini? Petunjuk: anda memerlukan 3 kolum.
Fikirkan bagaimana untuk menentukan harga purata labu dalam bulan tertentu. Lajur apa yang akan anda pilih untuk tugasan ini? Petunjuk: anda perlu 3 lajur.
Penyelesaian: ambil purata kolum `Low Price` dan `High Price` untuk mengisi kolum Harga baru, dan tukarkan kolum Tarikh untuk hanya menunjukkan bulan. Nasib baik, menurut pemeriksaan di atas, tiada data yang hilang untuk tarikh atau harga.
Penyelesaian: ambil purata lajur `Low Price` dan `High Price` untuk mengisi lajur Harga yang baru, dan tukar lajur Tarikh supaya hanya menunjukkan bulan. Mujurlah, menurut pemeriksaan di atas, tiada data yang hilang untuk tarikh atau harga.
1. Untuk mengira purata, tambahkan kod berikut:
1. Untuk mengira purata, tambah kod berikut:
```python
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
@ -96,37 +96,37 @@ Penyelesaian: ambil purata kolum `Low Price` dan `High Price` untuk mengisi kolu
```
Anda bebas untuk mencetak sebarang data yang anda ingin periksa menggunakan `print(month)`.
Sila cetak apa-apa data yang anda ingin semak menggunakan `print(month)`.
2. Sekarang, salin data yang telah ditukar ke dalam dataframe Pandas yang baru:
2. Sekarang, salin data yang telah ditukar ke dataframe Pandas yang baru:
```python
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
```
Mencetak dataframe anda akan menunjukkan dataset yang bersih dan kemas di mana anda boleh membina model regresi baru anda.
Mencetak dataframe anda akan menunjukkan dataset yang bersih dan kemas yang boleh anda bina model regresi baru.
### Tetapi tunggu! Ada sesuatu yang pelik di sini
### Tapi tunggu! Ada sesuatu yang pelik di sini
Jika anda melihat kolum `Package`, labu dijual dalam pelbagai konfigurasi. Ada yang dijual dalam ukuran '1 1/9 bushel', ada yang dalam ukuran '1/2 bushel', ada yang per labu, ada yang per pound, dan ada yang dalam kotak besar dengan lebar yang berbeza.
Jika anda lihat lajur `Package`, labu dijual dalam berbagai konfigurasi. Ada yang dijual dalam ukuran '1 1/9 bushel', ada yang '1/2 bushel', ada berdasarkan labu, ada pula berdasarkan paun, dan ada dalam kotak besar dengan lebar yang berbeza.
> Labu nampaknya sangat sukar untuk ditimbang secara konsisten
Menggali data asal, menarik bahawa apa-apa dengan `Unit of Sale` yang sama dengan 'EACH' atau 'PER BIN' juga mempunyai jenis `Package` per inci, per bin, atau 'each'. Labu nampaknya sangat sukar untuk ditimbang secara konsisten, jadi mari kita tapis mereka dengan memilih hanya labu dengan string 'bushel' dalam kolum `Package`.
Menggali ke dalam data asal, menarik bahawa apa-apa dengan `Unit of Sale` sama dengan 'EACH' atau 'PER BIN' juga mempunyai jenis `Package` per inci, per bin, atau 'each'. Labu nampaknya sangat sukar ditimbang secara konsisten, jadi mari tapis mereka dengan memilih hanya labu dengan rentetan 'bushel' dalam lajur `Package`.
1. Tambahkan penapis di bahagian atas fail, di bawah import .csv awal:
1. Tambah penapis di atas fail, di bawah import .csv yang awal:
```python
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
Jika anda mencetak data sekarang, anda boleh melihat bahawa anda hanya mendapatkan sekitar 415 baris data yang mengandungi labu mengikut bushel.
Jika anda cetak data sekarang, anda boleh lihat bahawa anda hanya mendapat sekitar 415 baris data yang mengandungi labu mengikut bushel.
### Tetapi tunggu! Ada satu lagi perkara yang perlu dilakukan
### Tapi tunggu! Ada satu lagi perkara yang perlu dilakukan
Adakah anda perasan bahawa jumlah bushel berbeza setiap baris? Anda perlu menormalkan harga supaya anda menunjukkan harga per bushel, jadi lakukan beberapa pengiraan untuk menyeragamkannya.
Adakah anda perasan bahawa jumlah bushel berubah mengikut baris? Anda perlu menormalkan harga supaya anda menunjukkan harga per bushel, jadi buat sedikit pengiraan untuk menyesuaikan.
1. Tambahkan baris ini selepas blok yang mencipta dataframe new_pumpkins:
1. Tambah baris ini selepas blok yang mencipta dataframe new_pumpkins:
```python
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
@ -134,29 +134,29 @@ Adakah anda perasan bahawa jumlah bushel berbeza setiap baris? Anda perlu menorm
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
```
✅ Menurut [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), berat bushel bergantung pada jenis hasil, kerana ia adalah ukuran volum. "Bushel tomato, sebagai contoh, sepatutnya beratnya 56 paun... Daun dan sayur-sayuran mengambil lebih banyak ruang dengan berat yang lebih sedikit, jadi bushel bayam hanya 20 paun." Semuanya agak rumit! Mari kita tidak bersusah payah membuat penukaran bushel-ke-paun, dan sebaliknya harga mengikut bushel. Semua kajian tentang bushel labu ini, bagaimanapun, menunjukkan betapa pentingnya memahami sifat data anda!
✅ Menurut [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), berat bushel bergantung pada jenis hasil, kerana ia adalah ukuran isipadu. "Satu bushel tomato, contohnya, sepatutnya seberat 56 paun... Daun dan sayur hijau mengambil ruang lebih banyak dengan berat kurang, jadi satu bushel bayam hanya 20 paun." Ia agak rumit! Mari kita tidak fikirkan penukaran bushel ke paun, dan sebaliknya harga ikut bushel. Semua kajian tentang bushel labu ini menunjukkan betapa pentingnya faham sifat data anda!
Sekarang, anda boleh menganalisis harga per unit berdasarkan ukuran bushel mereka. Jika anda mencetak data sekali lagi, anda boleh melihat bagaimana ia telah diseragamkan.
Kini, anda boleh menganalisis harga per unit berdasarkan pengukuran bushel mereka. Jika anda cetak data sekali lagi, anda boleh nampak bagaimana ia dinormalisasikan.
✅ Adakah anda perasan bahawa labu yang dijual mengikut setengah bushel sangat mahal? Bolehkah anda mengetahui sebabnya? Petunjuk: labu kecil jauh lebih mahal daripada yang besar, mungkin kerana terdapat lebih banyak daripadanya per bushel, memandangkan ruang yang tidak digunakan yang diambil oleh satu labu pai besar yang berongga.
✅ Adakah anda perhatikan bahawa labu yang dijual mengikut separuh bushel adalah sangat mahal? Bolehkah anda mengapa? Petunjuk: labu kecil jauh lebih mahal daripada yang besar, mungkin kerana ada lebih banyak bilangan labu kecil per bushel, memandangkan ruang yang tidak digunakan oleh satu labu pai berlubang yang besar.
## Strategi Visualisasi
Sebahagian daripada peranan saintis data adalah untuk menunjukkan kualiti dan sifat data yang mereka kerjakan. Untuk melakukan ini, mereka sering mencipta visualisasi yang menarik, seperti plot, graf, dan carta, yang menunjukkan aspek data yang berbeza. Dengan cara ini, mereka dapat menunjukkan secara visual hubungan dan jurang yang sukar untuk ditemui.
Sebahagian daripada peranan saintis data adalah untuk menunjukkan kualiti dan sifat data yang mereka gunakan. Untuk melakukan ini, mereka sering menghasilkan visualisasi yang menarik, atau plot, graf, dan carta, yang menunjukkan aspek data yang berbeza. Dengan cara ini, mereka dapat menunjukkan secara visual hubungan dan jurang yang sukar ditemui dengan cara lain.
[![ML untuk pemula - Cara Memvisualisasikan Data dengan Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML untuk pemula - Cara Memvisualisasikan Data dengan Matplotlib")
[![ML untuk pemula - Cara Visualisasikan Data dengan Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML untuk pemula - Cara Visualisasikan Data dengan Matplotlib")
> 🎥 Klik imej di atas untuk video pendek yang menunjukkan cara memvisualisasikan data untuk pelajaran ini.
> 🎥 Klik imej di atas untuk video pendek yang menunjukkan cara memvisualisasikan data untuk pengajaran ini.
Visualisasi juga boleh membantu menentukan teknik pembelajaran mesin yang paling sesuai untuk data. Plot taburan yang kelihatan mengikuti garis, sebagai contoh, menunjukkan bahawa data adalah calon yang baik untuk latihan regresi linear.
Visualisasi juga boleh membantu menentukan teknik pembelajaran mesin yang paling sesuai untuk data. Sebuah scatterplot yang nampaknya mengikut sebuah garis, contohnya, menunjukkan bahawa data itu calon baik untuk latihan regresi linear.
Satu pustaka visualisasi data yang berfungsi dengan baik dalam Jupyter notebooks ialah [Matplotlib](https://matplotlib.org/) (yang juga anda lihat dalam pelajaran sebelumnya).
Salah satu perpustakaan visualisasi data yang berfungsi baik dalam Jupyter notebooks adalah [Matplotlib](https://matplotlib.org/) (yang juga anda lihat dalam pengajaran sebelum ini).
> Dapatkan lebih banyak pengalaman dengan visualisasi data dalam [tutorial ini](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
## Latihan - eksperimen dengan Matplotlib
## Latihan - cuba dengan Matplotlib
Cuba buat beberapa plot asas untuk memaparkan dataframe baru yang baru anda cipta. Apa yang akan ditunjukkan oleh plot garis asas?
Cuba buat beberapa plot asas untuk memaparkan dataframe baru yang anda baru cipta. Apakah yang akan ditunjukkan oleh plot garis asas?
1. Import Matplotlib di bahagian atas fail, di bawah import Pandas:
@ -164,8 +164,8 @@ Cuba buat beberapa plot asas untuk memaparkan dataframe baru yang baru anda cipt
import matplotlib.pyplot as plt
```
1. Jalankan semula keseluruhan notebook untuk menyegarkan.
1. Di bahagian bawah notebook, tambahkan sel untuk plot data sebagai kotak:
1. Jalankan semula keseluruhan notebook untuk memuat semula.
1. Di bawah notebook, tambah sel untuk plot data sebagai kotak:
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@ Cuba buat beberapa plot asas untuk memaparkan dataframe baru yang baru anda cipt
plt.show()
```
![Plot taburan menunjukkan hubungan harga dengan bulan](../../../../2-Regression/2-Data/images/scatterplot.png)
![Scatterplot menunjukkan hubungan harga kepada bulan](../../../../translated_images/ms/scatterplot.b6868f44cbd2051c.webp)
Adakah ini plot yang berguna? Adakah sesuatu mengenainya mengejutkan anda?
Adakah ini plot yang berguna? Ada apa-apa yang mengejutkan anda?
Ia tidak begitu berguna kerana ia hanya memaparkan data anda sebagai taburan titik dalam bulan tertentu.
### Jadikannya berguna
### Jadikan ia berguna
Untuk mendapatkan carta yang memaparkan data berguna, anda biasanya perlu mengelompokkan data dengan cara tertentu. Mari cuba buat plot di mana paksi y menunjukkan bulan dan data menunjukkan taburan data.
Untuk mendapatkan carta yang memaparkan data berguna, anda biasanya perlu mengkelaskan data dengan cara tertentu. Mari cuba buat plot di mana paksi y menunjukkan bulan dan data menunjukkan taburan data.
1. Tambahkan sel untuk mencipta carta bar yang dikelompokkan:
1. Tambah sel untuk membuat carta bar berkumpulan:
```python
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
plt.ylabel("Pumpkin Price")
```
![Carta bar menunjukkan hubungan harga dengan bulan](../../../../2-Regression/2-Data/images/barchart.png)
![Carta bar menunjukkan hubungan harga kepada bulan](../../../../translated_images/ms/barchart.a833ea9194346d76.webp)
Ini adalah visualisasi data yang lebih berguna! Ia nampaknya menunjukkan harga tertinggi untuk labu berlaku pada bulan September dan Oktober. Adakah ini memenuhi jangkaan anda? Kenapa atau kenapa tidak?
## Latihan - cuba dengan Seaborn
Matplotlib amat berkuasa, tetapi ia boleh mengambil banyak kod untuk menghasilkan carta yang kemas. [Seaborn](https://seaborn.pydata.org/) adalah perpustakaan yang dibina _di atas_ Matplotlib dan direka untuk visualisasi data statistik. Ia berfungsi terus dengan dataframe Pandas, menggunakan gaya lalai yang menarik, dan membolehkan anda mencipta plot yang informatif dengan kod yang jauh lebih sedikit. Kerana Seaborn mengembalikan objek Matplotlib, anda masih boleh menggunakan segala yang anda sudah tahu tentang Matplotlib untuk melaras hasilnya.
> Jika anda belum memasang Seaborn, pasang ia dengan `pip install seaborn`.
1. Import Seaborn di atas notebook, di bawah import yang lain. Ia biasanya diimport sebagai `sns`:
```python
import seaborn as sns
```
### Scatter plot untuk menunjukkan hubungan
Sebahagian besar meneroka data sebelum membina model adalah mencari _hubungan_ antara pembolehubah. [Scatter plot](https://en.wikipedia.org/wiki/Scatter_plot) adalah salah satu alat terbaik untuk ini: jika titik nampak mengikut garis, dua pembolehubah mungkin berkorelasi, yang merupakan tanda baik bahawa model regresi linear boleh berfungsi.
1. Buat semula scatter plot harga-ke-bulan tadi, kali ini menggunakan Seaborn [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (plot hubungan), yang berfungsi terus dengan lajur dataframe anda:
```python
sns.relplot(x="Price", y="Month", data=new_pumpkins)
```
![Scatterplot Seaborn menunjukkan hubungan harga kepada bulan](../../../../translated_images/ms/relplot.a03837d8f0329cec.webp)
Perhatikan bagaimana anda serahkan _nama lajur_ dan dataframe, dan Seaborn menguruskan label paksi untuk anda.
2. Anda boleh bertukar kepada plot garis dengan menghantar `kind="line"`. Seaborn malah menggambar jalur berteduh yang menunjukkan interval keyakinan di sekitar garis:
```python
sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
```
![Plot garis Seaborn menunjukkan hubungan harga kepada bulan](../../../../translated_images/ms/lineplot.f9034ba47b1e30ee.webp)
Data ini agak bising, jadi plot garis bukanlah pilihan paling jelas di sini — tetapi ia menunjukkan betapa mudahnya menukar jenis carta dalam Seaborn.
### Carta bar untuk menunjukkan taburan
Sebelum ini anda mengelompokkan data secara manual untuk membuat carta bar dengan Matplotlib. Seaborn's [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (grafik kategori) boleh melakukan pengelompokan dan agregasi untuk anda. Secara lalai `kind="bar"` menunjukkan purata setiap kategori bersama garisan hitam yang menunjukkan selang keyakinan.
1. Buat carta bar harga purata setiap bulan:
```python
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
```
![Carta bar Seaborn yang menunjukkan taburan harga setiap bulan](../../../../translated_images/ms/catplot.e73fc35fdf96242b.webp)
Ini mengesahkan apa yang anda lihat dengan Matplotlib — harga memuncak sekitar September dan Oktober — tetapi Seaborn juga memvisualisasikan betapa banyak harga _bervariasi_ dalam setiap bulan.
### Heatmap untuk menunjukkan korelasi
Carta sebar membandingkan dua pemboleh ubah pada satu masa. Apabila anda mempunyai beberapa lajur berangka, [heatmap](https://en.wikipedia.org/wiki/Heat_map) membolehkan anda melihat kekuatan hubungan antara _setiap_ pasangan lajur pada satu masa. Ini adalah cara biasa untuk mengenal pasti ciri mana yang paling berkorelasi sebelum memilih apa yang hendak dimasukkan dalam model (dan jenis carta yang sama kemudiannya digunakan untuk memaparkan matriks kekeliruan dalam klasifikasi).
1. Bina matriks korelasi dengan Pandas, kemudian lukis dengan [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) Seaborn. Pilihan `annot=True` mencetak nilai korelasi pada setiap sel:
```python
correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
sns.heatmap(correlations, annot=True, cmap="coolwarm")
```
![Heatmap Seaborn yang menunjukkan korelasi antara lajur berangka](../../../../translated_images/ms/heatmap.bd98dce43b404c57.webp)
Nilai yang hampir dengan `1` (atau `-1`) bermaksud lajur-lajur itu sangat berkorelasi _linear_. Perhatikan bagaimana `Low Price` dan `High Price` hampir berkorelasi sempurna. `Month`, sebaliknya, hanya menunjukkan korelasi linear lemah dengan harga — walaupun carta bar di atas menunjukkan puncak bermusim yang jelas pada bulan September dan Oktober. Itu adalah pengajaran penting: pekali korelasi hanya mengukur hubungan _garis lurus_, jadi ia boleh terlepas pola bermusim atau bukan linear. ✅ Kenapa berguna untuk melihat kedua-dua heatmap *dan* carta seperti carta bar sebelum memutuskan lajur mana yang hendak digunakan?
### Matplotlib atau Seaborn?
Kedua-dua perpustakaan adalah berbaloi untuk diketahui:
- **Matplotlib** memberi anda kawalan terperinci ke atas setiap elemen carta dan merupakan asas bagi hampir setiap perpustakaan plot Python lain.
- **Seaborn** menyediakan fungsi tahap tinggi dan tetapan menarik untuk carta statistik, berfungsi terus dengan dataframe, dan sering lebih cepat untuk analisis data eksploratori.
Ini adalah visualisasi data yang lebih berguna! Ia nampaknya menunjukkan bahawa harga tertinggi untuk labu berlaku pada bulan September dan Oktober. Adakah itu memenuhi jangkaan anda? Mengapa atau mengapa tidak?
Aliran kerja biasa adalah menggunakan Seaborn untuk meneroka data dengan cepat, kemudian beralih ke Matplotlib apabila anda perlu mengubah suai butiran.
---
## 🚀Cabaran
Terokai pelbagai jenis visualisasi yang ditawarkan oleh Matplotlib. Jenis mana yang paling sesuai untuk masalah regresi?
Teroka pelbagai jenis visualisasi yang ditawarkan oleh Matplotlib dan Seaborn. Jenis manakah yang paling sesuai untuk masalah regresi?
## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/)
## [Kuis pasca kuliah](https://ff-quizzes.netlify.app/en/ml/)
## Ulasan & Kajian Kendiri
## Ulasan & Belajar Kendiri
Lihat pelbagai cara untuk memvisualisasikan data. Buat senarai pustaka yang tersedia dan catatkan mana yang terbaik untuk jenis tugas tertentu, contohnya visualisasi 2D vs. visualisasi 3D. Apa yang anda temui?
Lihat pelbagai cara untuk memvisualisasikan data. Buat senarai perpustakaan yang ada dan catat yang mana paling sesuai untuk jenis tugas tertentu, contohnya visualisasi 2D berbanding visualisasi 3D. Apa yang anda temui?
## Tugasan
[Menjelajahi visualisasi](assignment.md)
[Meneroka visualisasi](assignment.md)
---
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan oleh manusia profesional adalah disyorkan. Kami tidak bertanggungjawab terhadap sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -222,6 +222,7 @@
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
"\n",
"pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
@ -385,18 +386,78 @@
"plt.ylabel(\"Pumpkin Price\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Memvisualisasikan dengan Seaborn\n",
"\n",
"[Seaborn](https://seaborn.pydata.org/) dibina di atas Matplotlib dan berfungsi terus dengan dataframe, menjadikannya cepat untuk membuat graf statistik yang menarik dengan sangat sedikit kod.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plot sebar untuk menunjukkan hubungan\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sns.relplot(x=\"Price\", y=\"Month\", data=new_pumpkins)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sns.relplot(x=\"Price\", y=\"Month\", kind=\"line\", data=new_pumpkins)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Carta bar untuk menunjukkan taburan\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sns.catplot(x=\"Month\", y=\"Price\", data=new_pumpkins, kind=\"bar\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Peta panas untuk menunjukkan korelasi\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
"source": [
"correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()\n",
"sns.heatmap(correlations, annot=True, cmap=\"coolwarm\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Penafian**: \nDokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Penafian**:\nDokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan oleh manusia profesional adalah disyorkan. Kami tidak bertanggungjawab terhadap sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -426,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
"translation_date": "2025-09-06T11:53:11+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "ms"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -1,47 +1,47 @@
# Pengenalan kepada Pembelajaran Pengukuhan dan Q-Learning
# Pengenalan kepada Pembelajaran Pengukuhan dan Q-Pembelajaran
![Ringkasan pembelajaran pengukuhan dalam pembelajaran mesin dalam bentuk sketchnote](../../../../sketchnotes/ml-reinforcement.png)
![Ringkasan pengukuhan dalam pembelajaran mesin dalam sketchnote](../../../../translated_images/ms/ml-reinforcement.94024374d63348db.webp)
> Sketchnote oleh [Tomomi Imura](https://www.twitter.com/girlie_mac)
Pembelajaran pengukuhan melibatkan tiga konsep penting: agen, beberapa keadaan, dan satu set tindakan bagi setiap keadaan. Dengan melaksanakan tindakan dalam keadaan tertentu, agen akan diberikan ganjaran. Bayangkan permainan komputer Super Mario. Anda adalah Mario, berada dalam tahap permainan, berdiri di tepi tebing. Di atas anda terdapat syiling. Anda sebagai Mario, dalam tahap permainan, di kedudukan tertentu ... itulah keadaan anda. Melangkah satu langkah ke kanan (tindakan) akan membawa anda ke tebing, dan itu akan memberikan skor numerik yang rendah. Namun, menekan butang lompat akan membolehkan anda mendapat mata dan terus hidup. Itu adalah hasil yang positif dan sepatutnya memberikan skor numerik yang positif.
Pembelajaran pengukuhan melibatkan tiga konsep penting: ejen, beberapa keadaan, dan satu set tindakan bagi setiap keadaan. Dengan melaksanakan satu tindakan dalam keadaan tertentu, ejen diberi ganjaran. Bayangkan sekali lagi permainan komputer Super Mario. Anda adalah Mario, anda berada dalam satu tingkat permainan, berdiri di tepi tebing. Di atas anda terdapat sebuah syiling. Anda sebagai Mario, dalam satu tingkat permainan, pada kedudukan tertentu ... itu adalah keadaan anda. Bergerak satu langkah ke kanan (tindakan) akan membawa anda ke tepi tebing, dan itu akan memberikan skor nombor yang rendah. Namun, menekan butang lompat akan membolehkan anda mendapat mata dan anda akan terus hidup. Itu adalah hasil yang positif dan harus memberikannya skor nombor positif.
Dengan menggunakan pembelajaran pengukuhan dan simulator (permainan), anda boleh belajar cara bermain permainan untuk memaksimumkan ganjaran iaitu terus hidup dan mengumpul sebanyak mungkin mata.
Dengan menggunakan pembelajaran pengukuhan dan simulator (permainan), anda boleh belajar bagaimana untuk bermain permainan itu bagi memaksimumkan ganjaran iaitu terus hidup dan mendapatkan sebanyak mungkin mata.
[![Pengenalan kepada Pembelajaran Pengukuhan](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 Klik imej di atas untuk mendengar Dmitry membincangkan Pembelajaran Pengukuhan
## [Kuiz pra-kuliah](https://ff-quizzes.netlify.app/en/ml/)
## [Kuis Pra-ceramah](https://ff-quizzes.netlify.app/en/ml/)
## Prasyarat dan Persediaan
Dalam pelajaran ini, kita akan bereksperimen dengan beberapa kod dalam Python. Anda sepatutnya boleh menjalankan kod Jupyter Notebook daripada pelajaran ini, sama ada di komputer anda atau di awan.
Dalam pelajaran ini, kita akan bereksperimen dengan beberapa kod dalam Python. Anda harus dapat menjalankan kod Jupyter Notebook dari pelajaran ini, sama ada di komputer anda atau di awan.
Anda boleh membuka [notebook pelajaran](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) dan mengikuti pelajaran ini untuk membina.
Anda boleh membuka [notebook pelajaran](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) dan melalui pelajaran ini untuk membina.
> **Nota:** Jika anda membuka kod ini dari awan, anda juga perlu mendapatkan fail [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang digunakan dalam kod notebook. Tambahkan fail ini ke direktori yang sama dengan notebook.
> **Nota:** Jika anda membuka kod ini dari awan, anda juga perlu memuat turun fail [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang digunakan dalam kod notebook. Letakkan di direktori yang sama dengan notebook.
## Pengenalan
Dalam pelajaran ini, kita akan meneroka dunia **[Peter dan Serigala](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, yang diilhamkan oleh kisah dongeng muzik oleh komposer Rusia, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Kita akan menggunakan **Pembelajaran Pengukuhan** untuk membolehkan Peter meneroka persekitarannya, mengumpul epal yang lazat dan mengelakkan bertemu dengan serigala.
Dalam pelajaran ini, kita akan meneroka dunia **[Peter dan Serigala](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, diilhamkan oleh dongeng muzik oleh komposer Rusia, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Kita akan menggunakan **Pembelajaran Pengukuhan** untuk membiarkan Peter meneroka persekitarannya, mengutip epal yang lazat dan mengelakkan bertemu serigala.
**Pembelajaran Pengukuhan** (RL) adalah teknik pembelajaran yang membolehkan kita mempelajari tingkah laku optimum bagi **agen** dalam **persekitaran** tertentu dengan menjalankan banyak eksperimen. Agen dalam persekitaran ini sepatutnya mempunyai **matlamat**, yang ditakrifkan oleh **fungsi ganjaran**.
**Pembelajaran Pengukuhan** (RL) adalah teknik pembelajaran yang membolehkan kita mempelajari kelakuan optimum seorang **ejen** dalam sesuatu **persekitaran** dengan menjalankan banyak eksperimen. Seorang ejen dalam persekitaran ini harus mempunyai **matlamat**, yang ditakrifkan oleh **fungsi ganjaran**.
## Persekitaran
Untuk kesederhanaan, mari kita anggap dunia Peter sebagai papan segi empat dengan saiz `width` x `height`, seperti ini:
Untuk kesederhanaan, mari anggap dunia Peter adalah papan segi empat berukuran `lebar` x `tinggi`, seperti ini:
![Persekitaran Peter](../../../../8-Reinforcement/1-QLearning/images/environment.png)
![Persekitaran Peter](../../../../translated_images/ms/environment.40ba3cb66256c93f.webp)
Setiap sel dalam papan ini boleh menjadi:
Setiap sel di papan ini boleh menjadi:
* **tanah**, di mana Peter dan makhluk lain boleh berjalan.
* **air**, di mana anda jelas tidak boleh berjalan.
* **pokok** atau **rumput**, tempat di mana anda boleh berehat.
* **epal**, yang mewakili sesuatu yang Peter akan gembira untuk menemui untuk makan.
* **serigala**, yang berbahaya dan harus dielakkan.
* **tanah**, di atasnya Peter dan makhluk lain boleh berjalan.
* **air**, di mana anda sudah tentu tidak boleh berjalan.
* **pokok** atau **rumput**, tempat anda boleh berehat.
* sebuah **epal**, yang mewakili sesuatu yang gembira Peter untuk menemukannya bagi memberikan makan pada dirinya.
* sebuah **serigala**, yang berbahaya dan harus dielakkan.
Terdapat modul Python berasingan, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang mengandungi kod untuk bekerja dengan persekitaran ini. Oleh kerana kod ini tidak penting untuk memahami konsep kita, kita akan mengimport modul dan menggunakannya untuk mencipta papan contoh (blok kod 1):
Terdapat modul Python berasingan, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), yang mengandungi kod untuk bekerja dengan persekitaran ini. Oleh kerana kod ini tidak penting untuk memahami konsep kita, kita akan mengimport modul dan menggunakannya untuk membuat papan contoh (blok kod 1):
```python
from rlboard import *
@ -52,30 +52,30 @@ m.randomize(seed=13)
m.plot()
```
Kod ini sepatutnya mencetak gambar persekitaran yang serupa dengan yang di atas.
Kod ini harus mencetak gambar persekitaran yang serupa dengan yang di atas.
## Tindakan dan polisi
Dalam contoh kita, matlamat Peter adalah untuk mencari epal, sambil mengelakkan serigala dan halangan lain. Untuk melakukan ini, dia boleh berjalan-jalan sehingga dia menemui epal.
Dalam contoh kita, matlamat Peter adalah untuk dapat mencari epal, sambil mengelakkan serigala dan halangan lain. Untuk melakukan ini, dia boleh berjalan di sekeliling sehingga dia menemui epal.
Oleh itu, pada mana-mana kedudukan, dia boleh memilih antara salah satu tindakan berikut: atas, bawah, kiri dan kanan.
Oleh itu, pada kedudukan mana-mana, dia boleh memilih antara salah satu tindakan berikut: atas, bawah, kiri dan kanan.
Kita akan mentakrifkan tindakan tersebut sebagai kamus, dan memetakan mereka kepada pasangan perubahan koordinat yang sepadan. Sebagai contoh, bergerak ke kanan (`R`) akan sepadan dengan pasangan `(1,0)`. (blok kod 2):
Kita akan mentakrifkan tindakan ini sebagai kamus, dan menghubungkannya dengan pasangan perubahan koordinat yang sepadan. Contohnya, bergerak ke kanan (`R`) akan bersamaan dengan pasangan `(1,0)`. (blok kod 2):
```python
actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) }
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
Secara ringkas, strategi dan matlamat senario ini adalah seperti berikut:
Ringkasnya, strategi dan matlamat senario ini adalah seperti berikut:
- **Strategi**, agen kita (Peter) ditakrifkan oleh apa yang dipanggil **polisi**. Polisi adalah fungsi yang mengembalikan tindakan pada mana-mana keadaan tertentu. Dalam kes kita, keadaan masalah diwakili oleh papan, termasuk kedudukan semasa pemain.
- **Strategi**, ejen kita (Peter) ditakrifkan oleh apa yang dinamakan **polisi**. Polisi adalah fungsi yang mengembalikan tindakan pada mana-mana keadaan tertentu. Dalam kes kita, keadaan masalah diwakili oleh papan, termasuk kedudukan pemain semasa.
- **Matlamat**, pembelajaran pengukuhan adalah untuk akhirnya mempelajari polisi yang baik yang akan membolehkan kita menyelesaikan masalah dengan cekap. Walau bagaimanapun, sebagai asas, mari kita pertimbangkan polisi paling mudah yang dipanggil **jalan rawak**.
- **Matlamat**, pembelajaran pengukuhan adalah untuk akhirnya mempelajari polisi yang baik yang membolehkan kita menyelesaikan masalah dengan cekap. Namun sebagai asas, mari kita anggap polisi paling mudah dipanggil **jalan rawak**.
## Jalan rawak
## Jalan Random
Mari kita selesaikan masalah kita terlebih dahulu dengan melaksanakan strategi jalan rawak. Dengan jalan rawak, kita akan memilih tindakan seterusnya secara rawak daripada tindakan yang dibenarkan, sehingga kita mencapai epal (blok kod 3).
Mari kita selesaikan masalah kita dengan melaksanakan strategi jalan rawak. Dengan jalan rawak, kita akan memilih tindakan seterusnya secara rawak dari tindakan yang dibenarkan, sehingga kita mencapai epal (blok kod 3).
1. Laksanakan jalan rawak dengan kod di bawah:
@ -84,31 +84,31 @@ Mari kita selesaikan masalah kita terlebih dahulu dengan melaksanakan strategi j
return random.choice(list(actions))
def walk(m,policy,start_position=None):
n = 0 # number of steps
# set initial position
n = 0 # bilangan langkah
# tetapkan kedudukan awal
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
return n # success!
return n # berjaya!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
return -1 # eaten by wolf or drowned
return -1 # dimakan oleh serigala atau lemas
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
m.move(a) # do the actual move
m.move(a) # lakukan langkah sebenar
break
n+=1
walk(m,random_policy)
```
Panggilan kepada `walk` sepatutnya mengembalikan panjang laluan yang sepadan, yang boleh berbeza dari satu larian ke larian lain.
Panggilan kepada `walk` harus mengembalikan panjang laluan yang sepadan, yang boleh berubah-ubah dari satu larian ke larian lain.
1. Jalankan eksperimen jalan beberapa kali (katakan, 100), dan cetak statistik yang dihasilkan (blok kod 4):
1. Jalankan eksperimen jalanan ini beberapa kali (katakan, 100), dan cetak statistik hasilnya (blok kod 4):
```python
def print_statistics(policy):
@ -125,17 +125,17 @@ Mari kita selesaikan masalah kita terlebih dahulu dengan melaksanakan strategi j
print_statistics(random_policy)
```
Perhatikan bahawa panjang purata laluan adalah sekitar 30-40 langkah, yang agak banyak, memandangkan jarak purata ke epal terdekat adalah sekitar 5-6 langkah.
Perhatikan bahawa panjang purata laluan adalah kira-kira 30-40 langkah, yang agak banyak, memandangkan jarak purata ke epal terdekat adalah kira-kira 5-6 langkah.
Anda juga boleh melihat bagaimana pergerakan Peter kelihatan semasa jalan rawak:
Anda juga boleh lihat bagaimana pergerakan Peter semasa jalan rawak:
![Jalan Rawak Peter](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
## Fungsi ganjaran
Untuk menjadikan polisi kita lebih pintar, kita perlu memahami langkah mana yang "lebih baik" daripada yang lain. Untuk melakukan ini, kita perlu mentakrifkan matlamat kita.
Untuk menjadikan polisi kita lebih bijak, kita perlu faham tindakan mana yang "lebih baik" daripada yang lain. Untuk ini, kita perlu mendefinisikan matlamat kita.
Matlamat boleh ditakrifkan dalam bentuk **fungsi ganjaran**, yang akan mengembalikan beberapa nilai skor untuk setiap keadaan. Semakin tinggi nombor, semakin baik fungsi ganjaran. (blok kod 5)
Matlamat boleh ditakrifkan dari segi **fungsi ganjaran**, yang akan mengembalikan nilai skor untuk setiap keadaan. Semakin tinggi nombor, semakin baik fungsi ganjaran itu. (blok kod 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
Perkara menarik tentang fungsi ganjaran ialah dalam kebanyakan kes, *kita hanya diberikan ganjaran yang besar pada akhir permainan*. Ini bermakna algoritma kita sepatutnya mengingati langkah "baik" yang membawa kepada ganjaran positif pada akhirnya, dan meningkatkan kepentingannya. Begitu juga, semua langkah yang membawa kepada hasil buruk harus dielakkan.
Perkara yang menarik mengenai fungsi ganjaran adalah bahawa dalam kebanyakan kes, *kita hanya diberikan ganjaran yang ketara pada akhir permainan*. Ini bermakna algoritma kita harus ingat langkah "baik" yang membawa kepada ganjaran positif pada akhirnya, dan meningkatkan kepentingannya. Begitu juga, semua tindakan yang membawa kepada keputusan buruk harus dielakkan.
## Q-Learning
## Q-Pembelajaran
Algoritma yang akan kita bincangkan di sini dipanggil **Q-Learning**. Dalam algoritma ini, polisi ditakrifkan oleh fungsi (atau struktur data) yang dipanggil **Q-Table**. Ia merekodkan "kebaikan" setiap tindakan dalam keadaan tertentu.
Algoritma yang akan kita bincangkan di sini dipanggil **Q-Pembelajaran**. Dalam algoritma ini, polisi ditakrifkan oleh fungsi (atau struktur data) yang dipanggil **Q-Jadual**. Ia merekodkan "kebaikan" setiap tindakan dalam keadaan tertentu.
Ia dipanggil Q-Table kerana ia sering mudah untuk mewakilinya sebagai jadual, atau array multi-dimensi. Oleh kerana papan kita mempunyai dimensi `width` x `height`, kita boleh mewakili Q-Table menggunakan array numpy dengan bentuk `width` x `height` x `len(actions)`: (blok kod 6)
Ia dinamakan Q-Jadual kerana sering mudah diwakili sebagai jadual, atau array berbilang dimensi. Oleh kerana papan kita mempunyai dimensi `lebar` x `tinggi`, kita boleh mewakilkan Q-Jadual menggunakan numpy array dengan bentuk `lebar` x `tinggi` x `len(actions)`: (blok kod 6)
```python
Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)
```
Perhatikan bahawa kita memulakan semua nilai Q-Table dengan nilai yang sama, dalam kes kita - 0.25. Ini sepadan dengan polisi "jalan rawak", kerana semua langkah dalam setiap keadaan adalah sama baik. Kita boleh menghantar Q-Table kepada fungsi `plot` untuk memvisualisasikan jadual pada papan: `m.plot(Q)`.
Perhatikan bahawa kita memulakan semua nilai Q-Jadual dengan nilai yang sama, dalam kes kita - 0.25. Ini sepadan dengan polisi "jalan rawak", kerana semua tindakan dalam setiap keadaan adalah sama baiknya. Kita boleh menghantar Q-Jadual kepada fungsi `plot` untuk memvisualkan jadual pada papan: `m.plot(Q)`.
![Persekitaran Peter](../../../../8-Reinforcement/1-QLearning/images/env_init.png)
![Persekitaran Peter](../../../../translated_images/ms/env_init.04e8f26d2d60089e.webp)
Di tengah-tengah setiap sel terdapat "anak panah" yang menunjukkan arah pergerakan yang disukai. Oleh kerana semua arah adalah sama, titik ditunjukkan.
Di tengah setiap sel terdapat "anak panah" yang menunjukkan arah pergerakan pilihan. Oleh kerana semua arah adalah sama, satu titik dipaparkan.
Sekarang kita perlu menjalankan simulasi, meneroka persekitaran kita, dan mempelajari pengagihan nilai Q-Table yang lebih baik, yang akan membolehkan kita mencari laluan ke epal dengan lebih cepat.
Sekarang kita perlu menjalankan simulasi, meneroka persekitaran kita, dan mempelajari taburan nilai Q-Jadual yang lebih baik, yang akan membolehkan kita mencari jalan ke epal lebih cepat.
## Intipati Q-Learning: Persamaan Bellman
## Inti pati Q-Pembelajaran: Persamaan Bellman
Sebaik sahaja kita mula bergerak, setiap tindakan akan mempunyai ganjaran yang sepadan, iaitu kita secara teorinya boleh memilih tindakan seterusnya berdasarkan ganjaran segera yang tertinggi. Walau bagaimanapun, dalam kebanyakan keadaan, langkah tersebut tidak akan mencapai matlamat kita untuk mencapai epal, dan oleh itu kita tidak boleh segera memutuskan arah mana yang lebih baik.
Setelah kita mula bergerak, setiap tindakan akan mempunyai ganjaran yang sepadan, iaitu secara teori kita boleh memilih tindakan seterusnya berdasarkan ganjaran segera tertinggi. Namun, dalam kebanyakan keadaan, tindakan itu tidak akan mencapai matlamat kita untuk sampai ke epal, dan oleh itu kita tidak boleh segera memutuskan arah mana yang lebih baik.
> Ingat bahawa bukan hasil segera yang penting, tetapi hasil akhir, yang akan kita peroleh pada akhir simulasi.
Untuk mengambil kira ganjaran yang tertunda ini, kita perlu menggunakan prinsip **[pengaturcaraan dinamik](https://en.wikipedia.org/wiki/Dynamic_programming)**, yang membolehkan kita memikirkan masalah kita secara rekursif.
Untuk mengambil kira ganjaran tertunda ini, kita perlu menggunakan prinsip **[pengaturcaraan dinamik](https://en.wikipedia.org/wiki/Dynamic_programming)**, yang membolehkan kita memikirkan masalah kita secara rekursif.
Katakan kita kini berada di keadaan *s*, dan kita ingin bergerak ke keadaan seterusnya *s'*. Dengan berbuat demikian, kita akan menerima ganjaran segera *r(s,a)*, yang ditakrifkan oleh fungsi ganjaran, ditambah beberapa ganjaran masa depan. Jika kita mengandaikan bahawa Q-Table kita dengan betul mencerminkan "daya tarikan" setiap tindakan, maka di keadaan *s'* kita akan memilih tindakan *a* yang sepadan dengan nilai maksimum *Q(s',a')*. Oleh itu, ganjaran masa depan terbaik yang boleh kita peroleh di keadaan *s* akan ditakrifkan sebagai `max`
Andaikan kita kini berada di keadaan *s*, dan kita ingin bergerak ke keadaan seterusnya *s'*. Dengan melakukan ini, kita akan menerima ganjaran segera *r(s,a)*, yang ditakrifkan oleh fungsi ganjaran, ditambah sedikit ganjaran masa depan. Jika kita andaikan Q-Jadual kita mencerminkan dengan betul "daya tarik" setiap tindakan, maka pada keadaan *s'* kita akan memilih tindakan *a* yang bersamaan dengan nilai maksimum *Q(s',a')*. Oleh itu, ganjaran masa depan terbaik yang boleh kita perolehi pada keadaan *s* akan ditakrifkan sebagai `max`<sub>a'</sub>*Q(s',a')* (maksimum di sini dikira atas semua tindakan yang mungkin *a'* pada keadaan *s'*).
Ini memberikan **formula Bellman** untuk mengira nilai Q-Jadual pada keadaan *s*, bagi tindakan *a*:
<img src="../../../../translated_images/ms/bellman-equation.7c0c4c722e5a6b7c.webp"/>
Di sini γ adalah apa yang dinamakan **faktor diskaun** yang menentukan sejauh mana anda harus mengutamakan ganjaran semasa dibandingkan dengan ganjaran masa depan dan sebaliknya.
## Algoritma Pembelajaran
Berdasarkan persamaan di atas, kita kini boleh menulis pseudo-kod untuk algoritma pembelajaran kita:
* Inisialisasi Q-Jadual Q dengan nombor sama rata untuk semua keadaan dan tindakan
* Tetapkan kadar pembelajaran α ← 1
* Ulang simulasi banyak kali
1. Mulakan di kedudukan rawak
1. Ulang
1. Pilih tindakan *a* pada keadaan *s*
2. Laksanakan tindakan dengan bergerak ke keadaan baru *s'*
3. Jika kita menemui kondisi tamat permainan, atau jumlah ganjaran terlalu kecil - keluar dari simulasi
4. Kira ganjaran *r* pada keadaan baru
5. Kemas kini Fungsi Q menurut persamaan Bellman: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. Kemas kini jumlah ganjaran dan kurangkan α.
## Eksploitasi vs. Eksplorasi
Dalam algoritma di atas, kita tidak nyatakan bagaimana tepatnya kita harus memilih tindakan pada langkah 2.1. Jika kita memilih tindakan secara rawak, kita akan secara rawak **menjelajah** persekitaran, dan kita cukup mungkin untuk mati kerap serta menjelajah kawasan yang biasanya tidak kita lawati. Pendekatan alternatif adalah untuk **mengeksploitasi** nilai Q-Jadual yang sudah kita tahu, dan dengan itu memilih tindakan terbaik (dengan nilai Q-Jadual lebih tinggi) pada keadaan *s*. Namun, ini akan menghalang kita daripada meneroka keadaan lain, dan kemungkinan kita tidak akan menemui penyelesaian optimum.
Oleh itu, pendekatan terbaik adalah untuk mencari keseimbangan antara eksplorasi dan eksploitasi. Ini boleh dilakukan dengan memilih tindakan pada keadaan *s* dengan kebarangkalian yang berkadar dengan nilai dalam Q-Jadual. Pada mulanya, apabila nilai Q-Jadual semuanya sama, ia bersamaan dengan pemilihan rawak, tetapi apabila kita belajar lebih banyak tentang persekitaran kita, kita akan lebih cenderung mengikuti laluan optimum sambil membenarkan ejen memilih laluan yang belum diterokai sekali-sekala.
## Pelaksanaan dalam Python
Kini kita sudah bersedia untuk melaksanakan algoritma pembelajaran. Sebelum kita lakukan itu, kita juga perlu fungsi yang menukar nombor sebarang dalam Q-Jadual kepada vektor kebarangkalian bagi tindakan yang sepadan.
1. Buat fungsi `probs()`:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
Kita tambah sedikit `eps` ke vektor asal untuk mengelakkan pembahagian dengan 0 dalam kes permulaan, apabila semua komponen vektor adalah seragam.
Jalankan algoritma pembelajaran melalui 5000 eksperimen, juga dipanggil **epok**: (blok kod 8)
```python
for epoch in range(5000):
# Pilih titik awal
m.random_start()
# Mulakan perjalanan
n=0
cum_reward = 0
while True:
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
dpos = actions[a]
m.move(dpos,check_correctness=False) # kami membenarkan pemain bergerak di luar papan, yang menamatkan episod
r = reward(m)
cum_reward += r
if r==end_reward or cum_reward < -1000:
lpath.append(n)
break
alpha = np.exp(-n / 10e5)
gamma = 0.5
ai = action_idx[a]
Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max())
n+=1
```
Selepas melaksanakan algoritma ini, Q-Jadual harus dikemas kini dengan nilai yang menentukan daya tarik tindakan yang berbeza di setiap langkah. Kita boleh cuba memvisualkan Q-Jadual dengan melukis vektor pada setiap sel yang akan menunjuk ke arah pergerakan yang diinginkan. Untuk kesederhanaan, kita lukis bulatan kecil menggantikan kepala anak panah.
<img src="../../../../translated_images/ms/learned.ed28bcd8484b5287.webp"/>
## Memeriksa polisi
Oleh kerana Q-Table menyenaraikan "daya tarikan" setiap tindakan di setiap keadaan, ia agak mudah untuk menggunakannya bagi menentukan navigasi yang efisien dalam dunia kita. Dalam kes yang paling mudah, kita boleh memilih tindakan yang sepadan dengan nilai Q-Table tertinggi: (blok kod 9)
Oleh kerana Q-Jadual menyenaraikan "daya tarik" setiap tindakan pada setiap keadaan, agak mudah untuk menggunakannya untuk mentakrifkan navigasi yang berkesan dalam dunia kita. Dalam kes paling mudah, kita boleh memilih tindakan yang sepadan dengan nilai Q-Jadual tertinggi: (blok kod 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> Jika anda mencuba kod di atas beberapa kali, anda mungkin perasan bahawa kadangkala ia "tergantung", dan anda perlu menekan butang STOP dalam notebook untuk menghentikannya. Ini berlaku kerana mungkin terdapat situasi di mana dua keadaan "menunjuk" antara satu sama lain dari segi nilai Q yang optimum, menyebabkan agen bergerak antara keadaan tersebut tanpa henti.
> Jika anda mencuba kod di atas beberapa kali, anda mungkin perasan bahawa kadangkala ia "terhenti", dan anda perlu menekan butang STOP dalam notebook untuk mengganggu ia. Ini berlaku kerana mungkin terdapat situasi di mana dua keadaan "menunjuk" antara satu sama lain dari segi nilai Q-Optimum, dalam kes ini agen berakhir bergerak antara keadaan tersebut tanpa henti.
## 🚀Cabaran
> **Tugas 1:** Ubah fungsi `walk` untuk menghadkan panjang maksimum laluan kepada bilangan langkah tertentu (contohnya, 100), dan lihat kod di atas mengembalikan nilai ini dari semasa ke semasa.
> **Tugas 1:** Ubah fungsi `walk` untuk mengehadkan panjang maksimum laluan dengan sejumlah langkah tertentu (katakan, 100), dan lihat kod di atas mengembalikan nilai ini dari semasa ke semasa.
> **Tugas 2:** Ubah fungsi `walk` supaya ia tidak kembali ke tempat yang telah dilalui sebelumnya. Ini akan menghalang `walk` daripada berulang, namun, agen masih boleh terperangkap di lokasi yang tidak dapat dilepaskan.
> **Tugas 2:** Ubah fungsi `walk` supaya ia tidak kembali ke tempat yang telah dikunjungi sebelum ini. Ini akan menghalang `walk` daripada berulang, namun, agen masih boleh terperangkap di lokasi yang tidak dapat ia lepaskan.
## Navigasi
Polisi navigasi yang lebih baik adalah yang kita gunakan semasa latihan, yang menggabungkan eksploitasi dan eksplorasi. Dalam polisi ini, kita akan memilih setiap tindakan dengan kebarangkalian tertentu, berkadar dengan nilai dalam Q-Table. Strategi ini mungkin masih menyebabkan agen kembali ke posisi yang telah diterokai, tetapi, seperti yang anda lihat dari kod di bawah, ia menghasilkan laluan purata yang sangat pendek ke lokasi yang diinginkan (ingat bahawa `print_statistics` menjalankan simulasi sebanyak 100 kali): (blok kod 10)
Polisi navigasi yang lebih baik adalah yang kami guna semasa latihan, yang menggabungkan eksploitasi dan penerokaan. Dalam polisi ini, kita akan memilih setiap tindakan dengan kebarangkalian tertentu, berkadar dengan nilai dalam Q-Table. Strategi ini masih boleh menyebabkan agen kembali ke posisi yang telah diterokai, tetapi, seperti yang anda lihat dari kod di bawah, ia menghasilkan laluan purata yang sangat pendek ke lokasi dikehendaki (ingat bahawa `print_statistics` menjalankan simulasi 100 kali): (blok kod 10)
```python
def qpolicy(m):
@ -220,28 +297,32 @@ def qpolicy(m):
print_statistics(qpolicy)
```
Selepas menjalankan kod ini, anda sepatutnya mendapat panjang laluan purata yang jauh lebih kecil daripada sebelumnya, dalam lingkungan 3-6.
Selepas menjalankan kod ini, anda sepatutnya mendapat panjang laluan purata yang jauh lebih kecil daripada sebelumnya, dalam julat 3-6.
## Menyelidik proses pembelajaran
Seperti yang telah disebutkan, proses pembelajaran adalah keseimbangan antara eksplorasi dan eksploitasi pengetahuan yang diperoleh tentang struktur ruang masalah. Kita telah melihat bahawa hasil pembelajaran (keupayaan untuk membantu agen mencari laluan pendek ke matlamat) telah bertambah baik, tetapi ia juga menarik untuk memerhatikan bagaimana panjang laluan purata berubah semasa proses pembelajaran:
Seperti yang telah disebut, proses pembelajaran adalah keseimbangan antara penerokaan dan eksploitasi pengetahuan yang diperoleh tentang struktur ruang masalah. Kami telah melihat bahawa hasil pembelajaran (keupayaan untuk membantu agen mencari laluan pendek ke matlamat) telah bertambah baik, tetapi menarik juga untuk melihat bagaimana panjang laluan purata bertindak semasa proses pembelajaran:
<img src="../../../../translated_images/ms/lpathlen1.0534784add58d4eb.webp"/>
Pembelajaran boleh diringkaskan seperti berikut:
- **Panjang laluan purata meningkat**. Apa yang kita lihat di sini adalah pada mulanya, panjang laluan purata meningkat. Ini mungkin disebabkan oleh fakta bahawa apabila kita tidak tahu apa-apa tentang persekitaran, kita cenderung terperangkap dalam keadaan buruk, seperti air atau serigala. Apabila kita belajar lebih banyak dan mula menggunakan pengetahuan ini, kita boleh meneroka persekitaran lebih lama, tetapi kita masih tidak tahu di mana lokasi epal dengan baik.
- **Panjang laluan purata meningkat**. Apa yang kita lihat di sini ialah pada mulanya, panjang laluan purata meningkat. Ini mungkin disebabkan fakta apabila kita tidak mengetahui apa-apa tentang persekitaran, kita cenderung terperangkap di keadaan buruk, air atau serigala. Apabila kita belajar lebih dan mula menggunakan pengetahuan ini, kita boleh meneroka persekitaran lebih lama, namun kita masih belum mengetahui lokasi epal dengan baik.
- **Panjang laluan berkurang, apabila kita belajar lebih banyak**. Setelah kita belajar cukup, menjadi lebih mudah bagi agen untuk mencapai matlamat, dan panjang laluan mula berkurang. Walau bagaimanapun, kita masih terbuka kepada eksplorasi, jadi kita sering menyimpang dari laluan terbaik dan meneroka pilihan baru, menjadikan laluan lebih panjang daripada yang optimum.
- **Panjang laluan berkurang, apabila kita belajar lebih banyak**. Setelah kita belajar cukup, menjadi lebih mudah untuk agen mencapai matlamat, dan panjang laluan mula berkurang. Namun, kita masih terbuka kepada penerokaan, jadi sering kali kita menyimpang daripada laluan terbaik, dan meneroka pilihan baru, menjadikan laluan lebih panjang daripada optimum.
- **Panjang meningkat secara mendadak**. Apa yang kita juga perhatikan pada graf ini adalah pada satu ketika, panjang meningkat secara mendadak. Ini menunjukkan sifat stokastik proses tersebut, dan bahawa kita boleh pada satu ketika "merosakkan" koefisien Q-Table dengan menulis semula mereka dengan nilai baru. Ini sebaiknya diminimumkan dengan mengurangkan kadar pembelajaran (contohnya, menjelang akhir latihan, kita hanya menyesuaikan nilai Q-Table dengan nilai kecil).
- **Panjang meningkat dengan mendadak**. Apa yang juga kita perhatikan dalam graf ini ialah pada suatu ketika, panjang meningkat secara mendadak. Ini menunjukkan sifat stokastik proses ini, dan bahawa pada suatu ketika kita boleh "merosakkan" pekali Q-Table dengan menimpanya dengan nilai baru. Ini seharusnya diminimumkan dengan mengurangkan kadar pembelajaran (contohnya, menjelang akhir latihan, kita hanya menyesuaikan nilai Q-Table dengan nilai kecil).
Secara keseluruhan, adalah penting untuk diingat bahawa kejayaan dan kualiti proses pembelajaran sangat bergantung pada parameter seperti kadar pembelajaran, pengurangan kadar pembelajaran, dan faktor diskaun. Parameter-parameter ini sering dipanggil **hiperparameter**, untuk membezakannya daripada **parameter**, yang kita optimalkan semasa latihan (contohnya, koefisien Q-Table). Proses mencari nilai hiperparameter terbaik dipanggil **pengoptimuman hiperparameter**, dan ia layak menjadi topik tersendiri.
Secara keseluruhan, penting untuk diingat bahawa kejayaan dan kualiti proses pembelajaran sangat bergantung pada parameter, seperti kadar pembelajaran, pengurangan kadar pembelajaran, dan faktor diskaun. Ini sering dipanggil **hyperparameter**, untuk membezakan mereka daripada **parameter**, yang kita optima semasa latihan (contohnya, pekali Q-Table). Proses mencari nilai hyperparameter terbaik dipanggil **pengoptimuman hyperparameter**, dan ia layak mendapat topik khas.
## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/)
## Tugasan
[Dunia yang Lebih Realistik](assignment.md)
## Tugasan
[Dunia Lebih Realistik](assignment.md)
---
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan oleh manusia profesional adalah disyorkan. Kami tidak bertanggungjawab terhadap sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,12 +1,32 @@
# Luncur CartPole
Masalah yang telah kita selesaikan dalam pelajaran sebelumnya mungkin kelihatan seperti masalah mainan, tidak benar-benar sesuai untuk situasi kehidupan sebenar. Ini tidak benar, kerana banyak masalah dunia sebenar juga berkongsi senario ini - termasuk bermain Catur atau Go. Mereka serupa, kerana kita juga mempunyai papan dengan peraturan yang ditetapkan dan **keadaan diskret**.
## [Kuiz pra-ceramah](https://ff-quizzes.netlify.app/en/ml/)
## Pengenalan
Dalam pelajaran ini kita akan menerapkan prinsip yang sama dari Q-Learning kepada masalah dengan **keadaan berterusan**, iaitu keadaan yang diberikan oleh satu atau lebih nombor nyata. Kita akan menangani masalah berikut:
> **Masalah**: Jika Peter ingin melarikan diri dari serigala, dia perlu dapat bergerak lebih cepat. Kita akan lihat bagaimana Peter boleh belajar meluncur, khususnya, untuk mengekalkan keseimbangan, menggunakan Q-Learning.
![The great escape!](../../../../translated_images/ms/escape.18862db9930337e3.webp)
> Peter dan kawan-kawannya menjadi kreatif untuk melarikan diri dari serigala! Gambar oleh [Jen Looper](https://twitter.com/jenlooper)
Kita akan menggunakan versi ringkas keseimbangan yang dikenali sebagai masalah **CartPole**. Dalam dunia cartpole, kita mempunyai peluncur mendatar yang boleh bergerak ke kiri atau kanan, dan tujuannya adalah untuk menyeimbangkan tiang menegak di atas peluncur.
<img alt="a cartpole" src="../../../../translated_images/ms/cartpole.b5609cc0494a14f7.webp" width="200"/>
## Prasyarat
Dalam pelajaran ini, kita akan menggunakan perpustakaan bernama **OpenAI Gym** untuk mensimulasikan pelbagai **persekitaran**. Anda boleh menjalankan kod pelajaran ini secara tempatan (contohnya dari Visual Studio Code), di mana simulasi akan dibuka dalam tetingkap baru. Apabila menjalankan kod secara dalam talian, anda mungkin perlu membuat beberapa penyesuaian pada kod, seperti yang diterangkan [di sini](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7).
Dalam pelajaran ini, kita akan menggunakan perpustakaan yang dipanggil **OpenAI Gym** untuk mensimulasikan pelbagai **persekitaran**. Anda boleh menjalankan kod pelajaran ini secara tempatan (contoh dari Visual Studio Code), dalam kes ini simulasi akan dibuka dalam tetingkap baru. Apabila menjalankan kod secara dalam talian, anda mungkin perlu membuat beberapa pengubahsuaian pada kod, seperti yang diterangkan [di sini](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7).
## OpenAI Gym
Dalam pelajaran sebelumnya, peraturan permainan dan keadaan diberikan oleh kelas `Board` yang kita tentukan sendiri. Di sini kita akan menggunakan **persekitaran simulasi** khas, yang akan mensimulasikan fizik di sebalik tiang yang seimbang. Salah satu persekitaran simulasi yang paling popular untuk melatih algoritma pembelajaran pengukuhan dipanggil [Gym](https://gym.openai.com/), yang diselenggarakan oleh [OpenAI](https://openai.com/). Dengan menggunakan gym ini, kita boleh mencipta pelbagai **persekitaran** daripada simulasi cartpole hingga permainan Atari.
Dalam pelajaran sebelumnya, peraturan permainan dan keadaan diberikan oleh kelas `Board` yang kita definisikan sendiri. Di sini kita akan menggunakan **persekitaran simulasi** khas, yang akan mensimulasikan fizik di sebalik tiang keseimbangan. Salah satu persekitaran simulasi yang paling popular untuk melatih algoritma pembelajaran penguatan dikenali sebagai [Gym](https://gym.openai.com/), yang dikendalikan oleh [OpenAI](https://openai.com/). Dengan menggunakan gym ini kita boleh mencipta pelbagai **persekitaran** dari simulasi cartpole hingga permainan Atari.
> **Nota**: Anda boleh melihat persekitaran lain yang tersedia dari OpenAI Gym [di sini](https://gym.openai.com/envs/#classic_control).
> **Nota**: Anda boleh melihat persekitaran lain yang tersedia di OpenAI Gym [di sini](https://gym.openai.com/envs/#classic_control).
Pertama, mari pasang gym dan import perpustakaan yang diperlukan (blok kod 1):
@ -22,11 +42,11 @@ import random
## Latihan - inisialisasi persekitaran cartpole
Untuk bekerja dengan masalah keseimbangan cartpole, kita perlu menginisialisasi persekitaran yang sesuai. Setiap persekitaran dikaitkan dengan:
Untuk bekerja dengan masalah keseimbangan cartpole, kita perlu menginisialisasi persekitaran yang bersesuaian. Setiap persekitaran dikaitkan dengan:
- **Ruang pemerhatian** yang menentukan struktur maklumat yang kita terima daripada persekitaran. Untuk masalah cartpole, kita menerima kedudukan tiang, kelajuan, dan beberapa nilai lain.
- **Ruang pemerhatian** yang mentakrifkan struktur maklumat yang kita terima dari persekitaran. Untuk masalah cartpole, kita menerima posisi tiang, halaju dan beberapa nilai lain.
- **Ruang tindakan** yang menentukan tindakan yang mungkin. Dalam kes kita, ruang tindakan adalah diskret, dan terdiri daripada dua tindakan - **kiri** dan **kanan**. (blok kod 2)
- **Ruang tindakan** yang mentakrifkan tindakan yang mungkin. Dalam kes kita, ruang tindakan adalah diskret, dan terdiri daripada dua tindakan - **kiri** dan **kanan**. (blok kod 2)
1. Untuk menginisialisasi, taip kod berikut:
@ -37,11 +57,11 @@ Untuk bekerja dengan masalah keseimbangan cartpole, kita perlu menginisialisasi
print(env.action_space.sample())
```
Untuk melihat bagaimana persekitaran berfungsi, mari jalankan simulasi pendek selama 100 langkah. Pada setiap langkah, kita memberikan salah satu tindakan untuk diambil - dalam simulasi ini kita hanya memilih tindakan secara rawak daripada `action_space`.
Untuk melihat bagaimana persekitaran berfungsi, mari jalankan simulasi pendek selama 100 langkah. Pada setiap langkah, kita menyediakan salah satu tindakan yang akan diambil - dalam simulasi ini kita hanya memilih tindakan secara rawak dari `action_space`.
1. Jalankan kod di bawah dan lihat hasilnya.
1. Jalankan kod di bawah dan lihat apa hasilnya.
✅ Ingat bahawa adalah lebih baik untuk menjalankan kod ini pada pemasangan Python tempatan! (blok kod 3)
✅ Ingat bahawa lebih digalakkan untuk menjalankan kod ini pada pemasangan Python tempatan! (blok kod 3)
```python
env.reset()
@ -56,7 +76,7 @@ Untuk melihat bagaimana persekitaran berfungsi, mari jalankan simulasi pendek se
![cartpole tidak seimbang](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
1. Semasa simulasi, kita perlu mendapatkan pemerhatian untuk menentukan cara bertindak. Sebenarnya, fungsi langkah mengembalikan pemerhatian semasa, fungsi ganjaran, dan bendera selesai yang menunjukkan sama ada masuk akal untuk meneruskan simulasi atau tidak: (blok kod 4)
1. Semasa simulasi, kita perlu mendapatkan pemerhatian untuk menentukan bagaimana bertindak. Sebenarnya, fungsi step mengembalikan pemerhatian semasa, fungsi ganjaran, dan bendera done yang menunjukkan sama ada simulasi perlu diteruskan atau tidak: (blok kod 4)
```python
env.reset()
@ -83,8 +103,8 @@ Untuk melihat bagaimana persekitaran berfungsi, mari jalankan simulasi pendek se
```
Vektor pemerhatian yang dikembalikan pada setiap langkah simulasi mengandungi nilai berikut:
- Kedudukan kereta
- Kelajuan kereta
- Posisi gerabak
- Halaju gerabak
- Sudut tiang
- Kadar putaran tiang
@ -95,30 +115,30 @@ Untuk melihat bagaimana persekitaran berfungsi, mari jalankan simulasi pendek se
print(env.observation_space.high)
```
Anda juga mungkin perasan bahawa nilai ganjaran pada setiap langkah simulasi sentiasa 1. Ini kerana matlamat kita adalah untuk bertahan selama mungkin, iaitu mengekalkan tiang pada kedudukan yang agak menegak untuk tempoh masa yang paling lama.
Anda juga mungkin perasan bahawa nilai ganjaran pada setiap langkah simulasi sentiasa 1. Ini kerana tujuan kita adalah untuk bertahan selama mungkin, iaitu mengekalkan tiang pada posisi hampir menegak untuk tempoh masa terpanjang.
✅ Sebenarnya, simulasi CartPole dianggap selesai jika kita berjaya mendapatkan ganjaran purata sebanyak 195 dalam 100 percubaan berturut-turut.
✅ Sebenarnya, simulasi CartPole dianggap selesai jika kita berjaya mendapat purata ganjaran sebanyak 195 selama 100 ujian berturut-turut.
## Diskretisasi keadaan
Dalam Q-Learning, kita perlu membina Q-Table yang menentukan apa yang perlu dilakukan pada setiap keadaan. Untuk dapat melakukan ini, kita memerlukan keadaan untuk menjadi **diskret**, lebih tepat lagi, ia harus mengandungi bilangan nilai diskret yang terhad. Oleh itu, kita perlu **mendiskretkan** pemerhatian kita, memetakan mereka kepada satu set keadaan yang terhad.
Dalam Q-Learning, kita perlu membina Q-Table yang menetapkan apa yang perlu dilakukan pada setiap keadaan. Untuk melakukan ini, kita perlukan keadaan yang **diskret**, dengan lebih tepat, ia harus mengandungi bilangan nilai diskret yang terhingga. Oleh itu, kita perlu **diskretkan** pemerhatian kita, memetakannya ke set terhingga keadaan.
Terdapat beberapa cara kita boleh melakukan ini:
Terdapat beberapa cara yang kita boleh lakukan ini:
- **Bahagikan kepada bin**. Jika kita tahu selang bagi nilai tertentu, kita boleh membahagikan selang ini kepada beberapa **bin**, dan kemudian menggantikan nilai dengan nombor bin yang ia tergolong. Ini boleh dilakukan menggunakan kaedah numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). Dalam kes ini, kita akan tahu dengan tepat saiz keadaan, kerana ia akan bergantung pada bilangan bin yang kita pilih untuk digitalisasi.
- **Bahagikan kepada bin**. Jika kita tahu selang nilai tertentu, kita boleh bahagikan selang ini kepada beberapa **bin**, dan kemudian gantikan nilai tersebut dengan nombor bin yang dimilikinya. Ini boleh dilakukan menggunakan kaedah numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). Dalam kes ini, kita akan tahu dengan tepat saiz keadaan, kerana ia bergantung pada bilangan bin yang kita pilih untuk digitalisasi.
✅ Kita boleh menggunakan interpolasi linear untuk membawa nilai ke dalam selang terhingga (kata, dari -20 hingga 20), kemudian menukar nombor kepada integer dengan pembulatan. Ini memberi kita kurang kawalan terhadap saiz keadaan, terutamanya jika kita tidak tahu jarak input sebenar. Sebagai contoh, dalam kes kita, 2 daripada 4 nilai tidak mempunyai batas atas/bawah yang ditetapkan, yang boleh menyebabkan bilangan keadaan tak terhingga.
✅ Kita boleh menggunakan interpolasi linear untuk membawa nilai kepada beberapa selang terhad (contohnya, dari -20 hingga 20), dan kemudian menukar nombor kepada integer dengan membundarkan mereka. Ini memberikan kita kawalan yang kurang terhadap saiz keadaan, terutamanya jika kita tidak tahu julat tepat nilai input. Sebagai contoh, dalam kes kita, 2 daripada 4 nilai tidak mempunyai had atas/bawah pada nilai mereka, yang mungkin menghasilkan bilangan keadaan yang tidak terhingga.
Dalam contoh kita, kita akan memilih pendekatan kedua. Seperti yang anda mungkin perasan kemudian, walaupun batas atas/bawah tidak ditentukan, nilai-nilai ini jarang mengambil nilai di luar selang terhingga tertentu, jadi keadaan dengan nilai ekstrim sangat jarang.
Dalam contoh kita, kita akan menggunakan pendekatan kedua. Seperti yang anda mungkin perasan kemudian, walaupun had atas/bawah tidak ditentukan, nilai-nilai tersebut jarang mengambil nilai di luar selang terhad tertentu, jadi keadaan dengan nilai ekstrem akan sangat jarang berlaku.
1. Berikut adalah fungsi yang akan mengambil pemerhatian daripada model kita dan menghasilkan tuple 4 nilai integer: (blok kod 6)
1. Berikut adalah fungsi yang akan mengambil pemerhatian dari model kita dan menghasilkan tuple empat nilai integer: (blok kod 6)
```python
def discretize(x):
return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int))
```
1. Mari kita juga terokai kaedah diskretisasi lain menggunakan bin: (blok kod 7)
1. Mari juga terokai satu lagi kaedah diskretisasi menggunakan bin: (blok kod 7)
```python
def create_bins(i,num):
@ -126,17 +146,17 @@ Dalam contoh kita, kita akan menggunakan pendekatan kedua. Seperti yang anda mun
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
nbins = [20,20,10,10] # number of bins for each parameter
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # selang nilai untuk setiap parameter
nbins = [20,20,10,10] # bilangan bin untuk setiap parameter
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
1. Sekarang mari jalankan simulasi pendek dan perhatikan nilai persekitaran diskret tersebut. Jangan ragu untuk mencuba kedua-dua `discretize` dan `discretize_bins` dan lihat jika terdapat perbezaan.
1. Sekarang jalankan simulasi pendek dan perhatikan nilai persekitaran diskret tersebut. Sila cuba kedua-dua `discretize` dan `discretize_bins` dan lihat jika ada perbezaan.
✅ discretize_bins mengembalikan nombor bin, yang berasaskan 0. Oleh itu, untuk nilai pemboleh ubah input sekitar 0, ia mengembalikan nombor dari tengah-tengah selang (10). Dalam discretize, kita tidak peduli tentang julat nilai output, membenarkan mereka menjadi negatif, jadi nilai keadaan tidak beralih, dan 0 sepadan dengan 0. (blok kod 8)
✅ discretize_bins mengembalikan nombor bin, yang bermula dari 0. Jadi bagi nilai pemboleh ubah input sekitar 0 ia mengembalikan nombor dari tengah interval (10). Dalam discretize, kita tidak mengambil kira julat nilai keluaran, membenarkan nilai negatif, jadi nilai keadaan tidak berganjak, dan 0 merujuk kepada 0. (blok kod 8)
```python
env.reset()
@ -145,20 +165,20 @@ Dalam contoh kita, kita akan menggunakan pendekatan kedua. Seperti yang anda mun
while not done:
#env.render()
obs, rew, done, info = env.step(env.action_space.sample())
#print(discretize_bins(obs))
#print(diskretkan_bin(obs))
print(discretize(obs))
env.close()
```
Nyahkomen baris yang bermula dengan env.render jika anda ingin melihat bagaimana persekitaran dilaksanakan. Jika tidak, anda boleh melaksanakannya di latar belakang, yang lebih cepat. Kita akan menggunakan pelaksanaan "tidak kelihatan" ini semasa proses Q-Learning kita.
Buka komen pada baris yang bermula dengan env.render jika anda mahu melihat bagaimana persekitaran berjalan. Jika tidak, anda boleh menjalankannya di latar belakang, yang lebih pantas. Kita akan menggunakan pelaksanaan "tidak nampak" ini sepanjang proses Q-Learning kita.
## Struktur Q-Table
Dalam pelajaran sebelumnya, keadaan adalah pasangan nombor mudah dari 0 hingga 8, dan oleh itu ia mudah untuk mewakili Q-Table dengan tensor numpy dengan bentuk 8x8x2. Jika kita menggunakan diskretisasi bin, saiz vektor keadaan kita juga diketahui, jadi kita boleh menggunakan pendekatan yang sama dan mewakili keadaan dengan array bentuk 20x20x10x10x2 (di sini 2 adalah dimensi ruang tindakan, dan dimensi pertama sepadan dengan bilangan bin yang kita pilih untuk digunakan bagi setiap parameter dalam ruang pemerhatian).
Dalam pelajaran sebelumnya, keadaan adalah sepasang nombor dari 0 hingga 8, dan oleh itu mudah untuk mewakili Q-Table dengan tensor numpy berbentuk 8x8x2. Jika kita menggunakan diskretisasi bin, saiz vektor keadaan juga diketahui, jadi kita boleh menggunakan pendekatan yang sama dan wakili keadaan dengan array berbentuk 20x20x10x10x2 (di sini 2 adalah dimensi ruang tindakan, dan dimensi pertama merujuk kepada bilangan bin yang kita pilih untuk setiap parameter dalam ruang pemerhatian).
Walau bagaimanapun, kadangkala dimensi tepat ruang pemerhatian tidak diketahui. Dalam kes fungsi `discretize`, kita mungkin tidak pernah pasti bahawa keadaan kita kekal dalam had tertentu, kerana beberapa nilai asal tidak terikat. Oleh itu, kita akan menggunakan pendekatan yang sedikit berbeza dan mewakili Q-Table dengan kamus.
Walau bagaimanapun, kadangkala dimensi tepat ruang pemerhatian tidak diketahui. Dalam kes fungsi `discretize`, kita mungkin tidak pasti sama ada keadaan kita kekal dalam had tertentu, kerana beberapa nilai asal tidak terbatas. Oleh itu, kita akan menggunakan pendekatan sedikit berbeza dan mewakili Q-Table dengan kamus.
1. Gunakan pasangan *(state,action)* sebagai kunci kamus, dan nilai akan sepadan dengan nilai entri Q-Table. (blok kod 9)
1. Gunakan pasangan *(state,action)* sebagai kekunci kamus, dan nilai akan merujuk kepada entri Q-Table. (blok kod 9)
```python
Q = {}
@ -168,38 +188,38 @@ Walau bagaimanapun, kadangkala dimensi tepat ruang pemerhatian tidak diketahui.
return [Q.get((state,a),0) for a in actions]
```
Di sini kita juga mentakrifkan fungsi `qvalues()`, yang mengembalikan senarai nilai Q-Table untuk keadaan tertentu yang sepadan dengan semua tindakan yang mungkin. Jika entri tidak hadir dalam Q-Table, kita akan mengembalikan 0 sebagai lalai.
Di sini kita juga mentakrifkan fungsi `qvalues()`, yang mengembalikan senarai nilai Q-Table untuk keadaan tertentu yang meliputi semua tindakan yang mungkin. Jika entri tidak ada dalam Q-Table, kita akan mengembalikan 0 sebagai nilai lalai.
## Mari mulakan Q-Learning
Sekarang kita bersedia untuk mengajar Peter untuk menyeimbangkan!
Sekarang kita bersedia untuk mengajar Peter cara mengekalkan keseimbangan!
1. Pertama, mari tetapkan beberapa hiperparameter: (blok kod 10)
```python
# hyperparameters
# hiperparameter
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
Di sini, `alpha` adalah **kadar pembelajaran** yang menentukan sejauh mana kita harus menyesuaikan nilai semasa Q-Table pada setiap langkah. Dalam pelajaran sebelumnya kita bermula dengan 1, dan kemudian menurunkan `alpha` kepada nilai yang lebih rendah semasa latihan. Dalam contoh ini kita akan mengekalkannya tetap untuk kesederhanaan, dan anda boleh bereksperimen dengan menyesuaikan nilai `alpha` kemudian.
Di sini, `alpha` adalah **kadar pembelajaran** yang mentakrifkan sejauh mana kita harus melaraskan nilai Q-Table pada setiap langkah. Dalam pelajaran sebelumnya kita bermula dengan 1, kemudian mengurangkan `alpha` kepada nilai lebih rendah semasa latihan. Dalam contoh ini kita akan mengekalkannya sebagai tetap untuk kesederhanaan, dan anda boleh bereksperimen dengan melaraskan nilai `alpha` kemudian.
`gamma` adalah **faktor diskaun** yang menunjukkan sejauh mana kita harus mengutamakan ganjaran masa depan berbanding ganjaran semasa.
`epsilon` adalah **faktor penerokaan/eksploitasi** yang menentukan sama ada kita harus memilih penerokaan berbanding eksploitasi atau sebaliknya. Dalam algoritma kita, kita akan dalam peratusan `epsilon` kes memilih tindakan seterusnya mengikut nilai Q-Table, dan dalam baki kes kita akan melaksanakan tindakan secara rawak. Ini akan membolehkan kita meneroka kawasan ruang carian yang belum pernah kita lihat sebelum ini.
✅ Dalam konteks keseimbangan - memilih tindakan secara rawak (penerokaan) akan bertindak sebagai pukulan rawak ke arah yang salah, dan tiang perlu belajar bagaimana untuk memulihkan keseimbangan daripada "kesilapan" tersebut.
`epsilon` adalah **faktor eksplorasi/eksploitasi** yang menentukan sama ada kita harus mengutamakan eksplorasi berbanding eksploitasi atau sebaliknya. Dalam algoritma kita, dalam peratusan `epsilon` kes kita akan memilih tindakan seterusnya menurut nilai Q-Table, dan dalam baki kes kita akan melakukan tindakan rawak. Ini membolehkan kita meneroka kawasan ruang carian yang belum pernah dilihat sebelum ini.
### Meningkatkan algoritma
✅ Dalam konteks keseimbangan - memilih tindakan rawak (eksplorasi) bertindak seperti tumbukan rawak ke arah yang salah, dan tiang perlu belajar bagaimana memulihkan keseimbangan dari "kesilapan" tersebut.
Kita juga boleh membuat dua penambahbaikan pada algoritma kita daripada pelajaran sebelumnya:
### Memperbaiki algoritma
- **Kira ganjaran kumulatif purata**, sepanjang beberapa simulasi. Kita akan mencetak kemajuan setiap 5000 iterasi, dan kita akan mengambil purata ganjaran kumulatif kita sepanjang tempoh masa tersebut. Ini bermakna jika kita mendapat lebih daripada 195 mata - kita boleh menganggap masalah itu selesai, dengan kualiti yang lebih tinggi daripada yang diperlukan.
Kita juga boleh membuat dua penambahbaikan pada algoritma kita dari pelajaran sebelumnya:
- **Kira hasil kumulatif purata maksimum**, `Qmax`, dan kita akan menyimpan Q-Table yang sepadan dengan hasil tersebut. Apabila anda menjalankan latihan, anda akan perasan bahawa kadangkala hasil kumulatif purata mula menurun, dan kita mahu menyimpan nilai Q-Table yang sepadan dengan model terbaik yang diperhatikan semasa latihan.
- **Kira ganjaran kumulatif purata**, sepanjang beberapa simulasi. Kita akan mencetak kemajuan setiap 5000 iterasi, dan kita akan puratakan ganjaran kumulatif kita sepanjang tempoh masa tersebut. Ini bermakna jika kita mendapat lebih daripada 195 mata - kita boleh anggap masalah selesai, dengan kualiti lebih tinggi daripada yang diperlukan.
- **Kira hasil kumulatif purata maksimum**, `Qmax`, dan kita akan simpan Q-Table yang sepadan dengan hasil itu. Apabila anda menjalankan latihan, anda akan perasan kadang-kadang hasil kumulatif purata mula menurun, dan kita mahu mengekalkan nilai Q-Table yang sepadan dengan model terbaik yang diperhatikan semasa latihan.
1. Kumpulkan semua ganjaran kumulatif pada setiap simulasi dalam vektor `rewards` untuk plot kemudian. (blok kod 11)
1. Kumpul semua ganjaran kumulatif setiap simulasi dalam vektor `rewards` untuk plot kemudian. (blok kod 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ Kita juga boleh membuat dua penambahbaikan pada algoritma kita daripada pelajara
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
# == lakukan simulasi ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
# eksploitasi - pilih tindakan menurut kebarangkalian Jadual-Q
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
# eksplorasi - pilih tindakan secara rawak
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
@ -231,7 +251,7 @@ Kita juga boleh membuat dua penambahbaikan pada algoritma kita daripada pelajara
Q[(s,a)] = (1 - alpha) * Q.get((s,a),0) + alpha * (rew + gamma * max(qvalues(ns)))
cum_rewards.append(cum_reward)
rewards.append(cum_reward)
# == Periodically print results and calculate average reward ==
# == Cetak hasil secara berkala dan kira purata ganjaran ==
if epoch%5000==0:
print(f"{epoch}: {np.average(cum_rewards)}, alpha={alpha}, epsilon={epsilon}")
if np.average(cum_rewards) > Qmax:
@ -240,25 +260,25 @@ Kita juga boleh membuat dua penambahbaikan pada algoritma kita daripada pelajara
cum_rewards=[]
```
Apa yang anda mungkin perasan daripada hasil tersebut:
Apa yang mungkin anda perhatikan dari keputusan itu:
- **Hampir mencapai matlamat**. Kita sangat hampir mencapai matlamat mendapatkan 195 ganjaran kumulatif dalam lebih daripada 100 percubaan berturut-turut simulasi, atau kita mungkin telah mencapainya! Walaupun kita mendapat nombor yang lebih kecil, kita masih tidak tahu, kerana kita mengambil purata lebih daripada 5000 percubaan, dan hanya 100 percubaan diperlukan dalam kriteria formal.
- **Hampir mencapai matlamat**. Kita sangat hampir dengan mencapai matlamat mendapat 195 ganjaran kumulatif selama lebih 100 larian berturut-turut simulasi, atau kita mungkin sudah mencapainya! Walaupun kita mendapat nombor lebih rendah, kita masih tidak pasti kerana kita mempuratakan atas 5000 larian, dan hanya 100 larian diperlukan dalam kriteria rasmi.
- **Ganjaran mula menurun**. Kadang-kadang ganjaran mula menurun, yang bermaksud kita boleh "menghancurkan" nilai yang telah dipelajari dalam Q-Table dengan nilai yang membuat keadaan lebih buruk.
- **Ganjaran mula menurun**. Kadangkala ganjaran mula menurun, yang bermaksud kita boleh "merosakkan" nilai yang telah dipelajari dalam Q-Table dengan nilai yang menjadikan keadaan lebih buruk.
Pemerhatian ini lebih jelas jika kita plot kemajuan latihan.
Pemerhatian ini lebih jelas kelihatan jika kita memplotkan kemajuan latihan.
## Plot Kemajuan Latihan
## Memplotkan Kemajuan Latihan
Semasa latihan, kita telah mengumpulkan nilai ganjaran kumulatif pada setiap iterasi ke dalam vektor `rewards`. Berikut adalah bagaimana ia kelihatan apabila kita memplotkannya terhadap nombor iterasi:
Semasa latihan, kita telah mengumpul nilai ganjaran kumulatif pada setiap iterasi ke dalam vektor `rewards`. Inilah bagaimana ia kelihatan apabila kita plot terhadap nombor iterasi:
```python
plt.plot(rewards)
```
![kemajuan mentah](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png)
![raw progress](../../../../translated_images/ms/train_progress_raw.2adfdf2daea09c59.webp)
Daripada graf ini, tidak mungkin untuk memberitahu apa-apa, kerana disebabkan sifat proses latihan stokastik, panjang sesi latihan berbeza dengan ketara. Untuk membuat graf ini lebih bermakna, kita boleh mengira **purata berjalan** sepanjang siri eksperimen, katakan 100. Ini boleh dilakukan dengan mudah menggunakan `np.convolve`: (blok kod 12)
Daripada graf ini, tidak mungkin untuk membuat kesimpulan, kerana sifat proses latihan stokastik menyebabkan panjang sesi latihan sangat berbeza-beza. Untuk membuatkan graf ini lebih bermakna, kita boleh kira **purata bergerak** sepanjang beberapa eksperimen, katakan 100. Ini boleh dilakukan dengan mudah menggunakan `np.convolve`: (blok kod 12)
```python
def running_average(x,window):
@ -267,21 +287,24 @@ def running_average(x,window):
plt.plot(running_average(rewards,100))
```
![kemajuan latihan](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png)
![training progress](../../../../translated_images/ms/train_progress_runav.c71694a8fa9ab359.webp)
## Menukar hiperparameter
Untuk menjadikan pembelajaran lebih stabil, masuk akal untuk melaraskan beberapa hiperparameter semasa latihan. Khususnya:
- **Untuk kadar pembelajaran**, `alpha`, kita boleh mulakan dengan nilai hampir 1, kemudian kurangkan parameter ini. Dengan masa, kita akan mendapat nilai kebarangkalian yang baik dalam Q-Table, jadi kita perlu melaraskannya sedikit, dan bukan menimpa sepenuhnya dengan nilai baru.
## Mengubah hiperparameter
- **Tingkatkan epsilon**. Kita mungkin mahu tingkatkan `epsilon` perlahan-lahan, supaya kurang meneroka dan lebih mengeksploitasi. Mungkin masuk akal bermula dengan nilai `epsilon` rendah, dan naik ke hampir 1.
Untuk membuat pembelajaran lebih stabil, masuk akal untuk menyesuaikan beberapa hiperparameter kita semasa latihan. Khususnya:
> **Tugasan 1**: Cuba bermain dengan nilai hiperparameter dan lihat jika anda boleh mencapai ganjaran kumulatif yang lebih tinggi. Adakah anda mendapat lebih daripada 195?
- **Untuk kadar pembelajaran**, `alpha`, kita boleh bermula dengan nilai yang hampir dengan 1, dan kemudian terus menurunkan parameter. Dengan masa, kita akan mendapat nilai kebarangkalian yang baik dalam Q-Table, dan oleh itu kita harus menyesuaikannya sedikit, dan tidak menulis semula sepenuhnya dengan nilai baru.
- **Tingkatkan epsilon**. Kita mungkin mahu meningkatkan `epsilon` secara perlahan, untuk meneroka kurang dan mengeksploitasi lebih banyak. Mungkin masuk akal untuk bermula dengan nilai `epsilon` yang lebih rendah, dan meningkatkannya hampir kepada 1.
> **Tugas 1**: Cuba ubah nilai hiperparameter dan lihat jika anda boleh mencapai ganjaran kumulatif yang lebih tinggi. Adakah anda mendapat lebih daripada 195?
> **Tugas 2**: Untuk menyelesaikan masalah ini secara formal, anda perlu mencapai purata ganjaran sebanyak 195 dalam 100 larian berturut-turut. Ukur semasa latihan dan pastikan anda telah menyelesaikan masalah ini secara formal!
> **Tugasan 2**: Untuk menyelesaikan masalah secara rasmi, anda perlu mendapatkan purata ganjaran sebanyak 195 sepanjang 100 larian berturut-turut. Ukur itu semasa latihan dan pastikan anda telah menyelesaikan masalah secara rasmi!
## Melihat hasil dalam tindakan
Ia akan menarik untuk melihat bagaimana model yang telah dilatih berfungsi. Mari jalankan simulasi dan ikuti strategi pemilihan tindakan yang sama seperti semasa latihan, dengan pensampelan mengikut taburan kebarangkalian dalam Q-Table: (blok kod 13)
Ia akan menjadi menarik untuk benar-benar melihat bagaimana model yang dilatih berkelakuan. Mari jalankan simulasi dan ikut strategi pemilihan tindakan yang sama seperti semasa latihan, sampel mengikut taburan kebarangkalian dalam Q-Table: (blok kod 13)
```python
obs = env.reset()
@ -295,7 +318,7 @@ while not done:
env.close()
```
Anda sepatutnya melihat sesuatu seperti ini:
Anda harus melihat sesuatu seperti ini:
![a balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
@ -303,22 +326,24 @@ Anda sepatutnya melihat sesuatu seperti ini:
## 🚀Cabaran
> **Tugas 3**: Di sini, kita menggunakan salinan akhir Q-Table, yang mungkin bukan yang terbaik. Ingat bahawa kita telah menyimpan Q-Table yang berprestasi terbaik ke dalam pemboleh ubah `Qbest`! Cuba contoh yang sama dengan Q-Table yang berprestasi terbaik dengan menyalin `Qbest` ke `Q` dan lihat jika anda perasan perbezaannya.
> **Tugasan 3**: Di sini, kami menggunakan salinan terakhir Q-Table, yang mungkin bukan yang terbaik. Ingat bahawa kami telah menyimpan Q-Table dengan prestasi terbaik ke dalam pembolehubah `Qbest`! Cuba contoh yang sama dengan Q-Table prestasi terbaik dengan menyalin `Qbest` ke `Q` dan lihat jika anda perasan perbezaannya.
> **Tugas 4**: Di sini kita tidak memilih tindakan terbaik pada setiap langkah, tetapi sebaliknya melakukan pensampelan dengan taburan kebarangkalian yang sepadan. Adakah lebih masuk akal untuk sentiasa memilih tindakan terbaik, dengan nilai Q-Table tertinggi? Ini boleh dilakukan dengan menggunakan fungsi `np.argmax` untuk mencari nombor tindakan yang sepadan dengan nilai Q-Table tertinggi. Laksanakan strategi ini dan lihat jika ia meningkatkan keseimbangan.
> **Tugasan 4**: Di sini kami tidak memilih tindakan terbaik pada setiap langkah, tetapi sebaliknya menyampel dengan taburan kebarangkalian yang sepadan. Adakah lebih masuk akal untuk sentiasa memilih tindakan terbaik, dengan nilai Q-Table tertinggi? Ini boleh dilakukan dengan menggunakan fungsi `np.argmax` untuk mencari nombor tindakan yang sepadan dengan nilai Q-Table tertinggi. Laksanakan strategi ini dan lihat jika ia meningkatkan keseimbangan.
## [Kuiz selepas kuliah](https://ff-quizzes.netlify.app/en/ml/)
## [Kuiz pasca kuliah](https://ff-quizzes.netlify.app/en/ml/)
## Tugasan
[Latih Mountain Car](assignment.md)
[Latih Kereta Gunung](assignment.md)
## Kesimpulan
Kita kini telah belajar bagaimana melatih agen untuk mencapai hasil yang baik hanya dengan menyediakan fungsi ganjaran yang menentukan keadaan permainan yang diinginkan, dan dengan memberi mereka peluang untuk meneroka ruang carian secara bijak. Kita telah berjaya menggunakan algoritma Q-Learning dalam kes persekitaran diskret dan berterusan, tetapi dengan tindakan diskret.
Kami kini telah belajar bagaimana untuk melatih agen untuk mencapai keputusan yang baik hanya dengan memberikan mereka fungsi ganjaran yang mentakrifkan keadaan permainan yang dikehendaki, dan dengan memberi mereka peluang untuk menjelajah ruang carian secara bijak. Kami telah berjaya menggunakan algoritma Q-Learning dalam kes persekitaran diskret dan berterusan, tetapi dengan tindakan diskret.
Adalah penting untuk juga mengkaji situasi di mana keadaan tindakan juga berterusan, dan apabila ruang pemerhatian jauh lebih kompleks, seperti imej dari skrin permainan Atari. Dalam masalah tersebut, kita sering perlu menggunakan teknik pembelajaran mesin yang lebih berkuasa, seperti rangkaian neural, untuk mencapai hasil yang baik. Topik yang lebih maju ini adalah subjek kursus AI lanjutan kita yang akan datang.
Ia penting juga untuk mengkaji situasi di mana keadaan tindakan juga berterusan, dan apabila ruang pemerhatian jauh lebih kompleks, seperti imej daripada skrin permainan Atari. Dalam masalah tersebut, kami sering perlu menggunakan teknik pembelajaran mesin yang lebih berkuasa, seperti rangkaian neural, untuk mencapai keputusan yang baik. Topik yang lebih maju ini adalah subjek kursus AI lanjutan kami yang akan datang.
---
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Penafian**:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI [Co-op Translator](https://github.com/Azure/co-op-translator). Walaupun kami berusaha untuk ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan oleh manusia profesional adalah disyorkan. Kami tidak bertanggungjawab terhadap sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -24,8 +24,8 @@
"language_code": "tl"
},
"1-Introduction/3-fairness/README.md": {
"original_hash": "9a6b702d1437c0467e3c5c28d763dac2",
"translation_date": "2025-09-05T18:17:24+00:00",
"original_hash": "0f00d72169a0d37eecfd16d71e01700a",
"translation_date": "2026-07-14T06:59:07+00:00",
"source_file": "1-Introduction/3-fairness/README.md",
"language_code": "tl"
},
@ -54,8 +54,8 @@
"language_code": "tl"
},
"2-Regression/1-Tools/README.md": {
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
"translation_date": "2025-09-05T18:11:11+00:00",
"original_hash": "0b8635427b582d03ea4ab7089b93e505",
"translation_date": "2026-07-14T06:53:52+00:00",
"source_file": "2-Regression/1-Tools/README.md",
"language_code": "tl"
},
@ -72,8 +72,8 @@
"language_code": "tl"
},
"2-Regression/2-Data/README.md": {
"original_hash": "7c077988328ebfe33b24d07945f16eca",
"translation_date": "2025-09-05T18:11:53+00:00",
"original_hash": "a58b2c4d16c6b122643391745ac15af6",
"translation_date": "2026-07-14T06:55:11+00:00",
"source_file": "2-Regression/2-Data/README.md",
"language_code": "tl"
},
@ -89,6 +89,12 @@
"source_file": "2-Regression/2-Data/solution/Julia/README.md",
"language_code": "tl"
},
"2-Regression/2-Data/solution/notebook.ipynb": {
"original_hash": "96b95f8cf473481f2f371de8156f1571",
"translation_date": "2026-07-14T06:28:57+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "tl"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:45:17+00:00",
@ -457,7 +463,7 @@
},
"8-Reinforcement/1-QLearning/README.md": {
"original_hash": "911efd5e595089000cb3c16fce1beab8",
"translation_date": "2025-09-05T18:23:22+00:00",
"translation_date": "2026-07-14T06:56:36+00:00",
"source_file": "8-Reinforcement/1-QLearning/README.md",
"language_code": "tl"
},
@ -481,7 +487,7 @@
},
"8-Reinforcement/2-Gym/README.md": {
"original_hash": "107d5bb29da8a562e7ae72262d251a75",
"translation_date": "2025-09-05T18:24:05+00:00",
"translation_date": "2026-07-14T06:57:55+00:00",
"source_file": "8-Reinforcement/2-Gym/README.md",
"language_code": "tl"
},
@ -581,6 +587,19 @@
"source_file": "TROUBLESHOOTING.md",
"language_code": "tl"
},
"__translation_failures__": {
"sketchnotes/LICENSE.md": {
"original_hash": "fba3b94d88bfb9b81369b869a1e9a20f",
"source_file": "sketchnotes/LICENSE.md",
"language_code": "tl",
"failure_date": "2026-07-14T06:52:47+00:00",
"status": "failed",
"error_type": "TranslationIncompleteError",
"error_message": "Markdown translation remained incomplete for chunk 1.1.2 of 'LICENSE.md', and the chunk could not be split further.",
"translator_version": "0.20.0",
"failure_policy_version": 1
}
},
"docs/_sidebar.md": {
"original_hash": "68dd06c685f6ce840e0acfa313352e7c",
"translation_date": "2025-08-29T13:28:47+00:00",

@ -1,149 +1,167 @@
# Paggawa ng Solusyon sa Machine Learning gamit ang Responsible AI
![Buod ng Responsible AI sa Machine Learning sa isang sketchnote](../../../../sketchnotes/ml-fairness.png)
# Paggawa ng mga Solusyon sa Machine Learning gamit ang responsable na AI
![Buod ng responsable na AI sa Machine Learning sa isang sketchnote](../../../../translated_images/tl/ml-fairness.ef296ebec6afc98a.webp)
> Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## Panimula
Sa kurikulum na ito, sisimulan mong tuklasin kung paano nakakaapekto ang machine learning sa ating pang-araw-araw na buhay. Sa kasalukuyan, ang mga sistema at modelo ay ginagamit sa mga desisyon sa araw-araw tulad ng mga diagnosis sa pangangalaga ng kalusugan, pag-apruba ng pautang, o pagtuklas ng pandaraya. Kaya mahalaga na ang mga modelong ito ay gumana nang maayos upang magbigay ng mga resulta na mapagkakatiwalaan. Tulad ng anumang software application, ang mga sistema ng AI ay maaaring hindi umabot sa inaasahan o magdulot ng hindi kanais-nais na resulta. Kaya mahalaga na maunawaan at maipaliwanag ang pag-uugali ng isang AI model.
Sa kurikulm na ito, sisimulan mong tuklasin kung paano nakakaapekto ang machine learning sa ating pang-araw-araw na buhay. Kahit ngayon, ang mga sistema at modelo ay kasali sa mga gawain ng pang-araw-araw na paggawa ng desisyon, tulad ng mga diagnosis sa pangangalagang pangkalusugan, pag-apruba ng mga pautang o pagtukoy ng pandaraya. Kaya mahalaga na ang mga modelong ito ay gumana nang maayos upang makapagbigay ng mga resulta na mapagkakatiwalaan. Katulad ng anumang aplikasyon ng software, ang mga sistema ng AI ay maaaring hindi makamit ang mga inaasahan o magkaroon ng hindi kanais-nais na resulta. Kaya mahalaga na maunawaan at maipaliwanag ang pag-uugali ng isang AI na modelo.
Isipin kung ano ang maaaring mangyari kapag ang data na ginagamit mo upang bumuo ng mga modelong ito ay kulang sa ilang demograpiko tulad ng lahi, kasarian, pananaw sa politika, relihiyon, o hindi pantay na kinakatawan ang mga demograpikong ito. Paano kung ang output ng modelo ay pabor sa isang demograpiko? Ano ang magiging epekto nito sa aplikasyon? Bukod dito, ano ang mangyayari kapag ang modelo ay nagkaroon ng masamang resulta at nakapinsala sa mga tao? Sino ang may pananagutan sa pag-uugali ng mga sistema ng AI? Ito ang ilan sa mga tanong na ating susuriin sa kurikulum na ito.
Isipin kung ano ang maaaring mangyari kapag ang datos na ginagamit mo upang gumawa ng mga modelong ito ay kulang sa ilang demograpiko, tulad ng lahi, kasarian, pananaw pampolitika, relihiyon, o hindi pantay na kinakatawan ang mga demograpikong ito. Paano kung ang output ng modelo ay naipakahulugan upang paboran ang ilang demograpiko? Ano ang magiging epekto nito sa aplikasyon? Bukod dito, ano ang mangyayari kapag ang modelo ay nagkaroon ng masamang resulta at nakapipinsala sa mga tao? Sino ang may pananagutan sa pag-uugali ng mga sistema ng AI? Ito ang ilan sa mga tanong na tatalakayin natin sa kurikulm na ito.
Sa araling ito, ikaw ay:
- Magkakaroon ng kamalayan sa kahalagahan ng pagiging patas sa machine learning at mga pinsalang kaugnay nito.
- Malalaman ang kahalagahan ng pagsusuri sa mga outliers at hindi pangkaraniwang sitwasyon upang matiyak ang pagiging maaasahan at kaligtasan.
- Mauunawaan ang pangangailangan na bigyang kapangyarihan ang lahat sa pamamagitan ng pagdidisenyo ng mga inklusibong sistema.
- Susuriin ang kahalagahan ng pagprotekta sa privacy at seguridad ng data at mga tao.
- Makikita ang kahalagahan ng "glass box" na diskarte upang maipaliwanag ang pag-uugali ng mga modelo ng AI.
- Magiging maingat sa kung paano mahalaga ang pananagutan upang makabuo ng tiwala sa mga sistema ng AI.
- Magpapataas ng iyong kamalayan sa kahalagahan ng katarungan sa machine learning at mga pinsalang may kaugnayan sa katarungan.
- Maging pamilyar sa pagsasanay ng pagsusuri sa mga outliers at mga hindi pangkaraniwang senaryo upang matiyak ang pagiging maaasahan at kaligtasan
- Makakakuha ng pag-unawa sa pangangailangan na bigyang kapangyarihan ang lahat sa pamamagitan ng pagdidisenyo ng mga inklusibong sistema
- Tuklasin kung gaano kahalaga ang protektahan ang privacy at seguridad ng datos at mga tao
- Makita ang kahalagahan ng pagkakaroon ng glass box na pamamaraan upang ipaliwanag ang pag-uugali ng mga AI na modelo
- Maging maingat kung paano mahalaga ang pananagutan upang makabuo ng tiwala sa mga sistema ng AI
## Paunang Kaalaman
Bilang paunang kaalaman, mangyaring kunin ang "Responsible AI Principles" Learn Path at panoorin ang video sa ibaba tungkol sa paksa:
Matuto pa tungkol sa Responsible AI sa pamamagitan ng pagsunod sa [Learning Path](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
Matuto pa tungkol sa Responsable na AI sa pamamagitan ng pagsunod sa [Learning Path](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
[![Microsoft's Approach to Responsible AI](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft's Approach to Responsible AI")
> 🎥 I-click ang imahe sa itaas para sa video: Microsoft's Approach to Responsible AI
> 🎥 Pindutin ang larawan sa itaas para sa video: Microsoft's Approach to Responsible AI
## Pagiging Patas
## Katarungan
Ang mga sistema ng AI ay dapat tratuhin ang lahat nang patas at iwasan ang pag-apekto sa mga katulad na grupo ng tao sa iba't ibang paraan. Halimbawa, kapag ang mga sistema ng AI ay nagbibigay ng gabay sa paggamot sa medikal, aplikasyon ng pautang, o trabaho, dapat silang magbigay ng parehong rekomendasyon sa lahat ng may magkatulad na sintomas, kalagayan sa pananalapi, o kwalipikasyon sa propesyon. Bawat isa sa atin bilang tao ay may dalang likas na bias na nakakaapekto sa ating mga desisyon at aksyon. Ang mga bias na ito ay maaaring makita sa data na ginagamit natin upang sanayin ang mga sistema ng AI. Ang ganitong manipulasyon ay minsan nangyayari nang hindi sinasadya. Madalas mahirap malaman nang may kamalayan kung kailan ka nagdadala ng bias sa data.
Dapat tratuhin nang patas ng mga sistema ng AI ang lahat at iwasan ang pagapekto nang magkakaibang paraan sa mga magkakatulad na grupo ng mga tao. Halimbawa, kapag ang mga sistema ng AI ay nagbibigay ng gabay sa medikal na paggamot, aplikasyon ng pautang, o trabaho, dapat silang magbigay ng parehong rekomendasyon sa lahat na may magkakaparehong sintomas, kalagayan sa pananalapi, o kwalipikasyon sa propesyon. Bawat isa sa atin bilang tao ay may dala-dalang mga pinanggalingang pagkiling na nakakaapekto sa ating mga desisyon at kilos. Ang mga pagkiling na ito ay maaaring makikita sa datos na ginagamit natin upang sanayin ang mga sistema ng AI. Ang ganitong manipulasyon ay maaaring mangyari nang hindi sinasadya. Madalas mahirap malay-tao na malaman kung kailan ka nagdadagdag ng pagkiling sa datos.
Ang **“Kawalan ng Pagiging Patas”** ay sumasaklaw sa mga negatibong epekto, o “pinsala”, para sa isang grupo ng tao, tulad ng mga tinukoy batay sa lahi, kasarian, edad, o kalagayan ng kapansanan. Ang mga pangunahing pinsalang kaugnay ng pagiging patas ay maaaring uriin bilang:
**“Hindi patas”** ay sumasaklaw sa mga negatibong epekto, o "pinsala", para sa isang grupo ng mga tao, tulad ng mga tinutukoy ayon sa lahi, kasarian, edad, o katayuan sa kapansanan. Ang mga pangunahing pinsalang may kaugnayan sa katarungan ay maaaring iklase bilang:
- **Paglalaan**, kung ang isang kasarian o etnisidad ay pinapaboran kaysa sa iba.
- **Kalidad ng serbisyo**. Kung sinanay mo ang data para sa isang partikular na sitwasyon ngunit mas kumplikado ang realidad, nagdudulot ito ng mahinang serbisyo. Halimbawa, isang dispenser ng sabon na hindi makadetect ng mga taong may maitim na balat. [Sanggunian](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Pagkakalait**. Hindi patas na pagbatikos o pag-label sa isang bagay o tao. Halimbawa, isang teknolohiya sa pag-label ng imahe na maling tinukoy ang mga imahe ng mga taong may maitim na balat bilang gorilya.
- **Sobra o kulang na representasyon**. Ang ideya na ang isang grupo ay hindi nakikita sa isang partikular na propesyon, at anumang serbisyo o function na patuloy na nagpo-promote nito ay nagdudulot ng pinsala.
- **Stereotyping**. Pag-uugnay ng isang grupo sa mga pre-assigned na katangian. Halimbawa, isang sistema ng pagsasalin ng wika sa pagitan ng Ingles at Turkish ay maaaring magkaroon ng mga kamalian dahil sa mga salitang may stereotypical na kaugnayan sa kasarian.
- **Alokasyon**, kung halimbawa ay pinapaboran ang isang kasarian o etnisidad kaysa sa iba.
- **Kalidad ng serbisyo**. Kapag sinanay mo ang datos para sa isang tiyak na senaryo subalit mas komplikado ang realidad, magreresulta ito sa mahina na serbisyo. Halimbawa, isang dispenser ng sabon sa kamay na hindi makita ang mga taong may maitim na balat. [Reference](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
- **Pang-iinsulto**. Hindi patas na pagsaway at paglalagay ng label sa isang bagay o tao. Halimbawa, ang teknolohiya sa pag-label ng imahe ay kilalang maling inilalagay ang label sa mga larawan ng mga taong may maitim na balat bilang mga gorilya.
- **Sobra o kulang na representasyon**. Ang ideya ay may isang grupo na hindi nakikita sa isang tiyak na propesyon, at anumang serbisyo o tungkuling nagpapatuloy sa ganito ay nagdudulot ng pinsala.
- **Stereotyping**. Pag-uugnay sa isang grupo ng mga pre-natukoy na mga katangian. Halimbawa, isang sistema ng pagsasalin ng wika sa pagitan ng Ingles at Turkish ay maaaring magkaroon ng mga kamalian dahil sa mga salita na may stereotypical na kaugnayan sa kasarian.
![pagsasalin sa Turkish](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png)
![pagsasalin sa Turkish](../../../../translated_images/tl/gender-bias-translate-en-tr.f185fd8822c2d437.webp)
> pagsasalin sa Turkish
![pagsasalin pabalik sa Ingles](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png)
![pagsasalin pabalik sa Ingles](../../../../translated_images/tl/gender-bias-translate-tr-en.4eee7e3cecb8c70e.webp)
> pagsasalin pabalik sa Ingles
Kapag nagdidisenyo at sumusubok ng mga sistema ng AI, kailangan nating tiyakin na ang AI ay patas at hindi naka-program upang gumawa ng biased o diskriminatoryong desisyon, na ipinagbabawal din sa mga tao. Ang pagtiyak ng pagiging patas sa AI at machine learning ay nananatiling isang kumplikadong hamon sa teknolohiya at lipunan.
Kapag nagdidisenyo at sumusubok ng mga sistema ng AI, kailangan nating matiyak na ang AI ay patas at hindi naka-program upang gumawa ng mga pagkiling o mapanirang desisyon, na ipinagbabawal din sa mga tao. Ang pagtiyak ng katarungan sa AI at machine learning ay nananatiling isang kumplikadong sociotechnical na hamon.
### Pagiging Maaasahan at Kaligtasan
### Pagiging maaasahan at kaligtasan
Upang makabuo ng tiwala, ang mga sistema ng AI ay kailangang maging maaasahan, ligtas, at pare-pareho sa normal at hindi inaasahang mga kondisyon. Mahalagang malaman kung paano mag-uugali ang mga sistema ng AI sa iba't ibang sitwasyon, lalo na kapag may mga outliers. Kapag gumagawa ng mga solusyon sa AI, kailangang magbigay ng malaking pansin sa kung paano haharapin ang iba't ibang sitwasyon na maaaring maranasan ng mga solusyon sa AI. Halimbawa, ang isang self-driving car ay kailangang unahin ang kaligtasan ng mga tao. Bilang resulta, ang AI na nagpapatakbo ng kotse ay kailangang isaalang-alang ang lahat ng posibleng senaryo na maaaring maranasan ng kotse tulad ng gabi, bagyo, o snowstorm, mga bata na tumatakbo sa kalsada, mga alagang hayop, mga konstruksyon sa kalsada, at iba pa. Ang kakayahan ng isang sistema ng AI na maayos na makayanan ang malawak na hanay ng mga kondisyon ay sumasalamin sa antas ng anticipation na isinasaalang-alang ng data scientist o AI developer sa disenyo o pagsubok ng sistema.
Upang makabuo ng tiwala, ang mga sistema ng AI ay kailangang maging maaasahan, ligtas, at pare-pareho sa ilalim ng mga normal at hindi inaasahang mga kundisyon. Mahalaga na malaman kung paano kikilos ang mga sistema ng AI sa iba't ibang mga sitwasyon, lalo na kapag sila ay mga outliers. Kapag gumagawa ng mga solusyon sa AI, kailangan ng malaking pokus kung paano haharapin ang iba't ibang mga sitwasyon na maaaring maranasan ng mga solusyong ito. Halimbawa, ang isang self-driving na kotse ay kailangang unahin ang kaligtasan ng mga tao. Bilang resulta, ang AI na nagpapatakbo sa kotse ay kailangang isaalang-alang ang lahat ng posibleng senaryo na maaaring maranasan ng kotse tulad ng gabi, malalakas na bagyo o snowstorm, mga batang tumatakbo sa kalsada, mga alagang hayop, mga konstruksyon ng kalsada, atbp. Kung gaano kahusay ang kayang hawakan ng isang sistema ng AI sa malawak na hanay ng mga kundisyon nang maaasahan at ligtas ay nagpapakita ng antas ng pag-asang isinasaalang-alang ng data scientist o AI developer sa panahon ng disenyo o pagsubok ng sistema.
> [🎥 I-click dito para sa video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
> [🎥 Pindutin dito para sa isang video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
### Inklusibidad
Ang mga sistema ng AI ay dapat idisenyo upang makisali at magbigay kapangyarihan sa lahat. Kapag nagdidisenyo at nagpapatupad ng mga sistema ng AI, ang mga data scientist at AI developer ay tumutukoy at tinutugunan ang mga potensyal na hadlang sa sistema na maaaring hindi sinasadyang mag-exclude ng mga tao. Halimbawa, mayroong 1 bilyong tao na may kapansanan sa buong mundo. Sa pag-unlad ng AI, mas madali nilang ma-access ang malawak na hanay ng impormasyon at mga oportunidad sa kanilang pang-araw-araw na buhay. Sa pamamagitan ng pagtugon sa mga hadlang, nagkakaroon ng pagkakataon na mag-innovate at bumuo ng mga produkto ng AI na may mas mahusay na karanasan na kapaki-pakinabang para sa lahat.
Ang mga sistema ng AI ay dapat idisenyo upang makisali at bigyang kapangyarihan ang lahat. Kapag nagdidisenyo at nagpapatupad ng mga sistema ng AI, tinutukoy at tinutugunan ng mga data scientist at AI developer ang mga potensyal na hadlang sa sistema na maaaring hindi sinasadyang mag-iwan ng mga tao. Halimbawa, mayroong 1 bilyong tao na may kapansanan sa buong mundo. Sa pag-unlad ng AI, maaari nilang mas madaling ma-access ang malawak na saklaw ng impormasyon at mga oportunidad sa kanilang pang-araw-araw na buhay. Sa pamamagitan ng pagtugon sa mga hadlang, lumilikha ito ng mga oportunidad upang mag-imbento at bumuo ng mga produktong AI na may mas mahusay na karanasan na kapaki-pakinabang sa lahat.
> [🎥 I-click dito para sa video: inclusiveness in AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
> [🎥 Pindutin dito para sa isang video: inklusibidad sa AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
### Seguridad at Privacy
### Seguridad at privacy
Ang mga sistema ng AI ay dapat maging ligtas at igalang ang privacy ng mga tao. Ang mga tao ay mas kaunti ang tiwala sa mga sistema na naglalagay sa kanilang privacy, impormasyon, o buhay sa panganib. Kapag nagsasanay ng mga modelo ng machine learning, umaasa tayo sa data upang makabuo ng pinakamahusay na resulta. Sa paggawa nito, ang pinagmulan ng data at integridad nito ay dapat isaalang-alang. Halimbawa, ang data ba ay isinumite ng user o pampublikong magagamit? Susunod, habang nagtatrabaho sa data, mahalagang bumuo ng mga sistema ng AI na maaaring protektahan ang kumpidensyal na impormasyon at labanan ang mga pag-atake. Habang nagiging mas laganap ang AI, ang pagprotekta sa privacy at pag-secure ng mahalagang personal at impormasyon ng negosyo ay nagiging mas kritikal at kumplikado. Ang mga isyu sa privacy at seguridad ng data ay nangangailangan ng espesyal na pansin para sa AI dahil ang access sa data ay mahalaga para sa mga sistema ng AI upang makagawa ng tumpak at may kaalamang mga hula at desisyon tungkol sa mga tao.
Ang mga sistema ng AI ay dapat na ligtas at igalang ang privacy ng mga tao. Mas malaki ang kawalan ng tiwala ng mga tao sa mga sistema na inilalagay sa panganib ang kanilang privacy, impormasyon, o buhay. Kapag nagsasanay ng mga machine learning na modelo, umaasa tayo sa datos upang makagawa ng pinakamahuhusay na resulta. Sa paggawa nito, dapat isaalang-alang ang pinagmulan ng datos at integridad nito. Halimbawa, ang datos ba ay isinumite ng user o pampublikong available? Sunod, habang nagtatrabaho sa datos, mahalaga ang pagbuo ng mga sistema ng AI na makakaprotekta sa kumpidensyal na impormasyon at makatatagal sa mga pag-atake. Habang mas laganap ang AI, ang pagprotekta sa privacy at seguridad ng mahahalagang personal at pang-negosyong impormasyon ay nagiging mas kritikal at kumplikado. Ang mga isyu sa privacy at seguridad ng datos ay nangangailangan ng masusing pansin para sa AI dahil ang access sa datos ay mahalaga upang makagawa ang mga sistema ng AI ng tumpak at may batayan na mga prediksyon at desisyon tungkol sa mga tao.
> [🎥 I-click dito para sa video: security in AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 Pindutin dito para sa isang video: seguridad sa AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Bilang isang industriya, nakagawa tayo ng makabuluhang pag-unlad sa Privacy & Security, na pinasigla ng mga regulasyon tulad ng GDPR (General Data Protection Regulation).
- Gayunpaman, sa mga sistema ng AI, kailangan nating kilalanin ang tensyon sa pagitan ng pangangailangan para sa mas personal na data upang gawing mas personal at epektibo ang mga sistema at privacy.
- Tulad ng sa pagsilang ng mga konektadong computer sa internet, nakikita rin natin ang malaking pagtaas sa bilang ng mga isyu sa seguridad na nauugnay sa AI.
- Kasabay nito, nakikita natin ang AI na ginagamit upang mapabuti ang seguridad. Halimbawa, karamihan sa mga modernong anti-virus scanner ay pinapagana ng AI heuristics ngayon.
- Kailangan nating tiyakin na ang ating mga proseso sa Data Science ay maayos na nakikiayon sa pinakabagong mga kasanayan sa privacy at seguridad.
- Bilang isang industriya nakagawa kami ng malalaking pag-unlad sa Privacy at seguridad, na lubos na pinatibay ng mga regulasyon tulad ng GDPR (General Data Protection Regulation).
- Ngunit sa mga sistema ng AI kailangan nating kilalanin ang tensyon sa pagitan ng pangangailangan para sa mas maraming personal na datos upang gawing mas personal at epektibo ang mga sistema at ang privacy.
- Katulad ng pagsilang ng mga nakakonektang computer sa internet, nakikita rin natin ang malaking pagdami ng mga isyu sa seguridad na may kaugnayan sa AI.
- Kasabay nito, nakita natin ang paggamit ng AI upang mapabuti ang seguridad. Halimbawa, karamihan sa mga modernong anti-virus scanners ay pinapatakbo ng mga AI heuristics ngayon.
- Kailangan nating matiyak na ang ating mga proseso sa Data Science ay naghahalo nang mapayapa sa pinakabagong mga kasanayan sa privacy at seguridad.
### Transparency
Ang mga sistema ng AI ay dapat na naiintindihan. Isang mahalagang bahagi ng transparency ay ang pagpapaliwanag sa pag-uugali ng mga sistema ng AI at kanilang mga bahagi. Ang pagpapabuti ng pag-unawa sa mga sistema ng AI ay nangangailangan na maunawaan ng mga stakeholder kung paano at bakit gumagana ang mga ito upang matukoy ang mga potensyal na isyu sa pagganap, mga alalahanin sa kaligtasan at privacy, bias, mga eksklusibong kasanayan, o hindi inaasahang resulta. Naniniwala rin kami na ang mga gumagamit ng mga sistema ng AI ay dapat maging tapat at bukas tungkol sa kung kailan, bakit, at paano nila pinipili na i-deploy ang mga ito, pati na rin ang mga limitasyon ng mga sistemang ginagamit nila. Halimbawa, kung ang isang bangko ay gumagamit ng isang sistema ng AI upang suportahan ang mga desisyon sa pagpapautang sa consumer, mahalagang suriin ang mga resulta at maunawaan kung aling data ang nakakaimpluwensya sa mga rekomendasyon ng sistema. Ang mga gobyerno ay nagsisimulang mag-regulate ng AI sa iba't ibang industriya, kaya ang mga data scientist at organisasyon ay dapat ipaliwanag kung ang isang sistema ng AI ay nakakatugon sa mga kinakailangan sa regulasyon, lalo na kapag may hindi kanais-nais na resulta.
### Transparency
Dapat na maintindihan ang mga sistema ng AI. Isang mahalagang bahagi ng transparency ay ang pagpapaliwanag sa pag-uugali ng mga sistema ng AI at mga bahagi nito. Ang pagpapahusay sa pag-unawa sa mga sistema ng AI ay nangangailangan na maintindihan ng mga stakeholder kung paano at bakit ito gumagana upang matukoy kung may mga potensyal na isyu sa pagganap, mga alalahanin sa kaligtasan at privacy, mga pagkiling, mga gawi ng pagsasantabi, o hindi inaasahang mga resulta. Naniniwala rin kami na ang mga gumagamit ng mga sistema ng AI ay dapat maging tapat at bukas tungkol sa kung kailan, bakit, at paano nila pinipili gamitin ang mga ito, pati na rin ang mga limitasyon ng mga sistemang ginagamit nila. Halimbawa, kung ang isang bangko ay gumagamit ng isang sistema ng AI upang suportahan ang mga desisyon nito sa pautang sa mga consumer, mahalaga na suriin ang mga resulta at maunawaan kung aling datos ang nakakaimpluwensya sa mga rekomendasyon ng sistema. Nagsisimula nang i-regulate ng mga gobyerno ang AI sa iba't ibang industriya, kaya ang mga data scientist at mga organisasyon ay kailangang ipaliwanag kung ang isang AI na sistema ay sumusunod sa mga regulasyon, lalo na kung may hindi kanais-nais na resulta.
> [🎥 I-click dito para sa video: transparency in AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
> [🎥 Pindutin dito para sa isang video: transparency sa AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
- Dahil ang mga sistema ng AI ay napakakomplikado, mahirap maunawaan kung paano gumagana ang mga ito at ma-interpret ang mga resulta.
- Ang kakulangan ng pag-unawa na ito ay nakakaapekto sa paraan ng pamamahala, pagpapatakbo, at dokumentasyon ng mga sistemang ito.
- Ang kakulangan ng pag-unawa na ito ay mas mahalaga dahil nakakaapekto ito sa mga desisyon na ginawa gamit ang mga resulta na ginawa ng mga sistemang ito.
- Dahil napakakomplekado ng mga sistema ng AI, mahirap maintindihan kung paano sila gumagana at bigyang-kahulugan ang mga resulta.
- Ang kakulangan ng pag-unawa na ito ay nakakaapekto sa paraan ng pamamahala, pagpapatakbo, at pagdodokumento sa mga sistemang ito.
- Ang kakulangan ng pag-unawang ito ay higit na nakakaapekto sa mga desisyong ginawa gamit ang mga resulta na nilalabas ng mga sistemang ito.
### Pananagutan
Ang mga taong nagdidisenyo at nagpapatupad ng mga sistema ng AI ay dapat managot kung paano gumagana ang kanilang mga sistema. Ang pangangailangan para sa pananagutan ay lalong mahalaga sa mga sensitibong teknolohiya tulad ng facial recognition. Kamakailan lamang, lumalaki ang demand para sa facial recognition technology, lalo na mula sa mga organisasyon ng batas na nakikita ang potensyal ng teknolohiya sa mga gamit tulad ng paghahanap sa mga nawawalang bata. Gayunpaman, ang mga teknolohiyang ito ay maaaring gamitin ng isang gobyerno upang ilagay sa panganib ang mga pangunahing kalayaan ng kanilang mga mamamayan sa pamamagitan ng, halimbawa, pagpapa-igting ng tuloy-tuloy na pagmamanman sa mga partikular na indibidwal. Kaya, kailangang maging responsable ang mga data scientist at mga organisasyon sa kung paano nakaaapekto ang kanilang sistema ng AI sa mga indibidwal o lipunan.
[![Pangunahing AI Researcher Nagbabala sa Mass Surveillance sa Pamamagitan ng Facial Recognition](../../../../translated_images/tl/accountability.41d8c0f4b85b6231.webp)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft's Approach to Responsible AI")
Ang mga tao na nagdidisenyo at nag-deploy ng mga sistema ng AI ay dapat managot sa kung paano gumagana ang kanilang mga sistema. Ang pangangailangan para sa pananagutan ay partikular na mahalaga sa mga sensitibong teknolohiya tulad ng facial recognition. Kamakailan, nagkaroon ng lumalaking demand para sa facial recognition technology, lalo na mula sa mga organisasyon ng pagpapatupad ng batas na nakikita ang potensyal ng teknolohiya sa mga gamit tulad ng paghahanap ng mga nawawalang bata. Gayunpaman, ang mga teknolohiyang ito ay maaaring potensyal na gamitin ng isang gobyerno upang ilagay sa panganib ang mga pangunahing kalayaan ng kanilang mga mamamayan, halimbawa, sa pamamagitan ng pagpapagana ng tuloy-tuloy na surveillance ng mga partikular na indibidwal. Kaya, ang mga data scientist at organisasyon ay kailangang maging responsable sa kung paano nakakaapekto ang kanilang sistema ng AI sa mga indibidwal o lipunan.
> 🎥 Pindutin ang larawan sa itaas para sa video: Mga Babala tungkol sa Mass Surveillance sa Pamamagitan ng Facial Recognition
[![Leading AI Researcher Warns of Mass Surveillance Through Facial Recognition](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft's Approach to Responsible AI")
Sa huli, isa sa pinakamalaking tanong para sa ating henerasyon, bilang unang henerasyon na nagdadala ng AI sa lipunan, ay paano matitiyak na mananatiling may pananagutan ang mga computer sa mga tao at paano matitiyak na ang mga tao na nagdidisenyo ng computer ay mananatiling may pananagutan sa lahat ng iba pa.
> 🎥 I-click ang imahe sa itaas para sa video: Warnings of Mass Surveillance Through Facial Recognition
## Pagsusuri ng Epekto
Sa huli, isa sa pinakamalaking tanong para sa ating henerasyon, bilang unang henerasyon na nagdadala ng AI sa lipunan, ay kung paano masisiguro na ang mga computer ay mananatiling accountable sa mga tao at kung paano masisiguro na ang mga tao na nagdidisenyo ng mga computer ay mananatiling accountable sa lahat.
Bago sanayin ang isang machine learning na modelo, mahalaga na magsagawa ng pagsusuri ng epekto upang maunawaan ang layunin ng AI system; kung ano ang inaasahang gamit nito; saan ito ilalagay; at sino ang makikipag-ugnayan sa sistema. Mahalaga ito para sa mga tagasuri o tagasubok na nag-evaluate sa sistema upang malaman kung anu-anong mga salik ang isasaalang-alang sa pagtukoy ng mga potensyal na panganib at inaasahang mga epekto.
## Pagtatasa ng Epekto
Ang mga sumusunod ay mga pokus kapag nagsasagawa ng pagsusuri ng epekto:
Bago sanayin ang isang modelo ng machine learning, mahalagang magsagawa ng impact assessment upang maunawaan ang layunin ng sistema ng AI; kung ano ang nilalayong paggamit nito; kung saan ito ide-deploy; at sino ang makikipag-ugnayan sa sistema. Ang mga ito ay kapaki-pakinabang para sa reviewer(s) o tester na nag-evaluate sa sistema upang malaman kung anong mga salik ang dapat isaalang-alang kapag tinutukoy ang mga potensyal na panganib at inaasahang kahihinatnan.
* **Masamang epekto sa mga indibidwal**. Ang pagiging mulat sa anumang paghihigpit o kinakailangan, di-suportadong paggamit o anumang kilalang limitasyon na nakahahadlang sa pagganap ng sistema ay mahalaga upang matiyak na hindi ginagamit ang sistema sa paraang maaaring makasama sa mga indibidwal.
* **Mga pangangailangan sa datos**. Ang pag-unawa kung paano at saan gagamitin ng sistema ang datos ay nagbibigay-daan sa mga tagasuri na tuklasin ang anumang kinakailangang datos na dapat isaalang-alang (hal., GDPR o HIPAA na mga regulasyon sa datos). Bukod dito, suriin kung sapat ang pinagmulan o dami ng datos para sa pagsasanay.
* **Buod ng epekto**. Magtipon ng listahan ng mga potensyal na pinsala na maaaring lumitaw mula sa paggamit ng sistema. Sa buong lifecycle ng ML, suriin kung ang mga isyung natukoy ay naiiwasan o natutugunan.
* **Nalalapat na mga layunin** para sa bawat isa sa anim na pangunahing prinsipyo. Suriin kung natutupad ang mga layunin mula sa bawat prinsipyo at kung may mga puwang.
Ang mga sumusunod ay mga lugar ng pokus kapag nagsasagawa ng impact assessment:
* **Masamang epekto sa mga indibidwal**. Ang pagiging maalam sa anumang limitasyon o kinakailangan, hindi suportadong paggamit, o anumang kilalang limitasyon na humahadlang sa pagganap ng sistema ay mahalaga upang matiyak na ang sistema ay hindi ginagamit sa paraang maaaring magdulot ng pinsala sa mga indibidwal.
* **Mga kinakailangan sa data**. Ang pag-unawa kung paano at saan gagamitin ng sistema ang data ay nagbibigay-daan sa mga reviewer na tuklasin ang anumang mga kinakailangan sa data na dapat mong tandaan (hal., GDPR o HIPPA data regulations). Bukod dito, suriin kung ang pinagmulan o dami ng data ay sapat para sa pagsasanay.
* **Buod ng epekto**. Magtipon ng listahan ng mga potensyal na pinsala na maaaring lumitaw mula sa paggamit ng sistema. Sa buong lifecycle ng ML, suriin kung ang mga isyung natukoy ay naibsan o natugunan.
* **Mga naaangkop na layunin** para sa bawat isa sa anim na pangunahing prinsipyo. Suriin kung ang mga layunin mula sa bawat prinsipyo ay natutugunan at kung mayroong anumang mga puwang.
## Pag-debug gamit ang responsable na AI
## Pag-debug gamit ang Responsible AI
Katulad ng pag-debug ng isang software application, ang pag-debug ng isang sistema ng AI ay isang kinakailangang proseso ng pagtukoy at paglutas ng mga isyu sa sistema. Maraming salik ang maaaring makaapekto sa isang modelo na hindi gumana ayon sa inaasahan o responsableng paraan. Karamihan sa mga tradisyunal na sukatan ng pagganap ng modelo ay mga quantitavive na buod ng pagganap ng modelo, na hindi sapat upang suriin kung paano nilalabag ng modelo ang mga prinsipyo ng responsable na AI. Bukod dito, ang isang machine learning na modelo ay isang itim na kahon na nagpapahirap na maintindihan kung ano ang nagtutulak ng resulta nito o magbigay ng paliwanag kapag nagkamali ito. Sa kalaunan ng kursong ito, matututuhan natin kung paano gamitin ang Responsible AI dashboard upang makatulong sa pag-debug ng mga sistema ng AI. Ang dashboard ay nagbibigay ng holistikong kasangkapan para sa mga data scientist at AI developer upang magsagawa ng:
Katulad ng pag-debug ng isang software application, ang pag-debug ng isang sistema ng AI ay isang kinakailangang proseso ng pagtukoy at paglutas ng mga isyu sa sistema. Maraming mga salik ang maaaring makaapekto sa isang modelo na hindi gumagana ayon sa inaasahan o responsable. Karamihan sa mga tradisyunal na sukatan ng pagganap ng modelo ay mga dami ng aggregate ng pagganap ng modelo, na hindi sapat upang suriin kung paano nilalabag ng isang modelo ang mga prinsipyo ng Responsible AI. Bukod dito, ang isang modelo ng machine learning ay isang black box na nagpapahirap na maunawaan kung ano ang nagdudulot ng resulta nito o magbigay ng paliwanag kapag nagkamali ito. Sa susunod na bahagi ng kursong ito, matutunan natin kung paano gamitin ang Responsible AI dashboard upang makatulong sa pag-debug ng mga sistema ng AI. Ang dashboard ay nagbibigay ng holistic na tool para sa mga data scientist at AI developer upang magsagawa ng:
* **Pagsusuri ng error**. Upang tukuyin ang pamamahagi ng error ng modelo na maaaring makaapekto sa katarungan o pagiging maaasahan ng sistema.
* **Pangkalahatang-ideya ng modelo**. Upang matuklasan kung saan may mga hindi pagkakapantay-pantay sa pagganap ng modelo sa iba't ibang cohort ng datos.
* **Pagsusuri ng datos**. Upang maunawaan ang pamamahagi ng datos at matukoy ang anumang potensyal na pagkiling sa datos na maaaring magdala sa mga isyu sa katarungan, inklusibidad, at pagiging maaasahan.
* **Paliwanag sa modelo**. Upang maunawaan kung ano ang nakakaapekto o nakakaimpluwensya sa mga prediksyon ng modelo. Nakakatulong ito sa pagpapaliwanag ng pag-uugali ng modelo, na mahalaga para sa transparency at pananagutan.
* **Error analysis**. Upang matukoy ang pamamahagi ng error ng modelo na maaaring makaapekto sa pagiging patas o pagiging maaasahan ng sistema.
* **Model overview**. Upang matuklasan kung saan may mga pagkakaiba sa pagganap ng modelo sa iba't ibang data cohorts.
* **Data analysis**. Upang maunawaan ang pamamahagi ng data at matukoy ang anumang potensyal na bias sa data na maaaring magdulot ng mga isyu sa pagiging patas, inklusibidad, at pagiging maaasahan.
* **Model interpretability**. Upang maunawaan kung ano ang nakakaapekto o nakakaimpluwensya sa mga hula ng modelo. Nakakatulong ito sa pagpapaliwanag ng pag-uugali ng modelo, na mahalaga para sa transparency at pananagutan.
## 🚀 Hamon
Upang maiwasan ang mga pinsala na maipakilala sa unang pagkakataon, dapat tayong:
- magkaroon ng pagkakaiba-iba ng mga pinagmulan at pananaw sa mga taong nagtatrabaho sa mga sistema
- mamuhunan sa mga dataset na sumasalamin sa pagkakaiba-iba ng ating lipunan
- bumuo ng mas mahusay na mga pamamaraan sa buong lifecycle ng machine learning upang tuklasin at itama ang responsable na AI kapag ito ay nangyayari
Isipin ang mga totoong buhay na senaryo kung saan maliwanag ang kawalan ng tiwala sa isang modelo sa paggawa at paggamit ng modelo. Ano pa ang dapat nating isaalang-alang?
## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## Pagrepaso at Sariling Pag-aaral
Upang maiwasan ang mga pinsala na maipakilala sa
Panoorin ang workshop na ito para mas maintindihan ang mga paksa:
Sa araling ito, natutunan mo ang ilang batayan ng mga konsepto ng katarungan at hindi katarungan sa machine learning.
Panoorin ang workshop na ito upang mas malalim na tuklasin ang mga paksa:
- Sa paghahangad ng responsableng AI: Paglalapat ng mga prinsipyo sa praktika nina Besmira Nushi, Mehrnoosh Sameki, at Amit Sharma
- Sa pagsisikap para sa responsableng AI: Pagsasagawa ng mga prinsipyo sa praktika nina Besmira Nushi, Mehrnoosh Sameki at Amit Sharma
[![Responsible AI Toolbox: Isang open-source framework para sa paggawa ng responsableng AI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Isang open-source framework para sa paggawa ng responsableng AI")
[![Responsible AI Toolbox: An open-source framework for building responsible AI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: An open-source framework for building responsible AI")
> 🎥 I-click ang imahe sa itaas para sa video: RAI Toolbox: Isang open-source framework para sa paggawa ng responsableng AI nina Besmira Nushi, Mehrnoosh Sameki, at Amit Sharma
> 🎥 I-click ang larawan sa itaas para sa isang video: RAI Toolbox: Isang open-source na balangkas para sa paggawa ng responsableng AI nina Besmira Nushi, Mehrnoosh Sameki, at Amit Sharma
Basahin din:
Basahin din:
- Resource center ng Microsoft para sa RAI: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- Sentro ng mga mapagkukunan ng RAI ng Microsoft: [Responsible AI Resources Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- FATE research group ng Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
- Pangkat ng pananaliksik ng FATE ng Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
RAI Toolbox:
RAI Toolbox:
- [Responsible AI Toolbox GitHub repository](https://github.com/microsoft/responsible-ai-toolbox)
Basahin ang tungkol sa mga tools ng Azure Machine Learning para masiguro ang pagiging patas:
Basahin tungkol sa mga kasangkapan ng Azure Machine Learning upang matiyak ang katarungan:
- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
## Gawain
## Takdang Aralin
[Galugarin ang RAI Toolbox](assignment.md)
---
**Paunawa**:
Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Pagtatanggi**:
Ang dokumentong ito ay isinalin gamit ang serbisyo ng AI translation na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't nagsusumikap kami para sa katumpakan, pakatandaan na ang awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na pangunahing sanggunian. Para sa mahahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang maling pagkakaintindi o maling interpretasyon na nagmula sa paggamit ng pagsasaling ito.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,120 +1,121 @@
# Magsimula sa Python at Scikit-learn para sa mga regression model
# Magsimula sa Python at Scikit-learn para sa mga modelo ng regression
![Buod ng mga regression sa isang sketchnote](../../../../sketchnotes/ml-regression.png)
![Buod ng mga regression sa isang sketchnote](../../../../translated_images/tl/ml-regression.4e4f70e3b3ed446e.webp)
> Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
> ### [Ang araling ito ay available sa R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
> ### [Available ang leksyong ito sa R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
## Panimula
## Introduksyon
Sa apat na araling ito, matutuklasan mo kung paano bumuo ng mga regression model. Tatalakayin natin kung para saan ang mga ito sa madaling panahon. Ngunit bago ka magsimula, tiyakin na mayroon kang tamang mga tool upang simulan ang proseso!
Sa apat na araling ito, matutuklasan mo kung paano bumuo ng mga regression model. Tatalakayin natin kung para saan ang mga ito pagkatapos. Ngunit bago ka gumawa ng anumang bagay, siguraduhing meron kang tamang mga kagamitan upang simulan ang proseso!
Sa araling ito, matututunan mo kung paano:
Sa araling ito, matututuhan mo kung paano:
- I-configure ang iyong computer para sa mga lokal na machine learning na gawain.
- Gumamit ng Jupyter notebooks.
- I-configure ang iyong computer para sa mga lokal na gawain sa machine learning.
- Gumamit ng Jupyter Notebooks.
- Gumamit ng Scikit-learn, kabilang ang pag-install.
- Tuklasin ang linear regression sa pamamagitan ng isang praktikal na ehersisyo.
- Suriin ang linear regression sa isang praktikal na pagsasanay.
## Mga Pag-install at Konfigurasyon
## Mga pag-install at konfigurasyon
[![ML para sa mga nagsisimula - I-set up ang iyong mga tool para sa pagbuo ng Machine Learning models](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML para sa mga nagsisimula - I-set up ang iyong mga tool para sa pagbuo ng Machine Learning models")
[![ML para sa mga baguhan - I-set up ang iyong mga kagamitan para makapagsimula sa pagbuo ng Machine Learning models](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML para sa mga baguhan - I-set up ang iyong mga kagamitan para makapagsimula sa pagbuo ng Machine Learning models")
> 🎥 I-click ang imahe sa itaas para sa isang maikling video tungkol sa pag-configure ng iyong computer para sa ML.
> 🎥 Pindutin ang larawan sa itaas para sa maikling video tungkol sa pag-configure ng iyong computer para sa ML.
1. **I-install ang Python**. Tiyakin na ang [Python](https://www.python.org/downloads/) ay naka-install sa iyong computer. Gagamitin mo ang Python para sa maraming data science at machine learning na gawain. Karamihan sa mga computer system ay mayroon nang naka-install na Python. Mayroon ding mga kapaki-pakinabang na [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) na magpapadali sa setup para sa ilang user.
1. **I-install ang Python**. Siguraduhing naka-install ang [Python](https://www.python.org/downloads/) sa iyong computer. Gagamitin mo ang Python para sa maraming gawain sa data science at machine learning. Karamihan sa mga sistema ng computer ay may nakalaang pag-install ng Python. Meron ding mga kapaki-pakinabang na [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) na makakatulong para mas madali ang setup para sa ilan.
Gayunpaman, ang ilang paggamit ng Python ay nangangailangan ng isang partikular na bersyon ng software, habang ang iba ay nangangailangan ng ibang bersyon. Dahil dito, kapaki-pakinabang na gumamit ng [virtual environment](https://docs.python.org/3/library/venv.html).
Gayunpaman, may ilang gamit ng Python na nangangailangan ng isang bersyon ng software, habang ang iba naman ay ibang bersyon. Dahil dito, kapaki-pakinabang ang gumamit ng [virtual environment](https://docs.python.org/3/library/venv.html).
2. **I-install ang Visual Studio Code**. Tiyakin na mayroon kang Visual Studio Code na naka-install sa iyong computer. Sundin ang mga tagubilin upang [i-install ang Visual Studio Code](https://code.visualstudio.com/) para sa pangunahing pag-install. Gagamitin mo ang Python sa Visual Studio Code sa kursong ito, kaya maaaring gusto mong mag-review kung paano [i-configure ang Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para sa Python development.
2. **I-install ang Visual Studio Code**. Siguraduhing naka-install ang Visual Studio Code sa iyong computer. Sundin ang mga tagubiling ito para sa [pag-install ng Visual Studio Code](https://code.visualstudio.com/) para sa pangunahing pag-install. Gagamitin mo ang Python sa Visual Studio Code sa kursong ito, kaya maaaring gusto mong aralin kung paano [i-configure ang Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para sa pag-develop ng Python.
> Maging komportable sa Python sa pamamagitan ng pagdaan sa koleksyong ito ng [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
> Masanay sa Python sa pamamagitan ng pagdaan sa koleksyon ng mga [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
>
> [![I-set up ang Python gamit ang Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "I-set up ang Python gamit ang Visual Studio Code")
> [![I-setup ang Python gamit ang Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "I-setup ang Python gamit ang Visual Studio Code")
>
> 🎥 I-click ang imahe sa itaas para sa isang video: paggamit ng Python sa loob ng VS Code.
> 🎥 Pindutin ang larawan sa itaas para sa video: paggamit ng Python sa loob ng VS Code.
3. **I-install ang Scikit-learn**, sa pamamagitan ng pagsunod sa [mga tagubilin na ito](https://scikit-learn.org/stable/install.html). Dahil kailangan mong tiyakin na gumagamit ka ng Python 3, inirerekomenda na gumamit ka ng virtual environment. Tandaan, kung ini-install mo ang library na ito sa isang M1 Mac, may mga espesyal na tagubilin sa pahinang naka-link sa itaas.
3. **I-install ang Scikit-learn**, sundin ang [mga tagubilin na ito](https://scikit-learn.org/stable/install.html). Dahil kailangan mong tiyakin na gagamit ka ng Python 3, inirerekomenda na gumamit ka ng virtual environment. Tandaan, kung ini-install mo ang library na ito sa M1 Mac, may espesyal na mga tagubilin sa pahinang naka-link sa itaas.
4. **I-install ang Jupyter Notebook**. Kailangan mong [i-install ang Jupyter package](https://pypi.org/project/jupyter/).
1. **I-install ang Jupyter Notebook**. Kakailanganin mong [i-install ang Jupyter package](https://pypi.org/project/jupyter/).
## Ang Iyong ML Authoring Environment
## Ang iyong ML authoring environment
Gagamit ka ng **notebooks** upang bumuo ng iyong Python code at lumikha ng mga machine learning model. Ang ganitong uri ng file ay karaniwang tool para sa mga data scientist, at makikilala sila sa pamamagitan ng kanilang suffix o extension `.ipynb`.
Gagamit ka ng **notebooks** para i-develop ang iyong Python code at gumawa ng mga machine learning model. Ang ganitong uri ng file ay isang karaniwang kagamitan para sa mga data scientist, at makikilala ito sa kanilang suffix o extension na `.ipynb`.
Ang notebooks ay isang interactive na environment na nagbibigay-daan sa developer na parehong mag-code at magdagdag ng mga tala at magsulat ng dokumentasyon sa paligid ng code, na kapaki-pakinabang para sa mga experimental o research-oriented na proyekto.
Ang mga notebook ay isang interactive na kapaligiran na nagpapahintulot sa developer na parehong mag-code at magdagdag ng mga tala at magsulat ng dokumentasyon sa paligid ng code na napaka-kapaki-pakinabang para sa mga eksperimento o research-oriented na proyekto.
[![ML para sa mga nagsisimula - I-set up ang Jupyter Notebooks upang simulan ang pagbuo ng regression models](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML para sa mga nagsisimula - I-set up ang Jupyter Notebooks upang simulan ang pagbuo ng regression models")
[![ML para sa mga baguhan - I-setup ang Jupyter Notebooks upang makapagsimula sa paggawa ng mga regression models](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML para sa mga baguhan - I-setup ang Jupyter Notebooks upang makapagsimula sa paggawa ng mga regression models")
> 🎥 I-click ang imahe sa itaas para sa isang maikling video tungkol sa ehersisyong ito.
> 🎥 Pindutin ang larawan sa itaas para sa maikling video na nagtuturo sa pagsasanay na ito.
### Ehersisyo - Gumamit ng Notebook
### Pagsasanay - gumamit ng notebook
Sa folder na ito, makikita mo ang file na _notebook.ipynb_.
1. Buksan ang _notebook.ipynb_ sa Visual Studio Code.
Magsisimula ang isang Jupyter server gamit ang Python 3+. Makikita mo ang mga bahagi ng notebook na maaaring `run`, mga piraso ng code. Maaari mong patakbuhin ang isang code block sa pamamagitan ng pagpili sa icon na mukhang play button.
Mag-uumpisa ang Jupyter server na may Python 3+ na naka-start. Makikita mo ang mga bahagi ng notebook na maaaring `run`, mga piraso ng code. Maaari mong patakbuhin ang isang code block sa pamamagitan ng pagpili ng icon na mukhang play button.
2. Piliin ang `md` icon at magdagdag ng kaunting markdown, at ang sumusunod na teksto **# Welcome to your notebook**.
1. Piliin ang `md` icon at magdagdag ng ilang markdown, at ang sumusunod na teksto **# Welcome to your notebook**.
Susunod, magdagdag ng ilang Python code.
Pagkatapos, magdagdag ng ilang Python code.
3. I-type ang **print('hello notebook')** sa code block.
4. Piliin ang arrow upang patakbuhin ang code.
1. I-type ang **print('hello notebook')** sa code block.
1. Piliin ang arrow para patakbuhin ang code.
Makikita mo ang naka-print na pahayag:
Dapat mong makita ang naka-print na pahayag:
```output
hello notebook
```
![VS Code na may notebook na bukas](../../../../2-Regression/1-Tools/images/notebook.jpg)
![VS Code na may bukas na notebook](../../../../translated_images/tl/notebook.4a3ee31f396b8832.webp)
Maaari mong pagsamahin ang iyong code sa mga komento upang i-self-document ang notebook.
Maaari mong salin-salin ang iyong code sa mga komentaryo para sa sarili mong dokumentasyon ng notebook.
Mag-isip ng sandali kung gaano kaiba ang working environment ng isang web developer kumpara sa isang data scientist.
Isipin ng sandali kung gaano kaiba ang working environment ng isang web developer kumpara sa isang data scientist.
## Pagsisimula sa Scikit-learn
## Naka-set up na gamit ang Scikit-learn
Ngayon na ang Python ay naka-set up sa iyong lokal na environment, at komportable ka sa Jupyter notebooks, magpakomportable din tayo sa Scikit-learn (binibigkas na `sci` tulad ng `science`). Ang Scikit-learn ay nagbibigay ng [malawak na API](https://scikit-learn.org/stable/modules/classes.html#api-ref) upang tulungan kang magsagawa ng mga ML na gawain.
Ngayon na naka-setup na ang Python sa iyong lokal na kapaligiran, at komportable ka na sa Jupyter Notebooks, maging komportable na rin tayo sa Scikit-learn (bigkasin itong `sci` tulad ng sa `science`). Nagbibigay ang Scikit-learn ng [malawak na API](https://scikit-learn.org/stable/modules/classes.html#api-ref) para tulungan kang magsagawa ng mga gawain sa ML.
Ayon sa kanilang [website](https://scikit-learn.org/stable/getting_started.html), "Ang Scikit-learn ay isang open source machine learning library na sumusuporta sa supervised at unsupervised learning. Nagbibigay din ito ng iba't ibang tool para sa model fitting, data preprocessing, model selection at evaluation, at marami pang ibang utilities."
Ayon sa kanilang [website](https://scikit-learn.org/stable/getting_started.html), "Ang Scikit-learn ay isang open source na machine learning library na sumusuporta sa supervised at unsupervised learning. Nagbibigay din ito ng ibat ibang mga kasangkapan para sa model fitting, data preprocessing, model selection at evaluation, at marami pang iba."
Sa kursong ito, gagamitin mo ang Scikit-learn at iba pang mga tool upang bumuo ng mga machine learning model para magsagawa ng tinatawag nating 'traditional machine learning' tasks. Sadyang iniwasan namin ang neural networks at deep learning, dahil mas mahusay itong saklawin sa aming paparating na 'AI for Beginners' curriculum.
Sa kursong ito, gagamitin mo ang Scikit-learn at iba pang mga tool upang bumuo ng machine learning models para maisagawa ang tinatawag nating 'traditional machine learning' na mga gawain. Sadyang kinaiwasan namin ang neural networks at deep learning, dahil mas mahusay itong tinatalakay sa paparating na 'AI for Beginners' na kurikulum namin.
Ginagawang simple ng Scikit-learn ang pagbuo ng mga model at ang pagsusuri sa mga ito para magamit. Pangunahing nakatuon ito sa paggamit ng numeric data at naglalaman ng ilang ready-made datasets para magamit bilang mga learning tool. Kasama rin dito ang mga pre-built model na maaaring subukan ng mga estudyante. Tuklasin natin ang proseso ng pag-load ng prepackaged data at paggamit ng built-in estimator para sa unang ML model gamit ang Scikit-learn gamit ang ilang basic na data.
Pinapadali ng Scikit-learn ang pagbuo ng mga modelo at kanilang pagsusuri para magamit. Nakatuon ito lalo na sa paggamit ng numeric na data at naglalaman ng ilang mga handang-gamitin na datasets bilang mga tool sa pag-aaral. Mayroon din itong mga pre-built na modelo na pwedeng subukan ng mga estudyante. Tuklasin muna natin ang proseso ng paglo-load ng prepackaged data at paggamit ng isang built-in estimator bilang unang ML model gamit ang Scikit-learn na may simpleng data.
## Ehersisyo - Ang Iyong Unang Scikit-learn Notebook
## Pagsasanay - ang iyong unang Scikit-learn notebook
> Ang tutorial na ito ay inspirasyon ng [linear regression example](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) sa website ng Scikit-learn.
> Ang tutorial na ito ay hango sa [linear regression example](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) sa website ng Scikit-learn.
[![ML para sa mga nagsisimula - Ang Iyong Unang Linear Regression Project sa Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML para sa mga nagsisimula - Ang Iyong Unang Linear Regression Project sa Python")
> 🎥 I-click ang imahe sa itaas para sa isang maikling video tungkol sa ehersisyong ito.
[![ML para sa mga baguhan - Ang iyong Unang Linear Regression Project sa Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML para sa mga baguhan - Ang iyong Unang Linear Regression Project sa Python")
Sa file na _notebook.ipynb_ na nauugnay sa araling ito, i-clear ang lahat ng mga cell sa pamamagitan ng pagpindot sa 'trash can' icon.
> 🎥 Pindutin ang larawan sa itaas para sa maikling video na nagtuturo sa pagsasanay na ito.
Sa seksyong ito, gagamit ka ng isang maliit na dataset tungkol sa diabetes na built-in sa Scikit-learn para sa mga layunin ng pag-aaral. Isipin na gusto mong subukan ang isang paggamot para sa mga pasyenteng may diabetes. Ang mga Machine Learning model ay maaaring makatulong sa iyo na matukoy kung aling mga pasyente ang mas mahusay na tutugon sa paggamot, batay sa mga kumbinasyon ng mga variable. Kahit na isang napaka-basic na regression model, kapag na-visualize, ay maaaring magpakita ng impormasyon tungkol sa mga variable na makakatulong sa iyo na ayusin ang iyong mga teoretikal na clinical trials.
Sa _notebook.ipynb_ na file na kaugnay ng araling ito, tanggalin ang lahat ng mga selula sa pamamagitan ng pagpindot sa icon na 'trash can'.
✅ Maraming uri ng regression methods, at kung alin ang pipiliin mo ay nakadepende sa sagot na hinahanap mo. Kung gusto mong hulaan ang posibleng taas ng isang tao batay sa edad, gagamit ka ng linear regression, dahil naghahanap ka ng **numeric value**. Kung interesado kang tuklasin kung ang isang uri ng pagkain ay dapat ituring na vegan o hindi, naghahanap ka ng **category assignment** kaya gagamit ka ng logistic regression. Matututo ka pa tungkol sa logistic regression sa susunod. Mag-isip ng kaunti tungkol sa ilang tanong na maaari mong itanong sa data, at kung alin sa mga pamamaraang ito ang mas angkop.
Sa seksyong ito, magtatrabaho ka gamit ang maliit na dataset tungkol sa diabetes na naka-built in sa Scikit-learn para sa layuning pampag-aaral. Isipin na gusto mong subukan ang isang paggamot para sa mga diabetic na pasyente. Makakatulong ang mga machine learning model upang tukuyin kung alin sa mga pasyente ang mas mahusay na tumugon sa paggamot, batay sa kombinasyon ng mga variable. Kahit ang isang napakasimpleng regression model, kapag na-visualize, ay maaaring magpakita ng impormasyon tungkol sa mga variable na makakatulong sa iyo na ayusin ang iyong mga teoretikal na clinical trials.
Simulan na natin ang gawain.
✅ Maraming uri ng mga pamamaraan ng regression, at nakadepende kung alin ang pipiliin mo sa sagot na hinahanap mo. Kung nais mong tukuyin ang malamang na taas para sa isang tao ng isang partikular na edad, gagamit ka ng linear regression, dahil naghahanap ka ng **numeric value**. Kung interesado kang malaman kung ang isang uri ng lutuin ay dapat ituring na vegan o hindi, naghahanap ka ng **category assignment** kaya gagamit ka ng logistic regression. Matututuhan mo pa ang tungkol sa logistic regression sa susunod. Isipin ng kaunti ang ilang mga tanong na maaari mong itanong sa data, at alin sa mga pamamaraang ito ang mas angkop.
### I-import ang mga Library
Tara, simulan na natin ang gawain na ito.
Para sa gawain na ito, mag-i-import tayo ng ilang library:
### Import ng mga library
- **matplotlib**. Isang kapaki-pakinabang na [tool para sa graphing](https://matplotlib.org/) at gagamitin natin ito upang lumikha ng line plot.
Para sa gawaing ito, mag-import tayo ng ilang mga library:
- **matplotlib**. Isang kapaki-pakinabang na [graphing tool](https://matplotlib.org/) at gagamitin natin ito upang gumawa ng line plot.
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) ay isang kapaki-pakinabang na library para sa paghawak ng numeric data sa Python.
- **sklearn**. Ito ang [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) library.
Mag-import ng ilang library upang makatulong sa iyong mga gawain.
Mag-import ng ilang mga library upang makatulong sa iyong mga gawain.
1. Magdagdag ng imports sa pamamagitan ng pag-type ng sumusunod na code:
1. Magdagdag ng mga import sa pamamagitan ng pag-type ng sumusunod na code:
```python
import matplotlib.pyplot as plt
@ -122,26 +123,26 @@ Mag-import ng ilang library upang makatulong sa iyong mga gawain.
from sklearn import datasets, linear_model, model_selection
```
Sa itaas, nag-i-import ka ng `matplotlib`, `numpy` at nag-i-import ka ng `datasets`, `linear_model` at `model_selection` mula sa `sklearn`. Ang `model_selection` ay ginagamit para sa paghahati ng data sa training at test sets.
Sa itaas, ini-import mo ang `matplotlib`, `numpy` at ini-import mo ang `datasets`, `linear_model` at `model_selection` mula sa `sklearn`. Ginagamit ang `model_selection` para hatiin ang data sa training at test sets.
### Ang Diabetes Dataset
### Ang diabetes dataset
Ang built-in na [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) ay naglalaman ng 442 na sample ng data tungkol sa diabetes, na may 10 feature variables, ilan sa mga ito ay:
Ang naka-built in na [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) ay may 442 halimbawa ng data tungkol sa diabetes, na may 10 feature variables, ilan sa mga ito ay kinabibilangan ng:
- age: edad sa taon
- bmi: body mass index
- bp: average blood pressure
- s1 tc: T-Cells (isang uri ng white blood cells)
- s1 tc: T-Cells (isang uri ng puting selula ng dugo)
Ang dataset na ito ay naglalaman ng konsepto ng 'sex' bilang isang feature variable na mahalaga sa pananaliksik tungkol sa diabetes. Maraming medical datasets ang naglalaman ng ganitong uri ng binary classification. Mag-isip ng kaunti tungkol sa kung paano maaaring maalis ng mga ganitong klasipikasyon ang ilang bahagi ng populasyon mula sa mga paggamot.
Kasama sa dataset na ito ang konsepto ng 'sex' bilang isang feature variable na mahalaga sa pananaliksik tungkol sa diabetes. Maraming mga medikal na dataset ang may ganitong binary classification. Isipin ng kaunti kung paano maaaring mapag-iiwanan ang ilang bahagi ng populasyon sa mga paggamot dahil sa ganitong mga kategorizasyon.
Ngayon, i-load ang X at y data.
Ngayon, i-load ang X at y na data.
> 🎓 Tandaan, ito ay supervised learning, at kailangan natin ng pinangalanang 'y' target.
> 🎓 Tandaan, ito ay supervised learning, kaya kailangan natin ang isang tinatawag na 'y' target.
Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawag sa `load_diabetes()`. Ang input na `return_X_y=True` ay nagpapahiwatig na ang `X` ay magiging isang data matrix, at ang `y` ay magiging regression target.
Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawag sa `load_diabetes()`. Ang input na `return_X_y=True` ay nagsasaad na ang `X` ay magiging data matrix, at ang `y` ang regression target.
1. Magdagdag ng ilang print commands upang ipakita ang hugis ng data matrix at ang unang elemento nito:
1. Magdagdag ng mga print command upang ipakita ang hugis ng data matrix at ang unang elemento nito:
```python
X, y = datasets.load_diabetes(return_X_y=True)
@ -149,9 +150,9 @@ Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawa
print(X[0])
```
Ang nakukuha mo bilang tugon ay isang tuple. Ang ginagawa mo ay i-assign ang dalawang unang halaga ng tuple sa `X` at `y` ayon sa pagkakabanggit. Matuto pa [tungkol sa tuples](https://wikipedia.org/wiki/Tuple).
Ang babalik sa iyo bilang tugon ay isang tuple. Ang ginagawa mo ay itinatakda ang unang dalawang halaga ng tuple bilang `X` at `y` ayon sa pagkakasunod.
Makikita mo na ang data na ito ay may 442 na item na nakaayos sa arrays ng 10 elemento:
Makikita mo na ang data ay may 442 items na hugis mga array na may 10 elemento:
```text
(442, 10)
@ -159,39 +160,39 @@ Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawa
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
Mag-isip ng kaunti tungkol sa relasyon sa pagitan ng data at ng regression target. Ang linear regression ay nagpo-predict ng mga relasyon sa pagitan ng feature X at target variable y. Mahahanap mo ba ang [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para sa diabetes dataset sa dokumentasyon? Ano ang ipinapakita ng dataset na ito, batay sa target?
Isipin ng kaunti ang relasyon sa pagitan ng data at ng regression target. Nagtataya ang linear regression ng mga relasyon sa pagitan ng feature X at target variable y. Makikita mo ba ang [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para sa diabetes dataset sa dokumentasyon? Ano ang ipinapakita ng dataset na ito, batay sa target na iyon?
2. Susunod, pumili ng bahagi ng dataset na ito upang i-plot sa pamamagitan ng pagpili sa ika-3 column ng dataset. Magagawa mo ito sa pamamagitan ng paggamit ng `:` operator upang piliin ang lahat ng rows, at pagkatapos ay piliin ang ika-3 column gamit ang index (2). Maaari mo ring i-reshape ang data upang maging isang 2D array - na kinakailangan para sa pag-plot - sa pamamagitan ng paggamit ng `reshape(n_rows, n_columns)`. Kung ang isa sa mga parameter ay -1, ang kaukulang dimensyon ay awtomatikong kinakalkula.
2. Sunod, piliin ang bahagi ng dataset na ito na ipaplot sa pamamagitan ng pagpili sa 3rd na kolum ng dataset. Magagawa ito gamit ang operator na `:` para piliin ang lahat ng hanay, at pagkatapos ay piliin ang 3rd na kolum gamit ang index (2). Maaari mo ring baguhin ang hugis ng data para maging 2D array - na kailangan sa pag-plot - gamit ang `reshape(n_rows, n_columns)`. Kapag ang isa sa mga parameter ay -1, awtomatikong kinakalkula ang dimensiyong iyon.
```python
X = X[:, 2]
X = X.reshape((-1,1))
```
✅ Sa anumang oras, i-print ang data upang suriin ang hugis nito.
✅ Sa anumang oras, i-print ang data upang macheck ang hugis nito.
3. Ngayon na mayroon kang data na handa nang i-plot, maaari mong tingnan kung makakatulong ang isang machine upang matukoy ang lohikal na paghahati sa pagitan ng mga numero sa dataset na ito. Upang gawin ito, kailangan mong hatiin ang parehong data (X) at ang target (y) sa test at training sets. Ang Scikit-learn ay may simpleng paraan upang gawin ito; maaari mong hatiin ang iyong test data sa isang ibinigay na punto.
3. Ngayon na may handang data na ipaplot, tingnan natin kung makakatulong ang makina sa pagtukoy ng lohikal na paghahati sa mga numero sa dataset na ito. Para gawin ito, kailangan mong hatiin ang data (X) at ang target (y) sa test at training sets. May directang paraan ang Scikit-learn para gawin ito; maaari mong hatiin ang iyong test data sa isang tiyak na punto.
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. Ngayon handa ka nang i-train ang iyong model! I-load ang linear regression model at i-train ito gamit ang iyong X at y training sets gamit ang `model.fit()`:
4. Ngayon ay handa ka nang sanayin ang iyong modelo! I-load ang linear regression na modelo at sanayin ito gamit ang X at y training sets gamit ang `model.fit()`:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
✅ Ang `model.fit()` ay isang function na makikita mo sa maraming ML libraries tulad ng TensorFlow.
✅ Ang `model.fit()` ay isang function na makikita mo sa maraming ML libraries tulad ng TensorFlow
5. Pagkatapos, lumikha ng prediction gamit ang test data, gamit ang function na `predict()`. Ito ay gagamitin upang gumuhit ng linya sa pagitan ng mga grupo ng data.
5. Pagkatapos, gumawa ng prediction gamit ang test data, gamit ang function na `predict()`. Gagamitin ito para iguhit ang linya sa pagitan ng mga grupo ng data
```python
y_pred = model.predict(X_test)
```
6. Ngayon ay oras na upang ipakita ang data sa isang plot. Ang Matplotlib ay isang napaka-kapaki-pakinabang na tool para sa gawaing ito. Gumawa ng scatterplot ng lahat ng X at y test data, at gamitin ang prediction upang gumuhit ng linya sa pinaka-angkop na lugar, sa pagitan ng mga grupo ng data ng model.
6. Ngayon ay oras na para ipakita ang data sa isang plot. Ang Matplotlib ay isang napaka-kapaki-pakinabang na kasangkapan para sa gawaing ito. Gumawa ng scatterplot ng lahat ng X at y test data, at gamitin ang prediction para gumuhit ng linya sa pinaka-angkop na lugar, sa pagitan ng mga grupo ng data ng modelo.
```python
plt.scatter(X_test, y_test, color='black')
@ -202,29 +203,32 @@ Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawa
plt.show()
```
![isang scatterplot na nagpapakita ng mga datapoint tungkol sa diabetes](../../../../2-Regression/1-Tools/images/scatterplot.png)
✅ Pag-isipan mo nang mabuti kung ano ang nangyayari dito. Isang tuwid na linya ang dumadaan sa maraming maliliit na tuldok ng datos, pero ano nga ba ang ginagawa nito? Nakikita mo ba kung paano mo magagamit ang linyang ito upang mahulaan kung saan dapat ilagay ang isang bagong, hindi pa nakikitang punto ng datos kaugnay sa y axis ng plot? Subukang ilarawan sa mga salita ang praktikal na gamit ng modelong ito.
![isang scatterplot na nagpapakita ng mga datapoint tungkol sa diabetes](../../../../translated_images/tl/scatterplot.ad8b356bcbb33be6.webp)
Binabati kita, nakagawa ka ng iyong unang linear regression model, nakalikha ng prediksyon gamit ito, at naipakita ito sa isang plot!
---
## 🚀Hamunin
✅ Mag-isip ng kaunti tungkol sa nangyayari dito. Isang tuwid na linya ang dumaraan sa maraming maliliit na tuldok ng data, pero ano ba talaga ang ginagawa nito? Nakikita mo ba kung paano mo dapat magagamit ang linyang ito para mahulaan kung saan dapat magkasya ang isang bagong, hindi pa nakikitang punto ng data kaugnay sa y axis ng plot? Subukang ilahad sa mga salita ang praktikal na gamit ng modelong ito.
I-plot ang ibang variable mula sa dataset na ito. Pahiwatig: i-edit ang linyang ito: `X = X[:,2]`. Batay sa target ng dataset na ito, ano ang kaya mong matuklasan tungkol sa pag-usad ng diabetes bilang isang sakit?
Congratulations, nakabuo ka ng iyong unang linear regression model, gumawa ng prediction gamit ito, at naipakita ito sa isang plot!
---
## 🚀Challenge
I-plot ang isang ibang variable mula sa dataset na ito. Pahiwatig: i-edit ang linyang ito: `X = X[:,2]`. Sa target ng dataset na ito, ano ang iyong matutuklasan tungkol sa pag-usad ng diabetes bilang isang sakit?
## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## Review & Pag-aaral sa Sarili
## Review & Self Study
Sa tutorial na ito, gumamit ka ng simpleng linear regression, sa halip na univariate o multiple linear regression. Magbasa nang kaunti tungkol sa mga pagkakaiba ng mga pamamaraang ito, o panoorin ang [video na ito](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef).
Sa tutorial na ito, gumamit ka ng simple linear regression, sa halip na univariate o multiple linear regression. Basahin nang kaunti tungkol sa pagkakaiba ng mga metodong ito, o tingnan ang [video na ito](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)
Magbasa pa tungkol sa konsepto ng regression at pag-isipan kung anong mga uri ng tanong ang maaaring masagot gamit ang teknik na ito. Kunin ang [tutorial na ito](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) upang palalimin ang iyong kaalaman.
Magbasa pa tungkol sa konsepto ng regression at pag-isipan kung anong mga uri ng tanong ang maaaring masagot gamit ang teknik na ito. Gawin ang [tutorial na ito](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) upang palalimin ang iyong pag-unawa.
## Takdang Aralin
## Assignment
[A different dataset](assignment.md)
[Isang ibang dataset](assignment.md)
---
**Paunawa**:
Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Pagtatanggi**:
Ang dokumentong ito ay isinalin gamit ang serbisyo ng AI translation na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't nagsusumikap kami para sa katumpakan, pakatandaan na ang awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na pangunahing sanggunian. Para sa mahahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang maling pagkakaintindi o maling interpretasyon na nagmula sa paggamit ng pagsasaling ito.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,62 +1,62 @@
# Bumuo ng regression model gamit ang Scikit-learn: ihanda at i-visualize ang data
# Gumawa ng regression model gamit ang Scikit-learn: ihanda at ipakita ang data
![Infographic ng data visualization](../../../../2-Regression/2-Data/images/data-visualization.png)
![Infographic ng pag-visualize ng data](../../../../translated_images/tl/data-visualization.54e56dded7c1a804.webp)
Infographic ni [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
> ### [Ang araling ito ay available sa R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
> ### [Available ang leksyong ito sa R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
## Panimula
Ngayon na mayroon ka nang mga tool na kailangan upang simulan ang pagbuo ng machine learning model gamit ang Scikit-learn, handa ka nang magsimulang magtanong tungkol sa iyong data. Habang nagtatrabaho ka sa data at nag-aaplay ng mga solusyon sa ML, napakahalaga na maunawaan kung paano magtanong ng tamang tanong upang ma-unlock nang maayos ang potensyal ng iyong dataset.
Ngayon na naka-setup ka na gamit ang mga kailangang tools para simulan ang paggawa ng machine learning model gamit ang Scikit-learn, handa ka nang magtanong tungkol sa iyong data. Habang nagtatrabaho ka sa data at nag-aapply ng ML solutions, napakahalaga na maintindihan kung paano magtanong nang tama upang ma-unlock ng maayos ang potensyal ng iyong dataset.
Sa araling ito, matututunan mo:
Sa leksyong ito, matututuhan mo ang:
- Paano ihanda ang iyong data para sa pagbuo ng modelo.
- Paano gamitin ang Matplotlib para sa data visualization.
- Paano ihanda ang iyong data para sa paggawa ng modelo.
- Paano gamitin ang Matplotlib para sa pag-visualize ng data.
- Paano gamitin ang Seaborn para sa mas masining na pag-visualize ng data.
## Pagtatanong ng tamang tanong sa iyong data
Ang tanong na kailangan mong sagutin ang magtatakda kung anong uri ng ML algorithms ang iyong gagamitin. At ang kalidad ng sagot na makukuha mo ay lubos na nakadepende sa kalikasan ng iyong data.
Ang tanong na kailangang masagot ay magtatakda kung anong klase ng ML algorithms ang gagamitin mo. At ang kalidad ng sagot na matatanggap mo ay lubhang naka-depende sa kalikasan ng iyong data.
Tingnan ang [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na ibinigay para sa araling ito. Maaari mong buksan ang .csv file na ito sa VS Code. Sa mabilisang pagtingin, makikita agad na may mga blangko at halo ng mga string at numeric na data. Mayroon ding kakaibang column na tinatawag na 'Package' kung saan ang data ay halo ng 'sacks', 'bins' at iba pang mga halaga. Sa katunayan, medyo magulo ang data.
Tingnan ang [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na ibinigay para sa leksyong ito. Maaari mong buksan ang .csv file na ito sa VS Code. Sa mabilis na pagtingin, makikita mong may mga blanks at halo ng string at numeric na data. Mayroon ding kakaibang column na tinatawag na 'Package' kung saan ang data ay halo ng 'sacks', 'bins' at iba pang mga halaga. Ang data, sa katunayan, ay medyo magulo.
[![ML para sa mga nagsisimula - Paano Suriin at Linisin ang Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML para sa mga nagsisimula - Paano Suriin at Linisin ang Dataset")
[![ML para sa mga nagsisimula - Paano Mag-Analyze at Mag-Clean ng Dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML para sa mga nagsisimula - Paano Mag-Analyze at Mag-Clean ng Dataset")
> 🎥 I-click ang imahe sa itaas para sa maikling video na nagpapakita kung paano ihanda ang data para sa araling ito.
> 🎥 I-click ang larawan sa itaas para sa isang maikling video na nagpapakita ng paghahanda ng data para sa leksyong ito.
Sa katunayan, hindi karaniwan na makakuha ng dataset na ganap na handa para gamitin sa paglikha ng ML model. Sa araling ito, matututunan mo kung paano ihanda ang raw dataset gamit ang mga karaniwang Python libraries. Matututunan mo rin ang iba't ibang teknik sa pag-visualize ng data.
Sa katunayan, hindi karaniwan na agad mong makuha ang dataset na handa nang gamitin para gumawa ng ML model. Sa leksyong ito, matututuhan mo kung paano maghanda ng raw dataset gamit ang mga standard Python libraries. Matututuhan mo rin ang iba't ibang teknik para i-visualize ang data.
## Case study: 'ang merkado ng kalabasa'
## Case study: 'ang pamilihan ng kalabasa'
Sa folder na ito, makakakita ka ng .csv file sa root `data` folder na tinatawag na [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na naglalaman ng 1757 linya ng data tungkol sa merkado ng kalabasa, na nakaayos ayon sa lungsod. Ito ay raw data na kinuha mula sa [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) na ipinamamahagi ng United States Department of Agriculture.
Sa folder na ito makikita mo ang isang .csv file sa root `data` folder na tinatawag na [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na may 1757 na linya ng data tungkol sa pamilihan ng kalabasa, na nakaayos sa mga pangkat ayon sa lungsod. Ito ay raw data na kinuha mula sa [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) na ipinamamahagi ng United States Department of Agriculture.
### Paghahanda ng data
Ang data na ito ay nasa public domain. Maaari itong i-download sa maraming magkakahiwalay na file, bawat lungsod, mula sa website ng USDA. Upang maiwasan ang masyadong maraming magkakahiwalay na file, pinagsama-sama namin ang lahat ng data ng lungsod sa isang spreadsheet, kaya't medyo _naihanda_ na namin ang data. Susunod, tingnan natin nang mas malapit ang data.
Ang data na ito ay nasa public domain. Maaari itong i-download sa maraming hiwalay na files, bawat lungsod, mula sa website ng USDA. Upang maiwasan ang sobrang dami ng hiwalay na files, pinag-isa namin ang lahat ng data ng lungsod sa isang spreadsheet, kaya medyo _naihanda_ na ang data. Susunod, tingnan natin nang mabuti ang data.
### Ang data ng kalabasa - mga maagang konklusyon
### Ang data ng kalabasa - mga unang konklusyon
Ano ang napapansin mo tungkol sa data na ito? Nakita mo na may halo ng mga string, numero, blangko, at kakaibang mga halaga na kailangan mong unawain.
Anong tanong ang maaari mong itanong sa data na ito gamit ang Regression technique? Halimbawa, "I-predict ang presyo ng kalabasa na ibinebenta sa isang partikular na buwan". Sa muling pagtingin sa data, may ilang pagbabago kang kailangang gawin upang makabuo ng tamang istruktura ng data para sa gawain.
Ano ang napansin mo tungkol sa data na ito? Nakita mo na may halo ng string, numero, blanks at kakaibang mga halaga na kailangan mong maintindihan.
Anong tanong ang maaari mong itanong sa data na ito gamit ang regression technique? Paano ang "I-predict ang presyo ng kalabasa na binebenta sa isang takdang buwan". Sa muling pagtingin sa data, may ilang pagbabago kang kailangang gawin upang malikha ang tamang istraktura ng data para sa gawain.
## Ehersisyo - suriin ang data ng kalabasa
Gamitin natin ang [Pandas](https://pandas.pydata.org/), (ang pangalan ay nangangahulugang `Python Data Analysis`) isang tool na napaka-kapaki-pakinabang para sa paghubog ng data, upang suriin at ihanda ang data ng kalabasa.
Gamitin natin ang [Pandas](https://pandas.pydata.org/), (ang pangalan ay nangangahulugang `Python Data Analysis`) isang tool na napakabisa para sa paghulma ng data, upang suriin at ihanda ang data ng kalabasa.
### Una, suriin ang nawawalang mga petsa
### Una, suriin ang mga nawawalang petsa
Kailangan mo munang gumawa ng mga hakbang upang suriin ang nawawalang mga petsa:
Kailangan mo munang gumawa ng mga hakbang para suriin ang mga nawawalang petsa:
1. I-convert ang mga petsa sa format ng buwan (ang mga ito ay US dates, kaya ang format ay `MM/DD/YYYY`).
1. I-convert ang mga petsa sa format ng buwan (ito ay mga petsa sa US, kaya ang format ay `MM/DD/YYYY`).
2. I-extract ang buwan sa isang bagong column.
Buksan ang _notebook.ipynb_ file sa Visual Studio Code at i-import ang spreadsheet sa isang bagong Pandas dataframe.
1. Gamitin ang `head()` function upang makita ang unang limang linya.
1. Gamitin ang `head()` function upang makita ang unang limang hanay.
```python
import pandas as pd
@ -64,7 +64,7 @@ Buksan ang _notebook.ipynb_ file sa Visual Studio Code at i-import ang spreadshe
pumpkins.head()
```
✅ Anong function ang gagamitin mo upang makita ang huling limang linya?
✅ Anong function ang gagamitin mo para makita ang huling limang hanay?
1. Suriin kung may nawawalang data sa kasalukuyang dataframe:
@ -72,9 +72,9 @@ Buksan ang _notebook.ipynb_ file sa Visual Studio Code at i-import ang spreadshe
pumpkins.isnull().sum()
```
May nawawalang data, ngunit maaaring hindi ito mahalaga para sa gawain.
May nawawalang data, pero maaaring hindi ito mahalaga para sa task na ito.
1. Upang gawing mas madaling gamitin ang iyong dataframe, piliin lamang ang mga column na kailangan mo, gamit ang `loc` function na nag-eextract mula sa orihinal na dataframe ng isang grupo ng mga linya (ipinasa bilang unang parameter) at mga column (ipinasa bilang pangalawang parameter). Ang expression na `:` sa kaso sa ibaba ay nangangahulugang "lahat ng linya".
1. Para gawing mas madali ang paggamit sa iyong dataframe, piliin lamang ang mga columns na kailangan mo, gamit ang `loc` function na kumukuha mula sa orihinal na dataframe ng grupo ng mga row (bilang unang parameter) at mga column (bilang pangalawang parameter). Ang expression na `:` sa ibaba ay nangangahulugang "lahat ng rows".
```python
columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
@ -83,11 +83,11 @@ Buksan ang _notebook.ipynb_ file sa Visual Studio Code at i-import ang spreadshe
### Pangalawa, tukuyin ang average na presyo ng kalabasa
Pag-isipan kung paano tukuyin ang average na presyo ng kalabasa sa isang partikular na buwan. Anong mga column ang pipiliin mo para sa gawain na ito? Pahiwatig: kakailanganin mo ng 3 column.
Isipin kung paano matutukoy ang average na presyo ng kalabasa sa isang tiyak na buwan. Anong mga column ang pipiliin mo para sa gawain? Pahiwatig: kailangan mo ng 3 column.
Solusyon: kunin ang average ng `Low Price` at `High Price` columns upang punan ang bagong Price column, at i-convert ang Date column upang ipakita lamang ang buwan. Sa kabutihang-palad, ayon sa pagsusuri sa itaas, walang nawawalang data para sa mga petsa o presyo.
Solusyon: kunin ang average ng `Low Price` at `High Price` columns upang mapunan ang bagong Price column, at i-convert ang Date column upang ipakita lamang ang buwan. Sa kabutihang-palad, ayon sa pagsusuri sa itaas, walang nawawalang data para sa mga petsa o presyo.
1. Upang kalkulahin ang average, idagdag ang sumusunod na code:
1. Para kalkulahin ang average, idagdag ang sumusunod na code:
```python
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
@ -98,35 +98,35 @@ Solusyon: kunin ang average ng `Low Price` at `High Price` columns upang punan a
✅ Malaya kang mag-print ng anumang data na gusto mong suriin gamit ang `print(month)`.
2. Ngayon, kopyahin ang iyong na-convert na data sa isang bagong Pandas dataframe:
2. Ngayon, kopyahin ang iyong naka-convert na data sa isang bagong Pandas dataframe:
```python
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
```
Ang pag-print ng iyong dataframe ay magpapakita sa iyo ng malinis, maayos na dataset kung saan maaari kang bumuo ng iyong bagong regression model.
Ipinapakita ng pagpi-print ng iyong dataframe ang isang malinis at maayos na dataset na maaari mong gamitin para buuin ang bagong regression model.
### Ngunit sandali! May kakaiba dito
### Pero teka! May kakaiba dito
Kung titingnan mo ang `Package` column, ang mga kalabasa ay ibinebenta sa iba't ibang mga configuration. Ang ilan ay ibinebenta sa '1 1/9 bushel' na sukat, ang ilan sa '1/2 bushel' na sukat, ang ilan bawat kalabasa, ang ilan bawat pound, at ang ilan sa malalaking kahon na may iba't ibang lapad.
Kung titingnan mo ang `Package` column, ang mga kalabasa ay binebenta sa iba't ibang paraan. Ang ilan ay binebenta sa '1 1/9 bushel' sukat, ang ilan sa '1/2 bushel', ilan bawat kalabasa, ilan bawat pound, at ilan sa malalaking kahon na may iba't ibang lapad.
> Mukhang napakahirap timbangin nang pare-pareho ang mga kalabasa
> Mahirap timbangin nang konsistent ang mga kalabasa
Sa pag-usisa sa orihinal na data, kawili-wili na ang anumang may `Unit of Sale` na katumbas ng 'EACH' o 'PER BIN' ay mayroon ding `Package` type na bawat inch, bawat bin, o 'each'. Mukhang napakahirap timbangin nang pare-pareho ang mga kalabasa, kaya't i-filter natin ang mga ito sa pamamagitan ng pagpili lamang ng mga kalabasa na may string na 'bushel' sa kanilang `Package` column.
Sa pagsusuri ng orihinal na data, kawili-wili na anumang may `Unit of Sale` na 'EACH' o 'PER BIN' ay mayroon ding uri ng `Package` na per inch, per bin, o 'each'. Mahirap timbangin nang konsistent ang mga kalabasa, kaya't salain natin ang data sa pamamagitan ng pagpili lamang ng mga kalabasa na may string na 'bushel' sa kanilang `Package` column.
1. Magdagdag ng filter sa itaas ng file, sa ilalim ng initial .csv import:
1. Magdagdag ng filter sa itaas ng file, sa ilalim ng paunang pag-import ng .csv:
```python
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
Kung i-print mo ang data ngayon, makikita mo na nakakakuha ka lamang ng mga 415 linya ng data na naglalaman ng mga kalabasa ayon sa bushel.
Kung ipi-print mo ang data ngayon, makikita mo na nakuha mo lamang ang mga 415 na linya ng data na naglalaman ng mga kalabasa sa bushel.
### Ngunit sandali! May isa pang bagay na kailangang gawin
### Pero teka! May isa pang kailangang gawin
Napansin mo ba na ang dami ng bushel ay nag-iiba bawat linya? Kailangan mong gawing normal ang pagpepresyo upang ipakita ang pagpepresyo bawat bushel, kaya't gumawa ng ilang math upang gawing standard ito.
Napansin mo ba na nag-iiba ang dami ng bushel sa bawat hanay? Kailangan mong i-normalize ang pagpe-presyo upang ipakita ang presyo kada bushel, kaya gumawa ng kaunting math para i-standardize ito.
1. Idagdag ang mga linyang ito pagkatapos ng block na gumagawa ng bagong_pumpkins dataframe:
1. Idagdag ang mga linya na ito pagkatapos ng block na lumilikha ng bagong_pumpkins dataframe:
```python
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
@ -134,38 +134,38 @@ Napansin mo ba na ang dami ng bushel ay nag-iiba bawat linya? Kailangan mong gaw
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
```
✅ Ayon sa [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), ang timbang ng isang bushel ay nakadepende sa uri ng produkto, dahil ito ay isang sukat ng volume. "Ang isang bushel ng mga kamatis, halimbawa, ay dapat na tumimbang ng 56 pounds... Ang mga dahon at gulay ay kumukuha ng mas maraming espasyo na may mas kaunting timbang, kaya't ang isang bushel ng spinach ay 20 pounds lamang." Medyo komplikado ito! Huwag na nating alalahanin ang paggawa ng conversion ng bushel-to-pound, at sa halip ay magpresyo bawat bushel. Ang lahat ng pag-aaral na ito tungkol sa bushel ng mga kalabasa, gayunpaman, ay nagpapakita kung gaano kahalaga ang maunawaan ang kalikasan ng iyong data!
✅ Ayon sa [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), ang bigat ng isang bushel ay depende sa uri ng produkto, dahil ito ay pagsukat ng volume. "Ang isang bushel ng kamatis, halimbawa, ay dapat tumimbang ng 56 pounds... Ang mga dahon at gulay ay kumukuha ng mas maraming espasyo ngunit mababa ang timbang, kaya ang isang bushel ng spinach ay 20 pounds lamang." Medyo kumplikado lahat ito! Huwag na nating alalahanin ang conversion ng bushel-pounds, at tumuon na lamang sa pagpepresyo sa bushel. Ang pag-aaral ng bushel ng kalabasa na ito ay nagpapakita kung gaano kahalaga ang maintindihan ang kalikasan ng iyong data!
Ngayon, maaari mong suriin ang pagpepresyo bawat unit batay sa kanilang bushel measurement. Kung i-print mo ang data muli, makikita mo kung paano ito na-standardize.
Ngayon, maaari mo nang suriin ang presyo kada yunit batay sa kanilang sukat ng bushel. Kung ipi-print mo muli ang data, makikita mo kung paano ito naging standardized.
✅ Napansin mo ba na ang mga kalabasa na ibinebenta sa kalahating bushel ay napakamahal? Kaya mo bang alamin kung bakit? Pahiwatig: ang maliliit na kalabasa ay mas mahal kaysa sa malalaki, marahil dahil mas marami ang mga ito bawat bushel, dahil sa espasyong hindi nagagamit na kinukuha ng isang malaking hollow pie pumpkin.
✅ Napansin mo ba na ang mga kalabasa na binebenta ng half-bushel ay napakamahal? Kaya mo bang hulaan kung bakit? Pahiwatig: Ang maliliit na kalabasa ay mas mahal kumpara sa malalaki, marahil dahil mas marami sila kada bushel, dahil sa puwang na hindi nagagamit na sinasakop ng isang malaking lukbutan na kalabasa.
## Mga Estratehiya sa Visualization
## Estratehiya sa Pag-visualize
Bahagi ng tungkulin ng data scientist ang ipakita ang kalidad at kalikasan ng data na kanilang pinagtatrabahuhan. Upang gawin ito, madalas silang gumagawa ng mga kawili-wiling visualization, o mga plots, graphs, at charts, na nagpapakita ng iba't ibang aspeto ng data. Sa ganitong paraan, nagagawa nilang ipakita nang biswal ang mga relasyon at gaps na kung hindi man ay mahirap matuklasan.
Bahagi ng tungkulin ng data scientist ay ipakita ang kalidad at kalikasan ng data na kanilang pinagtatrabahuhan. Para dito, madalas silang gumagawa ng mga interesanteng visualizations, o mga plots, graphs, at charts, na nagpapakita ng iba't ibang aspeto ng data. Sa ganitong paraan, naipapakita nila sa visual na paraan ang mga relasyon at mga puwang na mahirap makita nang iba.
[![ML para sa mga nagsisimula - Paano I-visualize ang Data gamit ang Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML para sa mga nagsisimula - Paano I-visualize ang Data gamit ang Matplotlib")
[![ML para sa mga nagsisimula - Paano Mag-Visualize ng Data gamit ang Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML para sa mga nagsisimula - Paano Mag-Visualize ng Data gamit ang Matplotlib")
> 🎥 I-click ang imahe sa itaas para sa maikling video na nagpapakita kung paano i-visualize ang data para sa araling ito.
> 🎥 I-click ang larawan sa itaas para sa maikling video na nagpapakita ng pag-visualize ng data para sa leksyong ito.
Ang mga visualization ay maaari ring makatulong sa pagtukoy ng pinaka-angkop na machine learning technique para sa data. Halimbawa, ang isang scatterplot na tila sumusunod sa isang linya ay nagpapahiwatig na ang data ay isang mahusay na kandidato para sa linear regression exercise.
Makakatulong din ang mga visualization para matukoy ang pinaka-angkop na machine learning technique para sa data. Ang isang scatterplot na tila sumusunod sa isang linya, halimbawa, ay nagpapahiwatig na ang data ay magandang kandidato para sa linear regression exercise.
Ang isang data visualization library na mahusay gumagana sa Jupyter notebooks ay [Matplotlib](https://matplotlib.org/) (na nakita mo rin sa nakaraang aralin).
Isang data visualization library na mahusay gamitin sa Jupyter notebooks ay ang [Matplotlib](https://matplotlib.org/) (na nakita mo rin sa nakaraang leksyon).
> Magkaroon ng mas maraming karanasan sa data visualization sa [mga tutorial na ito](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
> Magkaroon ng karagdagang karanasan sa data visualization sa [mga tutorial na ito](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
## Ehersisyo - mag-eksperimento gamit ang Matplotlib
## Ehersisyo - subukan ang Matplotlib
Subukang gumawa ng ilang basic plots upang ipakita ang bagong dataframe na iyong ginawa. Ano ang ipapakita ng isang basic line plot?
Subukang gumawa ng mga pangunahing plots upang ipakita ang bagong dataframe na kakagawa mo lang. Ano kaya ang ipapakita ng isang basic line plot?
1. I-import ang Matplotlib sa itaas ng file, sa ilalim ng Pandas import:
1. I-import ang Matplotlib sa itaas ng file, sa ilalim ng import ng Pandas:
```python
import matplotlib.pyplot as plt
```
1. I-re-run ang buong notebook upang ma-refresh.
1. Sa ibaba ng notebook, magdagdag ng cell upang i-plot ang data bilang isang box:
1. I-run muli ang buong notebook para ma-refresh.
1. Sa ibaba ng notebook, magdagdag ng cell para i-plot ang data bilang isang box:
```python
price = new_pumpkins.Price
@ -174,44 +174,121 @@ Subukang gumawa ng ilang basic plots upang ipakita ang bagong dataframe na iyong
plt.show()
```
![Isang scatterplot na nagpapakita ng relasyon ng presyo sa buwan](../../../../2-Regression/2-Data/images/scatterplot.png)
![Isang scatterplot na nagpapakita ng relasyon ng presyo at buwan](../../../../translated_images/tl/scatterplot.b6868f44cbd2051c.webp)
Kapaki-pakinabang ba ang plot na ito? Mayroon bang bagay na ikinagulat mo?
Kapaki-pakinabang ba ang plot na ito? May nakakagulat ba dito sa iyo?
Hindi ito partikular na kapaki-pakinabang dahil ang ginagawa lamang nito ay ipakita ang iyong data bilang isang kalat ng mga puntos sa isang partikular na buwan.
Hindi ito gaanong kapaki-pakinabang dahil ipinapakita lamang nito ang iyong data bilang isang kalat ng mga puntos sa isang takdang buwan.
### Gawing kapaki-pakinabang
Upang makagawa ng mga chart na nagpapakita ng kapaki-pakinabang na data, karaniwang kailangan mong i-group ang data sa isang paraan. Subukan nating gumawa ng plot kung saan ang y axis ay nagpapakita ng mga buwan at ang data ay nagpapakita ng distribution ng data.
Para maging kapaki-pakinabang ang mga chart, kadalasan kailangan mong i-groups ang data. Subukan nating gumawa ng plot kung saan ang y axis ay nagpapakita ng mga buwan at ang data ay nagpapakita ng distribusyon ng data.
1. Magdagdag ng cell upang gumawa ng grouped bar chart:
1. Magdagdag ng cell para gumawa ng grouped bar chart:
```python
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
plt.ylabel("Pumpkin Price")
```
![Isang bar chart na nagpapakita ng relasyon ng presyo sa buwan](../../../../2-Regression/2-Data/images/barchart.png)
![Isang bar chart na nagpapakita ng relasyon ng presyo at buwan](../../../../translated_images/tl/barchart.a833ea9194346d76.webp)
Mas kapaki-pakinabang na data visualization ito! Tila nagpapahiwatig na ang pinakamataas na presyo ng kalabasa ay nangyayari sa Setyembre at Oktubre. Tumutugma ba ito sa iyong inaasahan? Bakit o bakit hindi?
## Ehersisyo - subukan ang Seaborn
Malakas ang Matplotlib, pero nangangailangan ng maraming code para makagawa ng isang pulidong chart. Ang [Seaborn](https://seaborn.pydata.org/) ay isang library na ginawa _sa ibabaw ng_ Matplotlib na disenyo para sa statistical data visualization. Gumagana ito nang direkta sa Pandas dataframes, nag-aapply ng magagandang default styles, at nagbibigay-daan sa paggawa ng mga nakaka-inform na plot gamit ang mas konting code. Dahil nagbabalik ang Seaborn ng mga Matplotlib objects, magagamit mo pa rin ang lahat ng alam mo tungkol sa Matplotlib para i-fine-tune ang resulta.
> Kung wala ka pang Seaborn, i-install ito gamit ang `pip install seaborn`.
1. I-import ang Seaborn sa itaas ng notebook, sa ilalim ng ibang mga import. Karaniwan itong ino-import bilang `sns`:
```python
import seaborn as sns
```
### Scatter plots para ipakita ang mga relasyon
Malaking bahagi ng pag-explore ng data bago gumawa ng modelo ay ang paghahanap ng _relasyon_ sa pagitan ng mga variable. Ang [scatter plot](https://en.wikipedia.org/wiki/Scatter_plot) ay isa sa pinakamahusay na mga gamit dito: kung ang mga puntos ay tila sumusunod sa isang linya, maaaring correlated ang dalawang variables, na magandang palatandaan na maaaring gumana ang linear regression model.
1. Gawing muli ang price-to-month scatter plot mula noon, gamit ang Seaborn's [`relplot()`](https://seaborn.pydata.org/generated/seaborn.relplot.html) (relational plot), na direktang gumagamit ng iyong mga column sa dataframe:
```python
sns.relplot(x="Price", y="Month", data=new_pumpkins)
```
![Isang Seaborn scatterplot na nagpapakita ng relasyon ng presyo at buwan](../../../../translated_images/tl/relplot.a03837d8f0329cec.webp)
Pansinin kung paano mo ipinapasa ang _mga pangalan ng column_ at ang dataframe, at ang Seaborn ang bahala sa mga labels ng axis.
2. Maaari kang lumipat sa line plot sa pamamagitan ng paglalagay ng `kind="line"`. Nagdodrawing pa ang Seaborn ng shaded band na nagpapakita ng confidence interval sa paligid ng linya:
```python
sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)
```
![Isang Seaborn line plot na nagpapakita ng relasyon ng presyo at buwan](../../../../translated_images/tl/lineplot.f9034ba47b1e30ee.webp)
Medyo maingay ang data na ito kaya hindi ito ang pinakamalinaw na pagpipilian — pero ipinapakita nito kung gaano kadaling palitan ang uri ng chart sa Seaborn.
### Bar charts para ipakita ang distribusyon
Kanina ay ikaw ang nag-grupo ng data nang mano-mano upang gumawa ng bar chart gamit ang Matplotlib. Ang [`catplot()`](https://seaborn.pydata.org/generated/seaborn.catplot.html) (categorical plot) ng Seaborn ay kayang gawin ang pag-grupo at pag-aggregate para sa iyo. Sa default, `kind="bar"` nagpapakita ng mean ng bawat kategorya kasama ang itim na linya na nagpapahiwatig ng confidence interval.
1. Gumawa ng bar chart ng average na presyo kada buwan:
```python
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")
```
![A Seaborn bar chart showing the price distribution per month](../../../../translated_images/tl/catplot.e73fc35fdf96242b.webp)
Pinapatunayan nito ang nakita mo gamit ang Matplotlib — tumataas ang presyo mga Setyembre at Oktubre — ngunit visual din ng Seaborn kung gaano kalaki ang _pagkakaiba_ ng presyo sa bawat buwan.
### Heatmaps upang ipakita ang mga korelasyon
Ang scatter plots ay naghahambing ng dalawang variable sa isang pagkakataon. Kapag mayroon kang maraming numeric na kolum, ang [heatmap](https://en.wikipedia.org/wiki/Heat_map) ay nagpapakita ng lakas ng ugnayan sa pagitan ng _lahat_ ng pares ng kolum ng sabay-sabay. Ito ay isang karaniwang paraan upang makita kung aling mga feature ang pinaka-kaugnay bago pumili kung ano ang ipapakain sa modelo (at ang parehong uri ng tsart ay ginagamit din upang ipakita ang confusion matrices sa classification).
1. Gumawa ng correlation matrix gamit ang Pandas, pagkatapos iguhit ito gamit ang [`heatmap()`](https://seaborn.pydata.org/generated/seaborn.heatmap.html) ng Seaborn. Ang opsyong `annot=True` ay naglalagay ng mga halaga ng korelasyon sa bawat selda:
```python
correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()
sns.heatmap(correlations, annot=True, cmap="coolwarm")
```
![A Seaborn heatmap showing correlations between the numeric columns](../../../../translated_images/tl/heatmap.bd98dce43b404c57.webp)
Ang mga halagang malapit sa `1` (o `-1`) ay nangangahulugang malakas na _linear_ ang korelasyon ng mga kolum. Pansinin kung paano halos perpektong magkaugnay ang `Low Price` at `High Price`. Sa kabilang banda, ang `Month` ay nagpapakita lamang ng mahina na linear na korelasyon sa presyo — kahit na ipinakita ng bar chart sa itaas ang malinaw na pana-panahong pagtaas sa Setyembre at Oktubre. Isang mahalagang aral ito: ang correlation coefficient ay sumusukat lamang ng _diretsong-linya_ na ugnayan, kaya maaari nitong hindi makita ang mga pana-panahong o hindi linear na mga pattern. ✅ Bakit kapaki-pakinabang na tingnan ang heatmap *at* mga tsart tulad ng bar chart bago magpasya kung aling mga kolum ang gagamitin?
### Matplotlib o Seaborn?
Parehong kagiliw-giliw na malaman ang dalawang library:
- **Matplotlib** ay nagbibigay ng detalyadong kontrol sa bawat elemento ng tsart at ito ang pundasyon ng halos lahat ng iba pang Python plotting library.
- **Seaborn** ay nagbibigay ng mas mataas na antas ng mga function at magagandang default para sa mga estadistikal na tsart, direktang gumagana sa mga dataframe, at kadalasang mas mabilis para sa exploratory data analysis.
Ito ay mas kapaki-pakinabang na data visualization! Mukhang ipinapakita nito na ang pinakamataas na presyo para sa mga kalabasa ay nangyayari sa Setyembre at Oktubre. Tugma ba ito sa iyong inaasahan? Bakit o bakit hindi?
Karaniwang workflow ay gamitin ang Seaborn upang mabilis na siyasatin ang data, pagkatapos bumaba sa Matplotlib kapag kailangan ng pag-customize ng mga detalye.
---
## 🚀Hamunin
Galugarin ang iba't ibang uri ng visualization na inaalok ng Matplotlib. Alin sa mga uri ang pinaka-angkop para sa regression problems?
Siyasatin ang iba't ibang uri ng visualisasyon na inaalok ng Matplotlib at Seaborn. Alin sa mga uri ang pinakaangkop para sa mga problema sa regression?
## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## Review at Pag-aaral sa Sarili
## Suriin at Pag-aralan Mag-isa
Tingnan ang maraming paraan upang i-visualize ang data. Gumawa ng listahan ng iba't ibang libraries na available at tandaan kung alin ang pinakamahusay para sa mga partikular na uri ng gawain, halimbawa 2D visualizations vs. 3D visualizations. Ano ang natuklasan mo?
Tingnan ang maraming paraan ng pag-visualize ng data. Gumawa ng listahan ng iba't ibang library na available at tandaan kung alin ang pinakamahusay para sa ibat ibang uri ng mga gawain, halimbawa 2D visualizations vs. 3D visualizations. Ano ang iyong nadiskubre?
## Takdang Aralin
## Takdang-Aralin
[Paggalugad sa visualization](assignment.md)
[Paggalugad sa visualisasyon](assignment.md)
---
**Paunawa**:
Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Pagtatanggi**:
Ang dokumentong ito ay isinalin gamit ang serbisyo ng AI translation na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't nagsusumikap kami para sa katumpakan, pakatandaan na ang awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na pangunahing sanggunian. Para sa mahahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang maling pagkakaintindi o maling interpretasyon na nagmula sa paggamit ng pagsasaling ito.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -3,7 +3,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"## Linear Regression para sa Mga Kalabasa - Aralin 2\n"
]
},
{
"cell_type": "code",
@ -220,6 +222,7 @@
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
"\n",
"pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
@ -383,18 +386,78 @@
"plt.ylabel(\"Pumpkin Price\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Pagpapakita gamit ang Seaborn\n",
"\n",
"[Seaborn](https://seaborn.pydata.org/) ay itinayo sa ibabaw ng Matplotlib at direktang gumagana sa mga dataframe, na ginagawang mabilis ang paggawa ng mga kaakit-akit na estadistikal na mga grap gamit ang napakakaunting code.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Mga scatter plot upang ipakita ang mga ugnayan\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sns.relplot(x=\"Price\", y=\"Month\", data=new_pumpkins)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sns.relplot(x=\"Price\", y=\"Month\", kind=\"line\", data=new_pumpkins)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Mga bar chart para ipakita ang mga distribusyon\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
"source": [
"sns.catplot(x=\"Month\", y=\"Price\", data=new_pumpkins, kind=\"bar\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
"### Mga Heatmap upang ipakita ang mga korelasyon\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr()\n",
"sns.heatmap(correlations, annot=True, cmap=\"coolwarm\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**Pagtatanggi**:\nAng dokumentong ito ay isinalin gamit ang serbisyo ng AI translation na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't nagsusumikap kami para sa katumpakan, pakatandaan na ang awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na pangunahing sanggunian. Para sa mahahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang maling pagkakaintindi o maling interpretasyon na nagmula sa paggamit ng pagsasaling ito.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
@ -424,13 +487,7 @@
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
}
},
"orig_nbformat": 2,
"coopTranslator": {
"original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
"translation_date": "2025-08-29T14:58:20+00:00",
"source_file": "2-Regression/2-Data/solution/notebook.ipynb",
"language_code": "tl"
}
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2

@ -1,47 +1,47 @@
# Panimula sa Reinforcement Learning at Q-Learning
![Buod ng reinforcement sa machine learning sa isang sketchnote](../../../../sketchnotes/ml-reinforcement.png)
![Buod ng reinforcement sa machine learning sa isang sketchnote](../../../../translated_images/tl/ml-reinforcement.94024374d63348db.webp)
> Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac)
Ang reinforcement learning ay may tatlong mahalagang konsepto: ang agent, ilang estado, at isang hanay ng mga aksyon sa bawat estado. Sa pamamagitan ng pagsasagawa ng isang aksyon sa isang tiyak na estado, binibigyan ang agent ng gantimpala. Isipin muli ang laro sa computer na Super Mario. Ikaw si Mario, nasa isang antas ng laro, nakatayo sa gilid ng bangin. Sa itaas mo ay may barya. Ikaw bilang si Mario, nasa isang antas ng laro, sa isang tiyak na posisyon ... iyon ang iyong estado. Ang paggalaw ng isang hakbang pakanan (isang aksyon) ay magdadala sa iyo sa gilid, at magbibigay iyon sa iyo ng mababang numerong puntos. Gayunpaman, ang pagpindot sa pindutan ng pagtalon ay magbibigay-daan sa iyo na makakuha ng puntos at manatiling buhay. Iyon ay isang positibong resulta at dapat kang gantimpalaan ng positibong numerong puntos.
Kinasasangkutan ng reinforcement learning ang tatlong mahahalagang konsepto: ang ahente, ilang estado, at isang set ng mga aksyon bawat estado. Sa pamamagitan ng pagsasagawa ng isang aksyon sa isang tinukoy na estado, ang ahente ay binibigyan ng gantimpala. Isipin muli ang laro sa computer na Super Mario. Ikaw si Mario, nasa isang antas ng laro, nakatayo sa tabi ng gilid ng bangin. Sa itaas mo ay isang barya. Ikaw bilang Mario, sa isang antas ng laro, sa isang tiyak na posisyon ... iyon ang iyong estado. Ang paglipat ng isang hakbang pakanan (isang aksyon) ay magtutulak sa iyo na malaglag sa gilid, at iyon ay magbibigay sa iyo ng mababang numerikal na puntos. Gayunpaman, ang pagpindot sa jump button ay magbibigay-daan sa iyo upang makakuha ng puntos at mananatili kang buhay. Iyon ay isang positibong kinalabasan at dapat kang bigyan ng positibong numerikal na puntos.
Sa pamamagitan ng paggamit ng reinforcement learning at isang simulator (ang laro), maaari mong matutunan kung paano laruin ang laro upang mapakinabangan ang gantimpala, na ang pananatiling buhay at pagkamit ng pinakamaraming puntos hangga't maaari.
Sa pamamagitan ng paggamit ng reinforcement learning at isang simulator (ang laro), maaari mong matutunan kung paano laruin ang laro upang makatanggap ng pinakadakilang gantimpala na nananatiling buhay at nakakakuha ng maraming puntos hangga't maaari.
[![Panimula sa Reinforcement Learning](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo)
[![Intro sa Reinforcement Learning](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo)
> 🎥 I-click ang imahe sa itaas upang marinig si Dmitry na talakayin ang Reinforcement Learning
> 🎥 I-click ang larawan sa itaas upang pakinggan si Dmitry na tinatalakay ang Reinforcement Learning
## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## Mga Paunang Kailangan at Setup
## Mga Kinakailangan at Setup
Sa araling ito, mag-eeksperimento tayo gamit ang ilang code sa Python. Dapat mong magawang patakbuhin ang Jupyter Notebook code mula sa araling ito, alinman sa iyong computer o sa cloud.
Sa leksyong ito, mag-eeksperimento tayo gamit ang ilang code sa Python. Dapat kang makapagpatakbo ng Jupyter Notebook code mula sa leksyon na ito, alinman sa iyong computer o sa cloud.
Maaari mong buksan ang [notebook ng aralin](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) at sundan ang araling ito upang bumuo.
Maaari mong buksan ang [lesson notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) at sundan ang leksyon upang makabuo.
> **Note:** Kung binubuksan mo ang code na ito mula sa cloud, kailangan mo ring kunin ang file na [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), na ginagamit sa notebook code. Idagdag ito sa parehong direktoryo ng notebook.
> **Tandaan:** Kung binubuksan mo ang code na ito mula sa cloud, kailangan mo ring kunin ang [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) na file, na ginagamit sa notebook code. Idagdag ito sa parehong direktoryo ng notebook.
## Panimula
Sa araling ito, susuriin natin ang mundo ng **[Peter and the Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, na inspirasyon ng isang musikal na kwento ng isang Russian composer, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Gagamit tayo ng **Reinforcement Learning** upang tulungan si Peter na tuklasin ang kanyang kapaligiran, mangolekta ng masasarap na mansanas, at iwasan ang makaharap ang lobo.
Sa leksyong ito, susuriin natin ang mundo ng **[Peter and the Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, na inspirasyon mula sa isang musikal na kuwentong-bayang isinulat ng isang Ruso na kompositor, si [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Gagamitin natin ang **Reinforcement Learning** upang hayaan si Peter na tuklasin ang kanyang paligid, mangalap ng mga masasarap na mansanas at iwasan ang pagharap sa lobo.
Ang **Reinforcement Learning** (RL) ay isang teknik sa pag-aaral na nagbibigay-daan sa atin na matutunan ang optimal na pag-uugali ng isang **agent** sa isang **environment** sa pamamagitan ng pagsasagawa ng maraming eksperimento. Ang agent sa environment na ito ay dapat mayroong **layunin**, na tinutukoy ng isang **reward function**.
**Reinforcement Learning** (RL) ay isang teknik ng pagkatuto na nagbibigay-daan sa atin na matutunan ang pinakamainam na kilos ng isang **ahente** sa ilang **kapaligiran** sa pamamagitan ng maraming eksperimento. Ang isang ahente sa kapaligiran na ito ay dapat magkaroon ng **layunin**, na tinutukoy ng isang **reward function**.
## Ang Kapaligiran
## Ang kapaligiran
Para sa pagiging simple, isipin natin ang mundo ni Peter bilang isang square board na may sukat na `width` x `height`, tulad nito:
Para sa kasimplehan, isipin natin ang mundo ni Peter bilang isang parisukat na board na may sukat na `width` x `height`, ganito:
![Kapaligiran ni Peter](../../../../8-Reinforcement/1-QLearning/images/environment.png)
![Kapaligiran ni Peter](../../../../translated_images/tl/environment.40ba3cb66256c93f.webp)
Ang bawat cell sa board na ito ay maaaring:
Bawat cell sa board na ito ay maaaring:
* **lupa**, kung saan maaaring maglakad si Peter at iba pang nilalang.
* **tubig**, kung saan malinaw na hindi ka maaaring maglakad.
* isang **puno** o **damo**, isang lugar kung saan maaari kang magpahinga.
* isang **mansanas**, na kumakatawan sa isang bagay na ikatutuwa ni Peter na makita upang pakainin ang sarili.
* isang **lobo**, na mapanganib at dapat iwasan.
* **lupa**, kung saan maaaring maglakad si Peter at iba pang mga nilalang.
* **tubig**, na syempre ay hindi maaaring lakaran.
* isang **puno** o **damo**, isang lugar kung saan maaaring magpahinga.
* isang **mansanas**, na kumakatawan sa isang bagay na ikalulugod ni Peter na matagpuan upang mapakain ang kanyang sarili.
* isang **lobo**, na delikado at dapat iwasan.
May hiwalay na Python module, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), na naglalaman ng code upang magtrabaho sa kapaligirang ito. Dahil ang code na ito ay hindi mahalaga para sa pag-unawa sa ating mga konsepto, i-import natin ang module at gamitin ito upang lumikha ng sample board (code block 1):
Mayroong hiwalay na Python module, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), na naglalaman ng code para makatrabaho ang kapaligirang ito. Dahil hindi mahalaga ang code na ito para sa pag-unawa sa ating mga konsepto, i-import natin ang module at gagamitin ito upang gumawa ng sample board (code block 1):
```python
from rlboard import *
@ -52,63 +52,63 @@ m.randomize(seed=13)
m.plot()
```
Ang code na ito ay dapat mag-print ng larawan ng kapaligiran na katulad ng nasa itaas.
Dapat ipakita ng code na ito ang isang larawan ng kapaligiran na katulad ng nasa itaas.
## Mga Aksyon at Patakaran
## Mga aksyon at polisiya
Sa ating halimbawa, ang layunin ni Peter ay makahanap ng mansanas, habang iniiwasan ang lobo at iba pang hadlang. Upang magawa ito, maaari siyang maglakad-lakad hanggang sa makita niya ang mansanas.
Sa ating halimbawa, layunin ni Peter na matagpuan ang isang mansanas, habang iniiwasan ang lobo at iba pang mga balakid. Upang magawa ito, maaari siyang maglakad hanggang matagpuan niya ang mansanas.
Samakatuwid, sa anumang posisyon, maaari siyang pumili sa isa sa mga sumusunod na aksyon: pataas, pababa, pakaliwa, at pakanan.
Kaya, sa anumang posisyon, maaari siyang pumili mula sa mga sumusunod na aksyon: pataas, pababa, pakaliwa at pakanan.
Itatakda natin ang mga aksyon bilang isang diksyunaryo, at i-map ang mga ito sa mga pares ng kaukulang pagbabago sa coordinate. Halimbawa, ang paggalaw pakanan (`R`) ay tumutugma sa pares `(1,0)`. (code block 2):
Itutukoy natin ang mga aksyon na ito bilang isang diksyunaryo, at ima-map ang mga ito sa mga pares ng kaukulang pagbabago sa koordinado. Halimbawa, ang paggalaw pakanan (`R`) ay tumutugma sa pares na `(1,0)`. (code block 2):
```python
actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) }
action_idx = { a : i for i,a in enumerate(actions.keys()) }
```
Sa kabuuan, ang estratehiya at layunin ng senaryong ito ay ang mga sumusunod:
Upang ibuod, ang estratehiya at layunin ng senaryong ito ay ang mga sumusunod:
- **Ang estratehiya**, ng ating agent (Peter) ay tinutukoy ng tinatawag na **policy**. Ang policy ay isang function na nagbabalik ng aksyon sa anumang ibinigay na estado. Sa ating kaso, ang estado ng problema ay kinakatawan ng board, kabilang ang kasalukuyang posisyon ng player.
- **Ang estratehiya**, ng ating ahente (si Peter) ay tinutukoy ng tinatawag na **polisiya**. Ang polisiya ay isang function na nagbabalik ng aksyon sa anumang ibinigay na estado. Sa ating kaso, ang estado ng problema ay kinakatawan ng board, kabilang ang kasalukuyang posisyon ng manlalaro.
- **Ang layunin**, ng reinforcement learning ay sa huli matutunan ang isang mahusay na policy na magpapahintulot sa atin na malutas ang problema nang mahusay. Gayunpaman, bilang baseline, isaalang-alang natin ang pinakasimpleng policy na tinatawag na **random walk**.
- **Ang layunin**, ng reinforcement learning ay sa huli ay matutunan ang isang mabuting polisiya na magpapahintulot sa atin na malutas ang problema nang episyente. Gayunpaman, bilang panimulang punto, isaalang-alang natin ang pinakasimpleng polisiya na tinatawag na **random walk**.
## Random walk
Unahin nating lutasin ang ating problema sa pamamagitan ng pagpapatupad ng random walk strategy. Sa random walk, pipiliin natin nang random ang susunod na aksyon mula sa mga pinapayagang aksyon, hanggang sa maabot natin ang mansanas (code block 3).
Unahin nating lutasin ang ating problema sa pamamagitan ng pagpapatupad ng isang estratehiya ng random walk. Sa random walk, pipili tayo nang random ng susunod na aksyon mula sa mga pinapahintulutang aksyon, hanggang sa maabot natin ang mansanas (code block 3).
1. Ipatupad ang random walk gamit ang code sa ibaba:
1. Ipatupad ang random walk gamit ang kodigo sa ibaba:
```python
def random_policy(m):
return random.choice(list(actions))
def walk(m,policy,start_position=None):
n = 0 # number of steps
# set initial position
n = 0 # bilang ng mga hakbang
# itakda ang panimulang posisyon
if start_position:
m.human = start_position
else:
m.random_start()
while True:
if m.at() == Board.Cell.apple:
return n # success!
return n # tagumpay!
if m.at() in [Board.Cell.wolf, Board.Cell.water]:
return -1 # eaten by wolf or drowned
return -1 # kinain ng lobo o nalunod
while True:
a = actions[policy(m)]
new_pos = m.move_pos(m.human,a)
if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
m.move(a) # do the actual move
m.move(a) # isagawa ang aktwal na galaw
break
n+=1
walk(m,random_policy)
```
Ang tawag sa `walk` ay dapat magbalik ng haba ng kaukulang landas, na maaaring mag-iba mula sa isang run patungo sa isa pa.
Ang tawag sa `walk` ay dapat bumalik ng haba ng kaukulang landas, na maaaring mag-iba sa bawat pagtakbo.
1. Patakbuhin ang walk experiment nang ilang beses (sabihin, 100), at i-print ang mga resulta ng istatistika (code block 4):
1. Patakbuhin ang walk experiment ng ilang ulit (halimbawa, 100), at i-print ang mga resulta ng estadistika (code block 4):
```python
def print_statistics(policy):
@ -125,17 +125,17 @@ Unahin nating lutasin ang ating problema sa pamamagitan ng pagpapatupad ng rando
print_statistics(random_policy)
```
Tandaan na ang average na haba ng landas ay nasa paligid ng 30-40 hakbang, na medyo marami, kung isasaalang-alang ang katotohanan na ang average na distansya sa pinakamalapit na mansanas ay nasa paligid ng 5-6 hakbang.
Pansinin na ang average na haba ng isang landas ay nasa paligid ng 30-40 hakbang, na medyo marami, kung ikukumpara na ang average na distansya sa pinakamalapit na mansanas ay nasa 5-6 hakbang lamang.
Maaari mo ring makita kung ano ang hitsura ng galaw ni Peter sa random walk:
Maaari mo ring makita kung ano ang hitsura ng paggalaw ni Peter habang nasa random walk:
![Random Walk ni Peter](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif)
## Reward function
Upang gawing mas matalino ang ating policy, kailangan nating maunawaan kung aling mga galaw ang "mas mabuti" kaysa sa iba. Upang magawa ito, kailangan nating tukuyin ang ating layunin.
Upang maging mas matalino ang ating polisiya, kailangan nating maunawaan kung alin sa mga galaw ang "mas mabuti" kaysa sa iba. Upang magawa ito, kailangan nating tukuyin ang ating layunin.
Ang layunin ay maaaring tukuyin sa mga tuntunin ng isang **reward function**, na magbabalik ng ilang halaga ng puntos para sa bawat estado. Ang mas mataas na numero, mas maganda ang reward function. (code block 5)
Maaari nating tukuyin ang layunin sa pamamagitan ng isang **reward function**, na magbabalik ng ilang halaga ng puntos para sa bawat estado. Mas mataas ang numero, mas mabuti ang reward function. (code block 5)
```python
move_reward = -0.1
@ -154,39 +154,115 @@ def reward(m,pos=None):
return move_reward
```
Isang kawili-wiling bagay tungkol sa reward functions ay sa karamihan ng mga kaso, *binibigyan lamang tayo ng makabuluhang gantimpala sa dulo ng laro*. Nangangahulugan ito na ang ating algorithm ay dapat na alalahanin ang "magagandang" hakbang na humantong sa positibong gantimpala sa dulo, at dagdagan ang kanilang kahalagahan. Katulad nito, ang lahat ng galaw na humantong sa masamang resulta ay dapat na iwasan.
Isang kawili-wiling bagay tungkol sa mga reward functions ay sa karamihan ng mga kaso, *binibigyan lang tayo ng malaking gantimpala sa dulo ng laro*. Nangangahulugan ito na ang ating algorithm ay dapat may kakayahang tandaan ang mga "magandang" hakbang na nagdala sa positibong gantimpala sa dulo, at dagdagan ang kahalagahan nito. Gayundin, lahat ng galaw na nagdala sa masamang resulta ay dapat na hadlangan.
## Q-Learning
Ang algorithm na tatalakayin natin dito ay tinatawag na **Q-Learning**. Sa algorithm na ito, ang policy ay tinutukoy ng isang function (o isang data structure) na tinatawag na **Q-Table**. Itinatala nito ang "kabutihan" ng bawat aksyon sa isang ibinigay na estado.
Ang isang algorithm na tatalakayin natin dito ay tinatawag na **Q-Learning**. Sa algorithm na ito, ang polisiya ay tinutukoy ng isang function (o isang istraktura ng data) na tinatawag na **Q-Table**. Itinatala nito ang "kabutihan" ng bawat isa sa mga aksyon sa isang partikular na estado.
Tinatawag itong Q-Table dahil madalas na maginhawa itong i-representa bilang isang table, o multi-dimensional array. Dahil ang ating board ay may sukat na `width` x `height`, maaari nating i-representa ang Q-Table gamit ang isang numpy array na may hugis na `width` x `height` x `len(actions)`: (code block 6)
Tinawag itong Q-Table dahil madalas itong isinasalarawan bilang isang table, o multi-dimensional array. Dahil ang ating board ay may sukat na `width` x `height`, maaari nating ilarawan ang Q-Table gamit ang isang numpy array na may hugis na `width` x `height` x `len(actions)`: (code block 6)
```python
Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)
```
Pansinin na ini-initialize natin ang lahat ng mga halaga ng Q-Table sa pantay na halaga, sa ating kaso - 0.25. Ito ay tumutugma sa "random walk" policy, dahil ang lahat ng galaw sa bawat estado ay pantay na mabuti. Maaari nating ipasa ang Q-Table sa `plot` function upang i-visualize ang table sa board: `m.plot(Q)`.
Pansinin na ini-initialize natin ang lahat ng mga halaga ng Q-Table sa pantay na halaga, sa ating kaso - 0.25. Ito ay tumutugma sa polisiya ng "random walk", dahil lahat ng galaw sa bawat estado ay pantay na mabuti. Maaari nating ipasa ang Q-Table sa function na `plot` upang makita ang talahanayan sa board: `m.plot(Q)`.
![Kapaligiran ni Peter](../../../../8-Reinforcement/1-QLearning/images/env_init.png)
![Kapaligiran ni Peter](../../../../translated_images/tl/env_init.04e8f26d2d60089e.webp)
Sa gitna ng bawat cell ay may "arrow" na nagpapahiwatig ng ginustong direksyon ng paggalaw. Dahil pantay ang lahat ng direksyon, isang tuldok ang ipinapakita.
Sa gitna ng bawat cell ay mayroong isang "pana" na nagpapahiwatig ng pinaprefer na direksyon ng pagkilos. Dahil pantay-pantay ang lahat ng direksyon, isang tuldok ang ipinapakita.
Ngayon kailangan nating patakbuhin ang simulation, tuklasin ang ating kapaligiran, at matutunan ang mas mahusay na distribusyon ng mga halaga ng Q-Table, na magpapahintulot sa atin na mahanap ang landas patungo sa mansanas nang mas mabilis.
Ngayon kailangan nating patakbuhin ang simulasyon, tuklasin ang ating kapaligiran, at matutunan ang mas mahusay na distribusyon ng halaga ng Q-Table, na magpapahintulot sa atin na mabilis na mahanap ang landas patungo sa mansanas.
## Ang Esensya ng Q-Learning: Bellman Equation
## Kahulugan ng Q-Learning: Bellman Equation
Kapag nagsimula na tayong gumalaw, ang bawat aksyon ay magkakaroon ng kaukulang gantimpala, ibig sabihin maaari nating teoretikal na piliin ang susunod na aksyon batay sa pinakamataas na agarang gantimpala. Gayunpaman, sa karamihan ng mga estado, ang galaw ay hindi makakamit ang ating layunin na maabot ang mansanas, at sa gayon hindi natin agad matutukoy kung aling direksyon ang mas mabuti.
Kapag nagsimula na tayong gumalaw, ang bawat aksyon ay magkakaroon ng kaukulang gantimpala, i.e. teoritikal na maaari nating piliin ang susunod na aksyon batay sa pinakamataas na agarang gantimpala. Gayunpaman, sa karamihan ng mga estado, ang galaw ay hindi makakamit ang ating layunin na maabot ang mansanas, kaya hindi natin agarang matutukoy kung aling direksyon ang mas mahusay.
> Tandaan na hindi ang agarang resulta ang mahalaga, kundi ang panghuling resulta, na makukuha natin sa dulo ng simulation.
> Tandaan na hindi ang agarang resulta ang mahalaga, kundi ang huling resulta, na makukuha natin sa pagtatapos ng simulasyon.
Upang isaalang-alang ang naantalang gantimpala, kailangan nating gamitin ang mga prinsipyo ng **[dynamic programming](https://en.wikipedia.org/wiki/Dynamic_programming)**, na nagbibigay-daan sa atin na isipin ang ating problema nang recursive.
Upang isaalang-alang ang delayed reward na ito, kailangan nating gamitin ang mga prinsipyo ng **[dynamic programming](https://en.wikipedia.org/wiki/Dynamic_programming)**, na nagbibigay-daan sa atin na pag-isipan ang ating problema nang recursive.
Ipagpalagay na tayo ay nasa estado *s* ngayon, at nais nating lumipat sa susunod na estado *s'*. Sa paggawa nito, makakatanggap tayo ng agarang gantimpala *r(s,a)*, na tinutukoy ng reward function, kasama ang ilang hinaharap na gantimpala. Kung ipagpalagay natin na ang ating Q-Table ay tama na sumasalamin sa "kaakit-akit" ng bawat aksyon, kung gayon sa estado *s'* pipili tayo ng aksyon *a* na tumutugma sa maximum na halaga ng *Q(s',a')*. Kaya, ang pinakamahusay na posibleng hinaharap na gantimpala na maaari nating makuha sa estado *s* ay tinutukoy bilang `max`
Ipinalagay na tayo ay nasa estado *s* ngayon, at nais nating lumipat sa susunod na estado *s'*. Sa paggawa nito, makakatanggap tayo ng agarang gantimpala *r(s,a)*, na tinukoy ng reward function, kasama ng ilang gantimpala sa hinaharap. Kung ipagpapalagay nating tama ang representasyon ng ating Q-Table sa "kapakipakinabang" ng bawat aksyon, sa estado *s'* pipili tayo ng aksyon *a* na tumutugma sa maximum na halaga ng *Q(s',a')*. Kaya, ang pinakamainam na gantimpala sa hinaharap na maaari nating makuha sa estado *s* ay itutukoy bilang `max`<sub>a'</sub>*Q(s',a')* (ang maximum dito ay kinakalkula sa lahat ng posibleng aksyon *a'* sa estado *s'*).
## Pagsusuri ng polisiya
Ito ang nagbibigay ng **Bellman formula** para sa pagkalkula ng halaga ng Q-Table sa estado *s*, ibinigay ang aksyon *a*:
Dahil ang Q-Table ay naglilista ng "kaakit-akit" ng bawat aksyon sa bawat estado, madali itong gamitin upang tukuyin ang epektibong pag-navigate sa ating mundo. Sa pinakasimpleng kaso, maaari nating piliin ang aksyon na may pinakamataas na Q-Table value: (code block 9)
<img src="../../../../translated_images/tl/bellman-equation.7c0c4c722e5a6b7c.webp"/>
Dito γ ay ang tinatawag na **discount factor** na tumutukoy kung hanggang saan mo gustong pahalagahan ang kasalukuyang gantimpala kumpara sa gantimpala sa hinaharap at vice versa.
## Algorithm ng Pagkatuto
Batay sa ekwasyon sa itaas, maaari na nating isulat ang pseudo-code para sa ating learning algorithm:
* I-initialize ang Q-Table Q na may pantay-pantay na numero para sa lahat ng estado at aksyon
* Itakda ang learning rate α ← 1
* Ulitin ang simulasyon nang maraming beses
1. Magsimula sa random na posisyon
1. Ulitin
1. Pumili ng aksyon *a* sa estado *s*
2. Isagawa ang aksyon sa pamamagitan ng paglipat sa bagong estado *s'*
3. Kung makaharap tayo ng end-of-game condition, o maliit lang ang kabuuang gantimpala - lumabas sa simulasyon
4. Kalkulahin ang gantimpala *r* sa bagong estado
5. I-update ang Q-Function ayon sa Bellman equation: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ max<sub>a'</sub>Q(s',a'))*
6. *s* ← *s'*
7. I-update ang kabuuang gantimpala at bawasan ang α.
## Exploit kumpara sa explore
Sa algorithm sa itaas, hindi natin tinukoy kung paano eksaktong pipili ng aksyon sa hakbang 2.1. Kung pipili tayo ng aksyon nang random, mag-eexplore tayo nang random sa kapaligiran, at malamang na madalas tayong mamatay gayundin mag-eexplore ng mga lugar na hindi natin karaniwang pupuntahan. Isang alternatibong paraan ay ang **exploit** ng Q-Table values na alam na natin, at kaya pipiliin ang pinakamahusay na aksyon (na may mas mataas na Q-Table value) sa estado *s*. Gayunpaman, pipigilan tayo nito mula sa pag-explore ng ibang mga estado, at malamang na hindi natin mahahanap ang pinakamainam na solusyon.
Kaya, ang pinakamahusay na paraan ay magkaroon ng balanse sa pagitan ng exploration at exploitation. Magagawa ito sa pamamagitan ng pagpili ng aksyon sa estado *s* na may mga probabilidad na proporsyonal sa mga halaga sa Q-Table. Sa simula, kapag pantay-pantay ang mga halaga ng Q-Table, ito ay magiging katulad ng random na pagpili, ngunit habang mas maraming nalalaman natin tungkol sa ating kapaligiran, magiging mas malamang na sundan natin ang pinakamainam na ruta habang pinapayagan ang ahente na paminsan-minsang pumili ng hindi pa natutuklasang landas.
## Implementasyon sa Python
Handa na tayo ngayon upang ipatupad ang learning algorithm. Bago natin gawin iyon, kailangan din natin ng isang function na magko-convert ng arbitraryong mga numero sa Q-Table sa isang vector ng mga probabilidad para sa mga kaukulang aksyon.
1. Gumawa ng function na `probs()`:
```python
def probs(v,eps=1e-4):
v = v-v.min()+eps
v = v/v.sum()
return v
```
Nagdagdag tayo ng ilang `eps` sa orihinal na vector upang maiwasan ang paghahati sa 0 sa unang kaso, kung saan lahat ng bahagi ng vector ay magkapareho.
Patakbuhin ang learning algorithm sa pamamagitan ng 5000 eksperimento, na tinatawag ding **epochs**: (code block 8)
```python
for epoch in range(5000):
# Pumili ng panimulang punto
m.random_start()
# Magsimulang maglakbay
n=0
cum_reward = 0
while True:
x,y = m.human
v = probs(Q[x,y])
a = random.choices(list(actions),weights=v)[0]
dpos = actions[a]
m.move(dpos,check_correctness=False) # Pinapayagan naming lumabas ang manlalaro sa board, na nagtatapos sa episode
r = reward(m)
cum_reward += r
if r==end_reward or cum_reward < -1000:
lpath.append(n)
break
alpha = np.exp(-n / 10e5)
gamma = 0.5
ai = action_idx[a]
Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max())
n+=1
```
Pagkatapos patakbuhin ang algorithm na ito, ang Q-Table ay dapat na na-update ng mga halagang naglalarawan ng atraksyon ng iba't ibang aksyon sa bawat hakbang. Maaari nating subukang biswal na ipakita ang Q-Table sa pamamagitan ng pagplor ng vector sa bawat cell na magtuturo sa nais na direksyon ng pagkilos. Para sa kasimplehan, gumuhit tayo ng maliit na bilog imbis na arrow head.
<img src="../../../../translated_images/tl/learned.ed28bcd8484b5287.webp"/>
## Pag-check ng polisiya
Dahil ang Q-Table ay naglilista ng "kapakinabangan" ng bawat aksyon sa bawat estado, madali itong gamitin upang tukuyin ang episyenteng paglalakbay sa ating mundo. Sa pinakasimpleng kaso, maaari nating piliin ang aksyon na may pinakamataas na halaga sa Q-Table: (code block 9)
```python
def qpolicy_strict(m):
@ -198,17 +274,18 @@ def qpolicy_strict(m):
walk(m,qpolicy_strict)
```
> Kapag sinubukan mo ang code sa itaas nang ilang beses, mapapansin mo na minsan ito ay "naghahang", at kailangan mong pindutin ang STOP button sa notebook upang ihinto ito. Nangyayari ito dahil maaaring may mga sitwasyon kung saan ang dalawang estado ay "nagtuturo" sa isa't isa batay sa optimal na Q-Value, na nagreresulta sa agent na paulit-ulit na gumagalaw sa pagitan ng mga estadong iyon.
> Kung susubukan mo ang code sa itaas nang ilang ulit, maaaring mapansin mo na minsan ito ay "nahuhuli", at kailangan mong pindutin ang STOP button sa notebook upang interrupt ito. Nangyayari ito dahil maaaring may mga sitwasyon kung saan ang dalawang estado ay "nagtuturo" sa isa't isa sa terminong ng optimal na Q-Value, kung saan ang ahente ay nauuwi sa paggalaw sa pagitan ng mga estadong iyon nang walang katapusan.
## 🚀Hamunin
> **Gawain 1:** Baguhin ang `walk` function upang limitahan ang maximum na haba ng landas sa isang tiyak na bilang ng mga hakbang (halimbawa, 100), at panoorin ang code sa itaas na bumalik sa halagang ito paminsan-minsan.
> **Gawain 1:** Baguhin ang `walk` function upang limitahan ang maximum na haba ng landas sa isang tiyak na bilang ng mga hakbang (sabihin nating 100), at panoorin ang code sa itaas na ibalik ang halagang ito paminsan-minsan.
> **Gawain 2:** Baguhin ang `walk` function upang hindi ito bumalik sa mga lugar na napuntahan na nito dati. Maiiwasan nito ang `walk` na mag-loop, ngunit maaari pa ring ma-"trap" ang agent sa isang lokasyon na hindi nito matakasan.
> **Gawain 2:** Baguhin ang `walk` function upang hindi ito bumalik sa mga lugar kung saan ito ay nakapunta na dati. Mapipigilan nito ang `walk` na paulit-ulit, ngunit maaari pa rin ang ahente na "mapitik" sa isang lokasyon kung saan hindi ito makakatakas.
## Pag-navigate
## Navigasyon
Mas magandang polisiya sa pag-navigate ang ginamit natin noong training, na pinagsasama ang exploitation at exploration. Sa polisiya na ito, pipiliin natin ang bawat aksyon na may tiyak na probabilidad, na proporsyonal sa mga halaga sa Q-Table. Ang estratehiyang ito ay maaaring magresulta pa rin sa agent na bumalik sa posisyon na napuntahan na nito, ngunit, tulad ng makikita mo sa code sa ibaba, nagreresulta ito sa napakaikling average na landas patungo sa nais na lokasyon (tandaan na ang `print_statistics` ay nagpapatakbo ng simulation nang 100 beses): (code block 10)
Ang mas mabuting patakaran sa navigasyon ay ang ginamit natin sa panahon ng pagsasanay, na pinagsasama ang exploitation at exploration. Sa patakarang ito, pipili tayo ng bawat aksyon na may tiyak na probabilidad, na proporsyonal sa mga halaga sa Q-Table. Ang estrategiyang ito ay maaari pa ring magresulta sa pagbabalik ng ahente sa isang posisyon na kanyang nasiyasat na, ngunit, tulad ng makikita mo sa code sa ibaba, nagreresulta ito sa napakaikling karaniwang landas patungo sa nais na lokasyon (tandaan na ang `print_statistics` ay nagpapatakbo ng simulation nang 100 beses): (code block 10)
```python
def qpolicy(m):
@ -222,26 +299,30 @@ print_statistics(qpolicy)
Pagkatapos patakbuhin ang code na ito, dapat kang makakuha ng mas maliit na average na haba ng landas kaysa dati, sa saklaw na 3-6.
## Pagsisiyasat sa proseso ng pag-aaral
## Pagsusuri sa proseso ng pagkatuto
Tulad ng nabanggit namin, ang proseso ng pagkatuto ay isang balanse sa pagitan ng exploration at exploitation ng nalinang na kaalaman tungkol sa estruktura ng espasyo ng problema. Nakita natin na ang mga resulta ng pagkatuto (ang kakayahan na tulungan ang isang ahente na makahanap ng maikling landas patungo sa layunin) ay bumuti, ngunit kawili-wili ring obserbahan kung paano kumikilos ang average na haba ng landas sa panahon ng proseso ng pagkatuto:
Tulad ng nabanggit, ang proseso ng pag-aaral ay balanse sa pagitan ng exploration at paggamit ng nakuha nang kaalaman tungkol sa istruktura ng problem space. Nakita natin na ang resulta ng pag-aaral (ang kakayahang tulungan ang agent na makahanap ng maikling landas patungo sa layunin) ay bumuti, ngunit interesante ring obserbahan kung paano nagbabago ang average na haba ng landas sa panahon ng proseso ng pag-aaral:
<img src="../../../../translated_images/tl/lpathlen1.0534784add58d4eb.webp"/>
## Mga natutunan
Ang mga natutunan ay maaaring ibuod bilang:
- **Tumataas ang average na haba ng landas**. Sa simula, ang average na haba ng landas ay tumataas. Malamang ito ay dahil kapag wala tayong alam tungkol sa kapaligiran, mas malamang na ma-trap tayo sa masamang estado, tulad ng tubig o lobo. Habang natututo tayo at nagsisimulang gamitin ang kaalamang ito, mas matagal nating ma-explore ang kapaligiran, ngunit hindi pa rin natin alam nang maayos kung nasaan ang mga mansanas.
- **Tumataas ang average na haba ng landas**. Nakikita natin dito na sa simula, tumataas ang average na haba ng landas. Marahil ito ay dahil kapag wala tayong alam tungkol sa kapaligiran, malamang na maipit tayo sa mga hindi magandang estado, tubig o lobo. Habang natututo tayo nang higit pa at nagsisimulang gamitin ang kaalamang ito, maaari nating tuklasin ang kapaligiran nang mas matagal, ngunit hindi pa rin natin masyadong alam kung saan ang mga mansanas.
- **Bumaba ang haba ng landas habang natututo**. Kapag sapat na ang natutunan, mas madali para sa agent na maabot ang layunin, at nagsisimulang bumaba ang haba ng landas. Gayunpaman, bukas pa rin tayo sa exploration, kaya madalas tayong lumihis mula sa pinakamahusay na landas at mag-explore ng mga bagong opsyon, na nagpapahaba sa landas kaysa sa optimal.
- **Bumababa ang haba ng landas, habang mas natututo tayo**. Kapag natututo na tayo nang sapat, mas madali para sa ahente na marating ang layunin, at nagsisimulang bumaba ang haba ng landas. Gayunpaman, bukas pa rin tayo sa exploration, kaya madalas tayong lumalayo sa pinakamahusay na landas, at sumusubok ng mga bagong opsyon, na nagpapahaba ng landas kaysa optimal.
- **Biglang tumataas ang haba**. Mapapansin din natin sa graph na sa isang punto, biglang tumataas ang haba. Ipinapakita nito ang stochastic na kalikasan ng proseso, at na maaari nating "masira" ang mga coefficient ng Q-Table sa pamamagitan ng pag-overwrite ng mga ito ng mga bagong halaga. Dapat itong mabawasan sa pamamagitan ng pagpapababa ng learning rate (halimbawa, sa pagtatapos ng training, ina-adjust lang natin ang mga halaga ng Q-Table nang kaunti).
- **Biglang tumataas ang haba**. Napapansin din natin sa grap na ito na sa ilang punto, biglang tumaas ang haba. Ito ay nagpapahiwatig ng stochastic na katangian ng proseso, at na maaari nating "masira" ang mga coefficient ng Q-Table sa ilang punto sa pamamagitan ng pagsulat ng mga ito gamit ang mga bagong halaga. Dapat itong mabawasan sa pamamagitan ng pagbaba ng learning rate (halimbawa, sa pagtatapos ng pagsasanay, binabago lang natin ang mga halaga ng Q-Table sa maliit na halaga).
Sa kabuuan, mahalagang tandaan na ang tagumpay at kalidad ng proseso ng pag-aaral ay malaki ang nakadepende sa mga parameter, tulad ng learning rate, learning rate decay, at discount factor. Ang mga ito ay madalas tawaging **hyperparameters**, upang maiba sa **parameters**, na ina-optimize natin sa panahon ng training (halimbawa, mga coefficient ng Q-Table). Ang proseso ng paghahanap ng pinakamahusay na halaga ng hyperparameters ay tinatawag na **hyperparameter optimization**, at ito ay karapat-dapat sa hiwalay na paksa.
Sa pangkalahatan, mahalagang tandaan na ang tagumpay at kalidad ng proseso ng pagkatuto ay malaki ang nakasalalay sa mga parameter, gaya ng learning rate, learning rate decay, at discount factor. Karaniwang tinatawag ang mga ito na **hyperparameters**, upang maiba ito sa mga **parameters**, na ina-optimize natin sa panahon ng pagsasanay (halimbawa, mga coefficient ng Q-Table). Ang proseso ng paghahanap ng pinakamagandang halaga ng hyperparameter ay tinatawag na **hyperparameter optimization**, at ito ay nararapat ng hiwalay na paksa.
## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## Takdang-Aralin
[A Mas Realistikong Mundo](assignment.md)
## Takdang Aralin
[Isang Mas Realistikong Mundo](assignment.md)
---
**Paunawa**:
Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Pagtatanggi**:
Ang dokumentong ito ay isinalin gamit ang serbisyo ng AI translation na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't nagsusumikap kami para sa katumpakan, pakatandaan na ang awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na pangunahing sanggunian. Para sa mahahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang maling pagkakaintindi o maling interpretasyon na nagmula sa paggamit ng pagsasaling ito.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,14 +1,34 @@
## Mga Paunang Kaalaman
# CartPole Skating
Sa araling ito, gagamit tayo ng library na tinatawag na **OpenAI Gym** upang mag-simulate ng iba't ibang **kapaligiran**. Maaari mong patakbuhin ang code ng araling ito nang lokal (halimbawa, mula sa Visual Studio Code), kung saan magbubukas ang simulation sa isang bagong window. Kapag pinapatakbo ang code online, maaaring kailanganin mong gumawa ng ilang pagbabago sa code, tulad ng inilarawan [dito](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7).
Ang problemang tinutugunan natin sa nakaraang aralin ay maaaring parang larong laro lamang, hindi talaga naaangkop sa mga totoong sitwasyon sa buhay. Ngunit hindi ito ang kaso, dahil maraming totoong problema sa mundo ang may katulad na sitwasyon - kabilang ang paglalaro ng Chess o Go. Magkakatulad sila, dahil mayroon din tayong board na may mga itinakdang patakaran at isang **diskretong estado**.
## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## Panimula
Sa araling ito ay gagamitin natin ang parehong mga prinsipyo ng Q-Learning sa isang problemang may **tuloy-tuloy na estado**, ibig sabihin, ang estado ay ibinibigay ng isa o higit pang mga totoong numero. Tututukan natin ang sumusunod na problema:
> **Problema**: Kung nais ni Peter na makatakas mula sa lobo, kailangan niyang makagalaw nang mas mabilis. Makikita natin kung paano matututo si Peter na mag-skate, partikular, kung paano mapanatili ang balanse, gamit ang Q-Learning.
![The great escape!](../../../../translated_images/tl/escape.18862db9930337e3.webp)
> Nagiging malikhain si Peter at ang kanyang mga kaibigan para makatakas sa lobo! Larawan mula kay [Jen Looper](https://twitter.com/jenlooper)
Gagamit tayo ng isang pinaikling bersyon ng pagbalanse na kilala bilang **CartPole** problema. Sa mundo ng cartpole, mayroon tayong pahalang na slider na maaaring ilipat pakaliwa o pakanan, at ang layunin ay balansehin ang isang patayong poste sa ibabaw ng slider.
<img alt="a cartpole" src="../../../../translated_images/tl/cartpole.b5609cc0494a14f7.webp" width="200"/>
## Mga Kinakailangan
Sa araling ito, gagamit tayo ng isang library na tinatawag na **OpenAI Gym** upang simulahin ang iba't ibang **kapaligiran**. Maaari mong patakbuhin ang code ng araling ito nang lokal (hal., mula sa Visual Studio Code), kung saan ang simulation ay magbubukas sa bagong bintana. Kapag tumakbo ang code online, maaaring kailangan mong gumawa ng ilang pagbabago sa code, gaya ng nakasaad [dito](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7).
## OpenAI Gym
Sa nakaraang aralin, ang mga patakaran ng laro at ang estado ay ibinigay ng `Board` class na tayo mismo ang nagtakda. Dito, gagamit tayo ng isang espesyal na **simulation environment**, na magsi-simulate ng pisika sa likod ng balancing pole. Isa sa mga pinakasikat na simulation environment para sa pagsasanay ng reinforcement learning algorithms ay tinatawag na [Gym](https://gym.openai.com/), na pinapanatili ng [OpenAI](https://openai.com/). Sa pamamagitan ng paggamit ng gym na ito, maaari tayong lumikha ng iba't ibang **kapaligiran** mula sa cartpole simulation hanggang sa mga laro ng Atari.
Sa nakaraang aralin, ang mga patakaran ng laro at ang estado ay ibinigay ng `Board` na klase na ating inilagay. Dito gagamit tayo ng isang espesyal na **simulation environment**, na magsisimula ng pisika sa likod ng balanse ng poste. Isa sa mga pinakasikat na simulation environment para sa pagsasanay ng mga reinforcement learning algorithm ay tinatawag na [Gym](https://gym.openai.com/), na pinangangasiwaan ng [OpenAI](https://openai.com/). Sa pamamagitan ng paggamit ng gym na ito, maaari tayong gumawa ng iba't ibang **kapaligiran** mula sa simulation ng cartpole hanggang sa mga larong Atari.
> **Note**: Makikita mo ang iba pang mga kapaligiran na available mula sa OpenAI Gym [dito](https://gym.openai.com/envs/#classic_control).
> **Tandaan**: Maaari mong makita ang iba pang mga kapaligiran mula sa OpenAI Gym [dito](https://gym.openai.com/envs/#classic_control).
Una, mag-install ng gym at i-import ang mga kinakailangang library (code block 1):
Una, i-install natin ang gym at i-import ang mga kinakailangang library (code block 1):
```python
import sys
@ -20,15 +40,15 @@ import numpy as np
import random
```
## Ehersisyo - I-initialize ang isang cartpole environment
## Ehersisyo - i-initialize ang cartpole environment
Upang magtrabaho sa problema ng cartpole balancing, kailangan nating i-initialize ang kaukulang kapaligiran. Ang bawat kapaligiran ay nauugnay sa:
Para magtrabaho sa problemang pagbalanse ng cartpole, kailangan nating i-initialize ang kaukulang environment. Ang bawat environment ay may kaugnayan sa isang:
- **Observation space** na tumutukoy sa istruktura ng impormasyon na natatanggap natin mula sa kapaligiran. Para sa problema ng cartpole, natatanggap natin ang posisyon ng pole, bilis, at ilang iba pang mga halaga.
- **Observation space** na nagtutukoy ng istruktura ng impormasyong natatanggap natin mula sa environment. Sa cartpole na problema, natatanggap natin ang posisyon ng poste, bilis, at ilan pang mga halaga.
- **Action space** na tumutukoy sa mga posibleng aksyon. Sa ating kaso, ang action space ay discrete, at binubuo ng dalawang aksyon - **kaliwa** at **kanan**. (code block 2)
- **Action space** na nagtutukoy ng mga posibleng aksyon. Sa ating kaso, ang action space ay discrete, at binubuo ng dalawang aksyon - **kaliwa** at **kanan**. (code block 2)
1. Upang mag-initialize, i-type ang sumusunod na code:
1. Para i-initialize, i-type ang sumusunod na code:
```python
env = gym.make("CartPole-v1")
@ -37,11 +57,11 @@ Upang magtrabaho sa problema ng cartpole balancing, kailangan nating i-initializ
print(env.action_space.sample())
```
Upang makita kung paano gumagana ang kapaligiran, magpatakbo ng maikling simulation para sa 100 hakbang. Sa bawat hakbang, nagbibigay tayo ng isa sa mga aksyon na gagawin - sa simulation na ito, random lang nating pinipili ang isang aksyon mula sa `action_space`.
Para makita kung paano gumagana ang environment, patakbuhin natin ang isang maikling simulation na may 100 hakbang. Sa bawat hakbang, magbibigay tayo ng isa sa mga aksyon na gagawin - sa simulation na ito ay pipili lamang tayo nang random ng aksyon mula sa `action_space`.
1. Patakbuhin ang code sa ibaba at tingnan kung ano ang resulta.
1. Patakbuhin ang code sa ibaba at tingnan kung ano ang mangyayari.
✅ Tandaan na mas mainam na patakbuhin ang code na ito sa lokal na Python installation! (code block 3)
✅ Tandaan na mas mainam patakbuhin ang code na ito sa lokal na pag-install ng Python! (code block 3)
```python
env.reset()
@ -52,11 +72,11 @@ Upang makita kung paano gumagana ang kapaligiran, magpatakbo ng maikling simulat
env.close()
```
Dapat kang makakita ng isang bagay na katulad ng larawang ito:
Makikita mo ng halos ganito ang imahe:
![non-balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif)
1. Sa panahon ng simulation, kailangan nating makuha ang mga obserbasyon upang magpasya kung paano kumilos. Sa katunayan, ang step function ay nagbabalik ng kasalukuyang obserbasyon, isang reward function, at ang done flag na nagpapahiwatig kung may saysay pa bang ipagpatuloy ang simulation o hindi: (code block 4)
1. Sa panahon ng simulation, kailangan natin kumuha ng mga obserbasyon upang makapagdesisyon kung paano kumilos. Sa katunayan, ang step function ay nagbabalik ng kasalukuyang mga obserbasyon, isang reward function, at ang done flag na nagsasaad kung may saysay pa ba na ipagpatuloy ang simulation o hindi: (code block 4)
```python
env.reset()
@ -69,7 +89,7 @@ Upang makita kung paano gumagana ang kapaligiran, magpatakbo ng maikling simulat
env.close()
```
Makakakita ka ng isang bagay na ganito sa output ng notebook:
Makikita mo ito sa output ng notebook na ganito:
```text
[ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0
@ -85,40 +105,40 @@ Upang makita kung paano gumagana ang kapaligiran, magpatakbo ng maikling simulat
Ang observation vector na ibinabalik sa bawat hakbang ng simulation ay naglalaman ng mga sumusunod na halaga:
- Posisyon ng cart
- Bilis ng cart
- Anggulo ng pole
- Bilis ng pag-ikot ng pole
- Anggulo ng poste
- Bilis ng pag-ikot ng poste
1. Kunin ang minimum at maximum na halaga ng mga numerong ito: (code block 5)
1. Kunin ang pinakamababa at pinakamataas na halaga ng mga numerong iyon: (code block 5)
```python
print(env.observation_space.low)
print(env.observation_space.high)
```
Mapapansin mo rin na ang reward value sa bawat hakbang ng simulation ay palaging 1. Ito ay dahil ang ating layunin ay mabuhay nang mas matagal hangga't maaari, ibig sabihin, panatilihin ang pole sa isang makatwirang patayong posisyon sa pinakamahabang panahon.
Mapapansin mo rin na ang reward na halaga sa bawat hakbang ng simulation ay palaging 1. Ito ay dahil ang ating layunin ay mabuhay nang pinakamatagal, ibig sabihin, panatilihin ang poste sa makatwirang patayong posisyon sa pinakamahabang panahon.
✅ Sa katunayan, ang CartPole simulation ay itinuturing na nalutas kung makakakuha tayo ng average reward na 195 sa loob ng 100 sunod-sunod na pagsubok.
✅ Sa katunayan, ang CartPole simulation ay itinuturing na nalutas kung makakakuha tayo ng average reward na 195 sa loob ng 100 magkasunod na pagsubok.
## State Discretization
## Pagdiskreto ng Estado
Sa Q-Learning, kailangan nating bumuo ng Q-Table na tumutukoy kung ano ang gagawin sa bawat estado. Upang magawa ito, kailangan ang estado ay **discreet**, mas partikular, dapat itong maglaman ng limitadong bilang ng mga discrete na halaga. Kaya, kailangan nating **i-discretize** ang ating mga obserbasyon, i-map ang mga ito sa isang limitadong set ng mga estado.
Sa Q-Learning, kailangan nating bumuo ng Q-Table na nagtutukoy kung ano ang gagawin sa bawat estado. Upang magawa ito, kailangan nating gawing **diskreto** ang estado, mas partikular, dapat itong magkaroon ng hangganang bilang ng mga diskretong halaga. Kaya, kailangan nating **i-diskreto** ang ating mga obserbasyon, inilalapat ito sa isang hangganang hanay ng mga estado.
May ilang paraan upang magawa ito:
May ilang paraan para gawin ito:
- **Hatiin sa mga bins**. Kung alam natin ang interval ng isang tiyak na halaga, maaari nating hatiin ang interval na ito sa isang bilang ng **bins**, at pagkatapos ay palitan ang halaga ng numero ng bin kung saan ito kabilang. Magagawa ito gamit ang numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) method. Sa kasong ito, tiyak nating malalaman ang laki ng estado, dahil ito ay depende sa bilang ng bins na pinili natin para sa digitalization.
- **Hatiin sa mga bins**. Kung alam natin ang pagitan ng isang partikular na halaga, maaari nating hatiin ang pagitan na ito sa ilang bilang ng mga **bins**, at pagkatapos ay palitan ang halaga ng bilang ng bin kung saan ito kabilang. Maaari itong gawin gamit ang numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) na paraan. Sa ganitong kaso, eksaktong malalaman natin ang laki ng estado, dahil ito ay nakasalalay sa bilang ng mga bin na pinili natin para sa digitalization.
✅ Maaari tayong gumamit ng linear interpolation upang dalhin ang mga halaga sa isang limitadong interval (halimbawa, mula -20 hanggang 20), at pagkatapos ay i-convert ang mga numero sa integers sa pamamagitan ng pag-round. Nagbibigay ito sa atin ng kaunting kontrol sa laki ng estado, lalo na kung hindi natin alam ang eksaktong saklaw ng mga input na halaga. Halimbawa, sa ating kaso, 2 sa 4 na halaga ay walang upper/lower bounds sa kanilang mga halaga, na maaaring magresulta sa walang katapusang bilang ng mga estado.
✅ Maaari tayong gumamit ng linear interpolation upang ilagay ang mga halaga sa isang hangganang pagitan (halimbawa, mula -20 hanggang 20), at pagkatapos ay gawing integer ang mga numero sa pamamagitan ng pag-round. Nagbibigay ito ng kaunting mas kaunting kontrol sa laki ng estado, lalo na kung hindi natin alam ang eksaktong saklaw ng mga input na halaga. Halimbawa, sa ating kaso, 2 sa 4 na halaga ay walang mga itinatakdang itaas/ibabang hangganan ng mga halaga, na maaaring magresulta sa walang katapusang bilang ng mga estado.
Sa ating halimbawa, gagamitin natin ang pangalawang paraan. Tulad ng mapapansin mo mamaya, sa kabila ng hindi tinukoy na upper/lower bounds, ang mga halagang iyon ay bihirang kumuha ng mga halaga sa labas ng ilang limitadong interval, kaya ang mga estado na may matinding halaga ay magiging napakabihira.
Sa ating halimbawa, pipiliin natin ang pangalawang paraan. Tulad ng mapapansin mo mamaya, sa kabila ng hindi itinatakdang mga itaas/ibabang hangganan, bihira lamang kuhanin ng mga halagang iyon ang mga halaga sa labas ng tiyak na mga hangganang interval, kaya ang mga estado na may matinding mga halaga ay magiging bihira.
1. Narito ang function na kukuha ng obserbasyon mula sa ating modelo at magpo-produce ng tuple ng 4 na integer na halaga: (code block 6)
1. Narito ang function na tatanggap ng obserbasyon mula sa ating modelo at gagawa ng tuple ng 4 na integer na halaga: (code block 6)
```python
def discretize(x):
return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int))
```
1. Tuklasin din natin ang isa pang paraan ng discretization gamit ang bins: (code block 7)
1. Tuklasin natin ang isa pang paraan ng pagdiskreto gamit ang mga bins: (code block 7)
```python
def create_bins(i,num):
@ -126,39 +146,39 @@ Sa ating halimbawa, gagamitin natin ang pangalawang paraan. Tulad ng mapapansin
print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
nbins = [20,20,10,10] # number of bins for each parameter
ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # mga pagitan ng mga halaga para sa bawat parametro
nbins = [20,20,10,10] # bilang ng mga lalagyan para sa bawat parametro
bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
def discretize_bins(x):
return tuple(np.digitize(x[i],bins[i]) for i in range(4))
```
1. Ngayon, magpatakbo ng maikling simulation at obserbahan ang mga discrete na halaga ng kapaligiran. Subukan ang parehong `discretize` at `discretize_bins` at tingnan kung may pagkakaiba.
1. Patakbuhin natin ngayon ang isang maikling simulation at obserbahan ang mga diskretong halaga ng environment. Subukan mo ang pareho `discretize` at `discretize_bins` at tingnan kung may pagkakaiba.
✅ Ang `discretize_bins` ay nagbabalik ng numero ng bin, na 0-based. Kaya para sa mga halaga ng input variable sa paligid ng 0, nagbabalik ito ng numero mula sa gitna ng interval (10). Sa `discretize`, hindi natin inalagaan ang saklaw ng mga output na halaga, na pinapayagan silang maging negatibo, kaya ang mga halaga ng estado ay hindi na-shift, at ang 0 ay tumutugma sa 0. (code block 8)
✅ Ang discretize_bins ay nagbabalik ng bilang ng bin, na 0-based. Kaya para sa mga halaga ng input variable na malapit sa 0, ibinabalik nito ang numero mula sa gitna ng interval (10). Sa discretize, hindi natin pinansin ang saklaw ng output values, kaya maaari itong maging negatibo, kaya ang mga estado ay hindi na-shift, at ang 0 ay tumutugma sa 0. (code block 8)
```python
env.reset()
done = False
while not done:
#env.render()
#ipakita.env()
obs, rew, done, info = env.step(env.action_space.sample())
#print(discretize_bins(obs))
#print(paghati_hati_bins(obs))
print(discretize(obs))
env.close()
```
✅ I-uncomment ang linya na nagsisimula sa env.render kung nais mong makita kung paano isinasagawa ang kapaligiran. Kung hindi, maaari mo itong isagawa sa background, na mas mabilis. Gagamitin natin ang "invisible" na pagpapatupad na ito sa panahon ng ating Q-Learning process.
✅ I-uncomment ang linya na nagsisimula sa env.render kung gusto mong makita kung paano gumagana ang environment. Kung hindi, maaari mo itong patakbuhin sa background, na mas mabilis. Gagamitin natin ang "invisible" na pagpapatakbo na ito sa ating proseso ng Q-Learning.
## Ang Istruktura ng Q-Table
## Ang istruktura ng Q-Table
Sa nakaraang aralin, ang estado ay isang simpleng pares ng mga numero mula 0 hanggang 8, kaya't maginhawa itong i-represent ang Q-Table gamit ang isang numpy tensor na may hugis na 8x8x2. Kung gagamit tayo ng bins discretization, ang laki ng ating state vector ay kilala rin, kaya maaari nating gamitin ang parehong paraan at i-represent ang estado gamit ang isang array na may hugis na 20x20x10x10x2 (dito ang 2 ay ang dimensyon ng action space, at ang mga unang dimensyon ay tumutugma sa bilang ng bins na pinili natin para sa bawat parameter sa observation space).
Sa nakaraang aralin, ang estado ay isang simpleng pares ng numero mula 0 hanggang 8, kaya naging madali na i-representa ang Q-Table bilang isang numpy tensor na may hugis na 8x8x2. Kung gagamit tayo ng bins discretization, ang laki ng ating state vector ay kilala rin, kaya maaari nating gamitin ang parehong pamamaraang ito at i-representa ang estado bilang isang array ng hugis 20x20x10x10x2 (dito, ang 2 ay dimensyon ng action space, at ang mga pangunahing dimensyon ay tumutukoy sa bilang ng mga bin na pinili nating gamitin para sa bawat parameter sa observation space).
Gayunpaman, kung minsan ang eksaktong dimensyon ng observation space ay hindi alam. Sa kaso ng `discretize` function, maaaring hindi tayo sigurado na ang ating estado ay nananatili sa loob ng ilang limitasyon, dahil ang ilan sa mga orihinal na halaga ay hindi bound. Kaya, gagamit tayo ng bahagyang naiibang paraan at i-represent ang Q-Table gamit ang isang dictionary.
Gayunpaman, minsan hindi alam ang tumpak na dimensyon ng observation space. Sa kaso ng `discretize` na function, maaaring hindi tayo sigurado na ang ating estado ay mananatili sa loob ng ilang limitasyon, dahil ang ilan sa mga orihinal na halaga ay walang hangganan. Kaya, gagamit tayo ng ibang pamamaraan at i-representa ang Q-Table bilang isang diksyunaryo.
1. Gamitin ang pares *(state,action)* bilang key ng dictionary, at ang value ay tumutugma sa Q-Table entry value. (code block 9)
1. Gamitin ang pares na *(state, action)* bilang susi ng diksyunaryo, at ang halaga ay magiging kaugnay na Q-Table entry. (code block 9)
```python
Q = {}
@ -168,38 +188,38 @@ Gayunpaman, kung minsan ang eksaktong dimensyon ng observation space ay hindi al
return [Q.get((state,a),0) for a in actions]
```
Dito, nagde-define din tayo ng function na `qvalues()`, na nagbabalik ng listahan ng mga Q-Table value para sa isang ibinigay na estado na tumutugma sa lahat ng posibleng aksyon. Kung ang entry ay wala sa Q-Table, magbabalik tayo ng 0 bilang default.
Dito rin tayo nagtatakda ng function na `qvalues()`, na nagbabalik ng listahan ng mga halaga ng Q-Table para sa isang ibinigay na estado na tumutugma sa lahat ng posibleng mga aksyon. Kapag wala ang entry sa Q-Table, magbabalik tayo ng 0 bilang default.
## Simulan ang Q-Learning
## Simulan natin ang Q-Learning
Ngayon, handa na tayong turuan si Peter na magbalanse!
Handa na tayong turuan si Peter na magbalanse!
1. Una, mag-set ng ilang hyperparameters: (code block 10)
1. Una, itakda natin ang ilang hyperparameters: (code block 10)
```python
# hyperparameters
# mga hyperparameter
alpha = 0.3
gamma = 0.9
epsilon = 0.90
```
Dito, ang `alpha` ay ang **learning rate** na tumutukoy kung hanggang saan natin dapat i-adjust ang kasalukuyang mga halaga ng Q-Table sa bawat hakbang. Sa nakaraang aralin, nagsimula tayo sa 1, at pagkatapos ay binawasan ang `alpha` sa mas mababang mga halaga sa panahon ng pagsasanay. Sa halimbawang ito, panatilihin natin itong constant para sa pagiging simple, at maaari kang mag-eksperimento sa pag-adjust ng mga halaga ng `alpha` sa ibang pagkakataon.
Dito, ang `alpha` ay ang **learning rate** na nagtutukoy kung hanggang saan natin dapat baguhin ang kasalukuyang mga halaga ng Q-Table sa bawat hakbang. Sa nakaraang aralin nagsimula tayo sa 1, at pagkatapos ay unti-unting binawasan ang `alpha` habang ang pagsasanay ay nagpapatuloy. Sa halimbawa na ito, panatilihin natin itong constant para sa pagiging simple, at maaari kang mag-eksperimento sa pag-adjust ng mga halaga ng `alpha` mamaya.
Ang `gamma` ay ang **discount factor** na nagpapakita kung hanggang saan natin dapat bigyang-priyoridad ang hinaharap na reward kaysa sa kasalukuyang reward.
Ang `gamma` ay ang **discount factor** na nagpapakita kung hanggang kailan natin priyoridadin ang hinaharap na reward kaysa sa kasalukuyang reward.
Ang `epsilon` ay ang **exploration/exploitation factor** na tumutukoy kung dapat nating paboran ang exploration kaysa sa exploitation o vice versa. Sa ating algorithm, sa `epsilon` na porsyento ng mga kaso, pipiliin natin ang susunod na aksyon ayon sa mga halaga ng Q-Table, at sa natitirang bilang ng mga kaso, magsasagawa tayo ng random na aksyon. Papayagan tayo nitong galugarin ang mga bahagi ng search space na hindi pa natin nakikita.
Ang `epsilon` ay ang **exploration/exploitation factor** na tumutukoy kung mas gusto natin ang exploration kaysa exploitation o kabaligtaran. Sa ating algorithm, sa `epsilon` porsyento ng mga kaso ay pipili tayo ng susunod na aksyon ayon sa mga halaga ng Q-Table, at sa natitirang mga kaso ay magsasagawa tayo ng random na aksyon. Pinapayagan tayo nitong tuklasin ang mga bahagi ng search space na hindi pa natin nasusubukan.
✅ Sa usapin ng pagbalanse - ang pagpili ng random na aksyon (exploration) ay kikilos bilang isang random na suntok sa maling direksyon, at ang pole ay kailangang matutong bumawi ng balanse mula sa mga "pagkakamali" na iyon.
✅ Sa konteksto ng pagbalanse - ang pagpili ng random na aksyon (exploration) ay magsisilbing isang random na palo sa maling direksyon, at kailangang matuto ang poste kung paano ibalik ang balanse mula sa mga "pagkakamaling" iyon.
### Pagbutihin ang Algorithm
### Pagbutihin ang algorithm
Maaari rin nating gawin ang dalawang pagpapabuti sa ating algorithm mula sa nakaraang aralin:
- **Kalkulahin ang average cumulative reward**, sa loob ng ilang simulation. Ipi-print natin ang progreso bawat 5000 iterations, at i-average natin ang ating cumulative reward sa panahong iyon. Nangangahulugan ito na kung makakakuha tayo ng higit sa 195 puntos - maaari nating ituring na nalutas ang problema, na may mas mataas na kalidad kaysa sa kinakailangan.
- **Kalkulahin ang average cumulative reward**, sa isang bilang ng mga simulation. Ipi-print natin ang progreso bawat 5000 na iterasyon, at aaralin ang average ng ating cumulative reward sa loob ng panahong iyon. Nangangahulugan ito na kung makakakuha tayo ng higit sa 195 na puntos - maaari nating ituring na nalutas ang problema, na may mas mataas na kalidad kaysa sa kinakailangan.
- **Kalkulahin ang maximum average cumulative result**, `Qmax`, at i-store natin ang Q-Table na tumutugma sa resulta na iyon. Kapag pinatakbo mo ang training, mapapansin mo na minsan ang average cumulative result ay nagsisimulang bumaba, at gusto nating panatilihin ang mga halaga ng Q-Table na tumutugma sa pinakamahusay na modelo na naobserbahan sa panahon ng pagsasanay.
- **Kalkulahin ang maximum average cumulative result**, `Qmax`, at itatago natin ang Q-Table na tumutugma sa resulta na iyon. Kapag pinatakbo mo ang training mapapansin mo na minsan ang average cumulative result ay nagsisimulang bumaba, kaya nais nating panatilihin ang mga halaga ng Q-Table na tumutukoy sa pinakamahusay na modelong naobserbahan sa panahon ng pagsasanay.
1. Kolektahin ang lahat ng cumulative rewards sa bawat simulation sa `rewards` vector para sa karagdagang pag-plot. (code block 11)
1. Kolektahin lahat ng cumulative rewards sa bawat simulation sa `rewards` vector para sa susunod na pag-plot. (code block 11)
```python
def probs(v,eps=1e-4):
@ -214,15 +234,15 @@ Maaari rin nating gawin ang dalawang pagpapabuti sa ating algorithm mula sa naka
obs = env.reset()
done = False
cum_reward=0
# == do the simulation ==
# == gawin ang simulasyon ==
while not done:
s = discretize(obs)
if random.random()<epsilon:
# exploitation - chose the action according to Q-Table probabilities
# pagsasamantala - piliin ang aksyon ayon sa mga posibilidad ng Q-Table
v = probs(np.array(qvalues(s)))
a = random.choices(actions,weights=v)[0]
else:
# exploration - randomly chose the action
# paggalugad - pumili ng aksyon nang random
a = np.random.randint(env.action_space.n)
obs, rew, done, info = env.step(a)
@ -231,7 +251,7 @@ Maaari rin nating gawin ang dalawang pagpapabuti sa ating algorithm mula sa naka
Q[(s,a)] = (1 - alpha) * Q.get((s,a),0) + alpha * (rew + gamma * max(qvalues(ns)))
cum_rewards.append(cum_reward)
rewards.append(cum_reward)
# == Periodically print results and calculate average reward ==
# == Panandaliang iprint ang mga resulta at kalkulahin ang average na gantimpala ==
if epoch%5000==0:
print(f"{epoch}: {np.average(cum_rewards)}, alpha={alpha}, epsilon={epsilon}")
if np.average(cum_rewards) > Qmax:
@ -242,23 +262,23 @@ Maaari rin nating gawin ang dalawang pagpapabuti sa ating algorithm mula sa naka
Ano ang maaaring mapansin mula sa mga resulta:
- **Malapit sa ating layunin**. Napakalapit na natin sa pagkamit ng layunin na makakuha ng 195 cumulative rewards sa loob ng 100+ sunod-sunod na pagtakbo ng simulation, o maaaring naabot na natin ito! Kahit na makakuha tayo ng mas maliit na mga numero, hindi pa rin natin alam, dahil nag-a-average tayo sa loob ng 5000 pagtakbo, at 100 pagtakbo lamang ang kinakailangan sa pormal na pamantayan.
- **Malapit sa ating layunin**. Malapit na tayong maabot ang layuning makakuha ng 195 cumulative rewards sa loob ng higit sa 100 magkasunod na pagtakbo ng simulation, o maaaring nakamit na natin ito! Kahit pa makakuha tayo ng mas maliit na mga numero, hindi pa natin tiyak, dahil ang average ay kinuwenta sa 5000 na pagtakbo, at 100 lamang ang kinakailangan sa pormal na pamantayan.
- **Reward nagsisimulang bumaba**. Minsan ang reward ay nagsisimulang bumaba, na nangangahulugan na maaari nating "sirain" ang mga natutunang halaga sa Q-Table gamit ang mga bago na nagpapalala sa sitwasyon.
- **Nagsisimulang bumaba ang reward**. Minsan nagsisimulang bumaba ang reward, na nangangahulugang maaari nating "sirain" ang mga natutunan nang mga halaga sa Q-Table gamit ang iba na nagpapalala ng sitwasyon.
Ang obserbasyong ito ay mas malinaw na makikita kung i-plot natin ang progreso ng pagsasanay.
Mas malinaw na mapapansin ito kung ipi-plot natin ang progreso ng training.
## Pag-plot ng Progreso ng Pagsasanay
Sa panahon ng pagsasanay, nakolekta natin ang cumulative reward value sa bawat iteration sa `rewards` vector. Ganito ang hitsura nito kapag na-plot laban sa iteration number:
Sa panahon ng pagsasanay, nakolekta natin ang halaga ng cumulative reward sa bawat iterasyon sa loob ng `rewards` vector. Ganito ang hitsura kapag ipini-plot ito laban sa bilang ng iterasyon:
```python
plt.plot(rewards)
```
![raw progress](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png)
![raw progress](../../../../translated_images/tl/train_progress_raw.2adfdf2daea09c59.webp)
Mula sa graph na ito, hindi posible na masabi ang anumang bagay, dahil sa likas na katangian ng stochastic training process, ang haba ng mga session ng pagsasanay ay lubos na nag-iiba. Upang mas magkaroon ng kahulugan ang graph na ito, maaari nating kalkulahin ang **running average** sa isang serye ng mga eksperimento, sabihin nating 100. Magagawa ito nang maginhawa gamit ang `np.convolve`: (code block 12)
Mula sa grap na ito, hindi posible na malaman ang anumang bagay, dahil dulot ng kalikasan ng stochastic training process, ang haba ng mga session ng training ay napakahaba ang pagkakaiba. Para magkaroon ng mas malinaw na pagkakaintindi sa grap, maaari nating kalkulahin ang **running average** sa serye ng mga eksperimento, sabihin natin 100. Maaari itong gawin nang madaling gamit ang `np.convolve`: (code block 12)
```python
def running_average(x,window):
@ -267,21 +287,24 @@ def running_average(x,window):
plt.plot(running_average(rewards,100))
```
![training progress](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png)
![training progress](../../../../translated_images/tl/train_progress_runav.c71694a8fa9ab359.webp)
## Pagbabago ng hyperparameters
Para gawing mas matatag ang pagkatuto, makatuwiran na i-adjust ang ilan sa ating mga hyperparameters habang nagpapatuloy ang pagsasanay. Partikular:
- **Para sa learning rate**, `alpha`, maaari tayong magsimula sa mga halagang malapit sa 1, at pagkatapos ay unti-unting babaan ang parametro. Sa paglipas ng panahon, magkakaroon tayo ng magagandang probabilidad sa Q-Table, kaya dapat natin itong i-adjust nang bahagya, at huwag ganap na palitan ng mga bagong halaga.
## Pag-iiba ng Hyperparameters
- **Dagdagan ang epsilon**. Maaaring gusto nating unti-unting dagdagan ang `epsilon`, upang mas konti ang exploration at mas marami ang exploitation. Mukhang makatuwiran na magsimula sa mababang halaga ng `epsilon`, at unti-unting itaas ito hanggang halos 1.
Upang gawing mas matatag ang pag-aaral, makatuwiran na i-adjust ang ilan sa ating mga hyperparameters sa panahon ng pagsasanay. Partikular:
> **Gawain 1**: Maglaro sa mga halaga ng hyperparameter at tingnan kung makakamit mo ang mas mataas na cumulative reward. Nakukuha mo ba ang higit sa 195?
- **Para sa learning rate**, `alpha`, maaari tayong magsimula sa mga halaga na malapit sa 1, at pagkatapos ay patuloy na bawasan ang parameter. Sa paglipas ng panahon, makakakuha tayo ng magagandang probability values sa Q-Table, kaya't dapat nating i-adjust ang mga ito nang bahagya, at hindi ganap na i-overwrite gamit ang mga bagong halaga.
- **Dagdagan ang epsilon**. Maaaring gusto nating unti-unting taasan ang `epsilon`, upang mas kaunti ang pag-explore at mas marami ang pag-exploit. Malamang na makatuwiran na magsimula sa mas mababang halaga ng `epsilon`, at pataasin ito hanggang halos 1.
> **Gawain 1**: Subukan ang iba't ibang halaga ng hyperparameter at tingnan kung makakamit mo ang mas mataas na kabuuang gantimpala. Nakakakuha ka ba ng higit sa 195?
> **Task 2**: Upang pormal na malutas ang problema, kailangan mong makakuha ng 195 average na gantimpala sa loob ng 100 magkakasunod na takbo. Sukatin ito habang nagsasanay at tiyaking pormal mong nalutas ang problema!
> **Gawain 2**: Upang pormal na malutas ang problema, kailangan mong makakuha ng average na gantimpala na 195 sa loob ng 100 sunod-sunod na pagsubok. Sukatin iyon habang nagsasanay at tiyaking pormal mo nang nalutas ang problema!
## Pagtingin sa resulta sa aksyon
## Makita ang resulta sa aksyon
Magiging interesante na makita kung paano kumikilos ang na-train na modelo. Patakbuhin natin ang simulation at sundin ang parehong estratehiya sa pagpili ng aksyon tulad ng ginawa sa training, gamit ang sampling ayon sa probability distribution sa Q-Table: (code block 13)
Magiging kawili-wili na talagang makita kung paano kumikilos ang sinanay na modelo. Patakbuhin natin ang simulasyon at sundin ang parehong estratehiya ng pagpili ng aksyon gaya ng sa panahon ng pagsasanay, sampling ayon sa probability distribution sa Q-Table: (code block 13)
```python
obs = env.reset()
@ -295,30 +318,32 @@ while not done:
env.close()
```
Makikita mo ang ganito:
Dapat kang makakita ng isang bagay na tulad nito:
![isang balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
![a balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif)
---
## 🚀Hamunin
> **Task 3**: Dito, ginamit natin ang huling kopya ng Q-Table, na maaaring hindi ang pinakamainam. Tandaan na iniimbak natin ang pinakamahusay na Q-Table sa `Qbest` na variable! Subukan ang parehong halimbawa gamit ang pinakamahusay na Q-Table sa pamamagitan ng pagkopya ng `Qbest` papunta sa `Q` at tingnan kung mapapansin mo ang pagkakaiba.
> **Gawain 3**: Dito, ginagamit natin ang huling kopya ng Q-Table, na maaaring hindi ang pinakamainam. Tandaan na itinatago natin ang pinakamagandang gumaganang Q-Table sa variable na `Qbest`! Subukan ang parehong halimbawa gamit ang pinakamagandang gumaganang Q-Table sa pamamagitan ng pagkopya ng `Qbest` papunta sa `Q` at tingnan kung mapapansin mo ang pagkakaiba.
> **Task 4**: Dito, hindi natin pinipili ang pinakamahusay na aksyon sa bawat hakbang, kundi nagsa-sample tayo gamit ang kaukulang probability distribution. Mas makatuwiran ba na palaging piliin ang pinakamahusay na aksyon, na may pinakamataas na halaga sa Q-Table? Magagawa ito gamit ang `np.argmax` na function upang malaman ang numero ng aksyon na may pinakamataas na halaga sa Q-Table. Ipatupad ang estratehiyang ito at tingnan kung mas mapapabuti ang balancing.
> **Gawain 4**: Dito, hindi tayo pumipili ng pinakamainam na aksyon sa bawat hakbang, kundi sampling ayon sa katumbas na probability distribution. Mas makatuwiran ba na palaging piliin ang pinakamainam na aksyon, na may pinakamataas na halaga sa Q-Table? Maaaring gawin ito gamit ang `np.argmax` na function para malaman ang numero ng aksyon na may pinakamataas na halaga sa Q-Table. Ipatupad ang estratehiyang ito at tingnan kung napapabuti nito ang pagbalanse.
## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/)
## Takdang-Aralin
## Takdang Aralin
[Sanayin ang Mountain Car](assignment.md)
## Konklusyon
Natutunan na natin kung paano sanayin ang mga ahente upang makamit ang magagandang resulta sa pamamagitan lamang ng pagbibigay sa kanila ng reward function na nagtatakda ng nais na estado ng laro, at pagbibigay sa kanila ng pagkakataong matalinong mag-explore sa search space. Matagumpay nating naipatupad ang Q-Learning algorithm sa mga kaso ng discrete at continuous na environment, ngunit may discrete na mga aksyon.
Natutunan na natin ngayon kung paano sanayin ang mga ahente upang makamit ang magagandang resulta sa pamamagitan lamang ng pagbibigay sa kanila ng reward function na naglalarawan ng ninanais na estado ng laro, at sa pagbibigay ng pagkakataon sa kanila na matalinhagang tuklasin ang search space. Matagumpay nating naipinatupad ang Q-Learning algorithm sa mga kaso ng discrete at continuous na mga kapaligiran, pero may discrete na mga aksyon.
Mahalaga ring pag-aralan ang mga sitwasyon kung saan ang estado ng aksyon ay tuloy-tuloy, at kapag ang observation space ay mas kumplikado, tulad ng imahe mula sa screen ng Atari game. Sa mga ganitong problema, madalas nating kailangang gumamit ng mas makapangyarihang mga teknik sa machine learning, tulad ng neural networks, upang makamit ang magagandang resulta. Ang mga mas advanced na paksa na ito ang magiging laman ng ating susunod na mas advanced na kurso sa AI.
Mahalaga ring pag-aralan ang mga sitwasyon kung saan ang action state ay continuous din, at kung ang observation space ay mas kumplikado, gaya ng imahe mula sa screen ng laro sa Atari. Sa mga problemang iyon, madalas nating kailanganing gumamit ng mas makapangyarihang mga teknik sa machine learning, gaya ng neural networks, upang makamit ang magagandang resulta. Ang mga mas advanced na paksa na iyon ay bahagi ng ating paparating na mas advanced na kurso sa AI.
---
**Paunawa**:
Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Pagtatanggi**:
Ang dokumentong ito ay isinalin gamit ang serbisyo ng AI translation na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't nagsusumikap kami para sa katumpakan, pakatandaan na ang awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na pangunahing sanggunian. Para sa mahahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang maling pagkakaintindi o maling interpretasyon na nagmula sa paggamit ng pagsasaling ito.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
Loading…
Cancel
Save