chore(i18n): sync translations with latest source changes (chunk 1/1, 4 changes)

pull/974/head
localizeflow[bot] 2 months ago
parent d177b6f2d8
commit 35dbfd7b5e

@ -36,8 +36,8 @@
"language_code": "km"
},
"1-Introduction/4-techniques-of-ML/README.md": {
"original_hash": "9d91f3af3758fdd4569fb410575995ef",
"translation_date": "2026-04-06T18:16:52+00:00",
"original_hash": "84b1715a6be62ef1697351dcc5d7b567",
"translation_date": "2026-04-26T19:38:59+00:00",
"source_file": "1-Introduction/4-techniques-of-ML/README.md",
"language_code": "km"
},
@ -120,8 +120,8 @@
"language_code": "km"
},
"2-Regression/3-Linear/README.md": {
"original_hash": "26c53a922f1f1e8542b0ea41ff52221a",
"translation_date": "2026-04-20T18:00:58+00:00",
"original_hash": "8b776e731c35b171d316d01d0e7b1369",
"translation_date": "2026-04-26T19:38:14+00:00",
"source_file": "2-Regression/3-Linear/README.md",
"language_code": "km"
},
@ -150,8 +150,8 @@
"language_code": "km"
},
"2-Regression/3-Linear/solution/notebook.ipynb": {
"original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
"translation_date": "2026-04-06T19:06:48+00:00",
"original_hash": "6781223ffbe8cfdaa38d0200f08e1288",
"translation_date": "2026-04-26T19:37:05+00:00",
"source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
"language_code": "km"
},

@ -1,125 +1,127 @@
# បច្ចេកទេសនៃការរៀនម៉ាស៊ីន
ដំណើរការនៃការបង្កើត ប្រើប្រាស់ និងថែទាំម៉ូដែលការរៀនម៉ាស៊ីន និងទិន្នន័យដែលពួកវា ប្រើប្រាស់ គឺជាប្រភេទដំណើរការផ្សេងពីច្រើនដំណើរការអភិវឌ្ឍន៍ផ្សេងទៀត។ ក្នុងមេរៀននេះ យើងនឹងបំបែកអាថ៍កំបាំងនៃដំណើរការនេះ ហើយលើកសញ្ញាផ្នែកបច្ចេកទេសសំខាន់ៗដែលអ្នកត្រូវដឹង។ អ្នកនឹង៖
ដំណើរការនៃការសាងសង់ ការប្រើប្រាស់ និងការថែរក្សាគំរូរៀនម៉ាស៊ីន និងទិន្នន័យដែលពួកវាប្រើ គឺជាដំណើរការផ្សេងលើសពីវឌ្ឍនកម្មផ្សេងទៀតជាច្រើន។ នៅក្នុងមេរៀននេះ យើង​អាចអះអាងពីដំណើរការនេះ និងរៀបរាប់បច្ចេកទេសសំខាន់ៗដែលអ្នកត្រូវយល់ដឹង។ អ្នកនឹង៖
- យល់ដឹងអំពីដំណើរការដែលគាំទ្រ ក្រោមកម្រិតខ្ពស់នៃការរៀនម៉ាស៊ីន
- សិក្សាពីគំនិតមូលដ្ឋានដូចជា 'ម៉ូដែល' 'ការព្យាករណ៍' និង 'ទិន្នន័យបណ្តុះបណ្តាល'។
- យល់ដឹងពីដំណើរការដែលគាំទ្រដល់ការរៀនម៉ាស៊ីននៅកម្រិតខ្ពស់
- ស្វែងយល់អំពីគំនិតមូលដ្ឋានដូចជា 'គំរូ', 'ការព្យាករណ៍' និង 'ទិន្នន័យបណ្តុះបណ្តាល'។
## [សំនួរត្រួតពិនិត្យមុនមេរៀន](https://ff-quizzes.netlify.app/en/ml/)
## [ប្រលងមុនមេរៀន](https://ff-quizzes.netlify.app/en/ml/)
[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning")
> 🎥 ចុចរូបភាពខាងលើសម្រាប់វីដេអូខ្លីមួយនៃការប្រតិបត្តិមេរៀននេះ។
> 🎥 ចុចរូបភាពខាងលើសម្រាប់វីដេអូខ្លីមួយអំពីការងារក្នុងមេរៀននេះ។
## ការណែនាំ
## បទដំបូន្មាន
នៅកម្រិតខ្ពស់ សិប្បកម្មនៃការបង្កើតដំណើរការរៀនម៉ាស៊ីន (ML) ត្រូវបានបង្កប់ដោយជំហានច្រើន៖
នៅកម្រិតខ្ពស់ សិល្បៈនៃការបង្កើតដំណើរការ​រៀនម៉ាស៊ីន (ML) មានជំហានជាច្រើន៖
1. **សម្រេចចិត្តលើសំណួរ**។ ដំណើរការរៀនម៉ាស៊ីនភាគច្រើនចាប់ផ្តើមដើមដោយការសួរសំណួរដែលមិនអាចឆ្លើយតបដោយកម្មវិធីមានលក្ខខណ្ឌឬប្រព័ន្ធច្បាប់មួយ។ សំណួរទាំងនេះភាគច្រើនមានទំនាក់ទំនងនឹងការព្យាករណ៍ដែលផ្អែកលើយោគន័យទិន្នន័យមួយ។
2. **រក្សាទិន្នន័យ និងរៀបចំទិន្នន័យ**។ ដើម្បីឆ្លើយសំណួររបស់អ្នក អ្នកត្រូវការទិន្នន័យ។ គុណភាព និងពេលខ្លះ បរិមាណទិន្នន័យរបស់អ្នកនឹងកំណត់ថាតើអ្នកអាចឆ្លើយសំណួរដើមបានល្អប៉ុណ្ណា។ ការមើលឃើញទិន្នន័យជារូបភាពគឺជាផ្នែកសំខាន់នៃជំហាននេះ។ ជំហាននេះរួមមានការបែងចែកទិន្នន័យទៅក្រុមបណ្តុះបណ្តាល និងតេស្ត ដើម្បីបង្កើតម៉ូដែល
3. **ជ្រើសរើសវិធីសាស្ត្របណ្តុះបណ្តាល**។ អាស្រ័យលើសំណួររបស់អ្នក និងធម្មជាតិទិន្នន័យ អ្នកត្រូវជ្រើសរើសរបៀបដែលអ្នកចង់បណ្តុះបណ្តាលម៉ូដែល ដើម្បីប្រតិបត្តិរូបភាពទិន្នន័យរបស់អ្នកឱ្យបានល្អបំផុត និងធ្វើការព្យាករណ៍បានត្រឹមត្រូវ។ នេះជាផ្នែកនៃដំណើរការរៀនម៉ាស៊ីនដែលទាមទារជំនាញជាក់លាក់ និងជាផ្នែកច្រើននៃការសាកល្បងយ៉ាងច្រើន។
4. **បណ្តុះបណ្តាលម៉ូដែល**។ ប្រើប្រាស់ទិន្នន័យបណ្តុះបណ្តាលរបស់អ្នក អ្នកនឹងប្រើលេខាធិការកម្មវិធីនានាដើម្បីបណ្តុះបណ្តាលម៉ូដែល ដើម្បីស្គាល់លំនាំក្នុងទិន្នន័យ។ ម៉ូដែលអាចប្រើប្រាស់ទំងន់ផ្ទៃក្នុងដែលអាចប្តូរបាន ដើម្បីផ្តល់តម្លៃល្អជាងសម្រាប់ផ្នែកជាក់លាក់នៃទិន្នន័យ ដោយមានគោលបំណងបង្កើតម៉ូដែលល្អប្រសើរជាងមុន។
5. **វាយតម្លៃម៉ូដែល**។ អ្នកប្រើទិន្នន័យដែលមិនដែលបានមើលមុន (ទិន្នន័យតេស្ត) ពីប្រភពទិន្នន័យដែលបានប្រមូល ដើម្បីមើលម៉ូដែលបញ្ចេញសមិទ្ធផលយ៉ាងដូចម្តេច។
6. **ែតម្រូវប៉ារ៉ាម៉ែត្រ**។ យោងទៅលើសមត្ថភាពរបស់ម៉ូដែល អ្នកអាចធ្វើពន្លឿនដំណើរការឡើងវិញដោយប្រើប៉ារ៉ាម៉ែត្រ ឬអថេរដែលគ្រប់គ្រងអវកាសនៃលេខាធិការ ដែលបានប្រើបណ្តុះបណ្តាលម៉ូដែល
7. **ព្យាករណ៍**។ ប្រើបញ្ចូលថ្មីដើម្បីសាកល្បងភាពត្រឹមត្រូវរបស់ម៉ូដែលអ្នក។
1. **សម្រេចចិត្តលើសំណួរ**។ ដំណើរការរៀនម៉ាស៊ីនភាគច្រើនចាប់ផ្តើមដោយសំណួរដែលមិនអាចឆ្លើយបានដោយកម្មវិធីលក្ខខណ្ឌឬវិស្វកម្មបែបច្បាប់។ សំណួរទាំងនេះវិលជុំជារឿងការព្យាករណ៍បន្ទាប់ពីមានការប្រមូលទិន្នន័យមួយ។
2. **ប្រមូល និងរៀបចំទិន្នន័យ**។ ដើម្បីឆ្លើយសំណួររបស់អ្នក អ្នកត្រូវការទិន្នន័យ។ គុណភាព និងមុខងាររបស់ទិន្នន័យ រឺបរិមាណវា នឹងកំណត់ថាអ្នកអាចឆ្លើយសំណួរដំបូងបានល្អប៉ុណ្ណា។ ការបង្ហាញទិន្នន័យជារូបភាពគឺជាជំហានសំខាន់មួយនៅដំណាក់កាលនេះ។ ជំហាននេះរួមមានការបំបែកទិន្នន័យជាក្រុមបណ្តុះបណ្តាល និងសាកល្បងសម្រាប់បង្កើតគំរូ
3. **ជ្រើសរើសវិធីសាស្រ្តបណ្តុះបណ្តាល**។ អាស្រ័យលើសំណួររបស់អ្នក និងធម្មជាតិនៃទិន្នន័យ អ្នកត្រូវជ្រើសរើសរបៀបបណ្តុះបណ្តាលគំរូឲ្យសម្រួល និងបង្ហាញការព្យាករណ៍បានត្រឹមត្រូវ។ នេះជាផ្នែកដែលត្រូវការជំនាញពិសេស និងភាគច្រើនតម្រូវឲ្យមានការប្រកាសតេស្តជាច្រើន។
4. **បណ្តុះបណ្តាលគំរូ**។ ប្រើទិន្នន័យបណ្តុះបណ្តាល អ្នកនឹងប្រើអាល់ហ្គូនិចផ្សេងៗដើម្បីបណ្តុះបណ្តាលគំរូឲ្យស្គាល់លំនាំនៅក្នុងទិន្នន័យ។ គំរូអាចប្រើទំងន់ផ្ទៃក្នុងដែលអាចកែប្រែដើម្បីផ្តល់អាទិភាពចំពោះផ្នែកជាក់លាក់នៃទិន្នន័យសម្រាប់បង្កើតគំរូល្អជាងមុន។
5. **វាយតម្លៃគំរូ**។ អ្នកប្រើទិន្នន័យមិនដែលឃើញមុន (ទិន្នន័យសាកល្បង) ពីក្រុមទិន្នន័យដែលបានប្រមូលដើម្បីពិនិត្យមើលថាគំរូបង្ហាញការប្រតិបត្តិការយ៉ាងដូចម្តេច។
6. **ំណត់ប៉ារ៉ាម៉ែត្រ**។ អាស្រ័យលើការប្រតិបត្តិរបស់គំរូ អ្នកអាចធ្វើវិធីវិញដោយប្រើប៉ារ៉ាម៉ែត្រ ឬអថេរ ផ្លាស់ប្តូរយ៉ាងមួយដែលគ្រប់គ្រងការប្រតិបត្តិនៃអាល់ហ្គូរីធម៍សម្រាប់បណ្តុះបណ្តាលគំរូ
7. **ការព្យាករណ៍**។ ប្រើinputថ្មីៗសម្រាប់សាកល្បងភាពត្រឹមត្រូវនៃគំរូរបស់អ្នក។
## តើត្រូវសួរសំណួរអ្វី
## ត្រូវសួរសំណួរអ្វី
កុំព្យូទ័រមានជំនាញពិសេសក្នុងការរកឃើញលំនាំលាក់ក្នុងទិន្នន័យ។ អត្ថប្រយោជន៍នេះមានប្រយោជន៍សម្រាប់អ្នកស្រាវជ្រាវដែលមានសំណួរអំពីដែនដីមួយដែលមិនអាចឆ្លើយបានងាយដោយបង្កើតប្រព័ន្ធកំណត់លក្ខខ័ណ្ឌបែបច្បាប់។ ឧទាហរណ៍ ក្នុងភារកិច្ចអាគុយស្ត្រី ព័ត៌មានវិទ្យាទិន្នន័យថែមតម្រូវអាចបង្កើតច្បាប់ដូចគេច្នៃប្រឌិតអំពីភាពស្លាប់របស់អ្នកបារីប្រៀបធៀបនឹងអ្នកមិនបារី
កុំព្យូទ័រមានជំនាញពិសេសក្នុងការរកឃើញលំនាំលាក់នៅក្នុងទិន្នន័យ។ ប្រយោជន៍នេះមានសារៈសំខាន់សម្រាប់អ្នកស្រាវជ្រាវដែលមានសំណួរអំពីដែនកំណត់មួយដែលមិនអាចឆ្លើយបានដោយបង្កើតវិស្វកម្មច្បាប់លក្ខខណ្ឌឧបត្ថម្ភ
យ៉ាងไรก็ตามពេលបញ្ចូលអថេរច្រើនផ្សេងទៀតចូលក្នុងសមីការ ម៉ូដែល ML អាចមានប្រសិទ្ធភាពជាងក្នុងការព្យាករណ៍អត្រាស្លាប់អនាគតដោយផ្អែកលើប្រវត្តិសុខភាពចាស់ៗ។ ឧទាហរណ៍មួយដែលរីករាយជាងគេអាចជាការធ្វើការព្យាករណ៍អាកាសធាតុសម្រាប់ខែមេសា ក្នុងទីតាំងណាមួយដោយផ្អែកលើទិន្នន័យដែលរួមមានទិសដៅអាកាសធាតុ អំពីជាន់ទីតាំង, ផ្លាស់ប្តូរអាកាសធាតុ, ភាពជិតសមុទ្រ, លំនាំឯកសារចរណ៍ខ្យល់ និងច្រើនទៀត
ឧទាហរណ៍ក្នុងដំណោះស្រាយអចលនវាយនភណ្ឌ អ្នកវិទ្យាសាស្ត្រទិន្នន័យអាចបង្កើតច្បាប់ដេរដោយដៃអំពីអត្រាស្លាប់របស់អ្នកជក់បារីដោយប្រៀបធៀបនឹងអ្នកមិនជក់បារី
✅ ស្លាយឯកសារនេះ [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) ពីម៉ូដែលអាកាសធាតុផ្ដល់ចំណុចមើលប្រវត្តិវិទ្យាសម្រាប់ការប្រើ ML ក្នុងការវិភាគអាកាសធាតុ
ពេលដែលអថេរច្រើនផ្សេងទៀតត្រូវបានដាក់ចូលក្នុងសមីការនោះ គំរូ ML អាចបង្ហាញបានប្រសើរជាងក្នុងការព្យាករណ៍អត្រាស្លាប់អនាគតដោយផ្អែកលើប្រវត្តិរឿងសុខភាពកន្លងមក។ ឧទាហរណ៍សប្បាយរីករាយជាងគឺការព្យាករណ៍អាកាសធាតុនៃខែមេសានៅទីតាំងណាមួយ ដោយផ្អែកលើទិន្នន័យរួមបញ្ចូលខ្សែរយៈទទឹង, បណ្តោយ, ប្រែប្រួលអាកាសធាតុ, ការរីកជិតសមុទ្រ, រលកភ្លៀងធំ, និងផ្សេងៗទៀត
## ភារកិច្ចមុនការបង្កើត
✅ ស្លាយនេះ [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) អំពីគំរូអាកាសធាតុផ្តល់ទស្សនៈប្រវត្តិសាស្ត្រ​ក្នុងការប្រើប្រាស់ ML ក្នុងវិភាគអាកាសធាតុ។
មុននឹងចាប់ផ្តើមបង្កើតម៉ូដែលរបស់អ្នក មានភារកិច្ចជាច្រើនដែលអ្នកត្រូវបញ្ចប់។ ដើម្បីសាកល្បងសំណួររបស់អ្នក និងបង្កើតសំនឹមយោងតាមការព្យាករណ៍របស់ម៉ូដែល អ្នកត្រូវកំណត់ និងកំណត់រចនាសម្ព័ន្ធធាតុជាច្រើន។
## ការងារមុនសង់គំរូ
មុនចាប់ផ្តើមសាងសង់គំរូរបស់អ្នក មានបំណងការងារច្រើនដែលអ្នកត្រូវបញ្ចប់។ ដើម្បីសាកល្បងសំណួររបស់អ្នក និងបង្កើតទ្រឹស្តីលើការព្យាករណ៍នៃគំរូ អ្នកត្រូវកំណត់ និងកំណត់រចនាសម្ព័ន្ធធាតុខ្លះៗ។
### ទិន្នន័យ
ដើម្បីឆ្លើយសំណួររបស់អ្នកដោយប្រាកដ អ្នកត្រូវការទិន្នន័យច្រើនមានប្រភេទត្រឹមត្រូវ។ មានពីររឿងដែលអ្នកត្រូវធ្វើនៅឆ្នាំនេះ៖
ដើម្បីឆ្លើយសំណួររបស់អ្នកដោយមានភាពច្បាស់លាស់ អ្នកត្រូវមានទិន្នន័យចំនួនមួយដែលមានប្រភេទត្រឹមត្រូវ។ មានរឿងពីរអ្វីដែល អ្នកត្រូវធ្វើនៅពេលនេះ៖
- **ប្រមូលទិន្នន័យ**។ ការចងចាំមេរៀនមុនអំពីកិច្ចភាពយុត្តិធម៌ក្នុងការវិភាគទិន្នន័យ ចូរប្រមូលទិន្នន័យដោយប្រុងប្រយត្ន៍។ ត្រូវយល់ដឹងពីប្រភពទិន្នន័យនេះ ការបង្វិលបម្រែបម្រួលរបស់វា និងចុះបញ្ជីប្រភពដើម
- **រៀបចំទិន្នន័យ**។ មានជំហានជាច្រើនក្នុងដំណើរការរៀបចំទិន្នន័យ។ អ្នកអាចត្រូវដាក់ទិន្នន័យជាបន្ទាត់ និង normalize វាបើវាមកពីប្រភពផ្សេងៗ។ អ្នកអាចបង្កើនគុណភាព និងបរិមាណទិន្នន័យតាមវិធីផ្សេងៗ ដូចជាការបម្លែងខ្សែអក្សរទៅជាចំនួន (ដូចដែលយើងធ្វើក្នុង [Clustering](../../5-Clustering/1-Visualize/README.md))។ អ្នកអាចបង្កើតទិន្នន័យថ្មីពីមួលដើមបាន (ដូចដែលយើងធ្វើក្នុង [Classification](../../4-Classification/1-Introduction/README.md))។ អ្នកអាចសំអាតនិងកែប្រែទិន្នន័យ (ដូចដែលយើងនឹងធ្វើមុនមេរៀន [Web App](../../3-Web-App/README.md))។ បន្ថែមពីនេះ អ្នកអាចត្រូវ randomized និង shuffle វា តាមវិធីសាស្រ្តបណ្តុះបណ្តាលរបស់អ្នក។
- **ប្រមូលទិន្នន័យ**។ ពោលពាក្យបន្ទាប់ពីមេរៀនមុនអំពីក្របខ័ណ្ឌនៃភាពមិនមានភាពធានាគូប្រជែង ក្នុងការវិភាគទិន្នន័យ ចូរប្រមូលទិន្នន័យរបស់អ្នកយ៉ាងប្រុងប្រយ័ត្ន។ ចាំបាច់ត្រូវយល់ពីប្រភពទិន្នន័យ នឹងអំពើលើកលែងពាក់ព័ន្ធលើវា និងសរសេរមកដើមវា
- **រៀបចំទិន្នន័យ**។ មានបញ្ហាច្រើនក្នុងដំណើរការរៀបចំទិន្នន័យ។ អ្នកអាចត្រូវប្រមូលផ្តុំទិន្នន័យ និងធ្វើការធម្មតាប្រសិនបើវាដាច់គ្នាពីប្រភពផ្សេងៗគ្នា។ អ្នកអាចបង្កើនគុណភាព និងបរិមាណទិន្នន័យដោយវិធីជាច្រើនដូចជាការបម្លែងអក្សរទៅជាលេខ (ដូចនៅក្នុង [Clustering](../../5-Clustering/1-Visualize/README.md))។ អ្នកអាចបង្កើតទិន្នន័យថ្មីពីទិន្នន័យដើម (ដូចនៅក្នុង [Classification](../../4-Classification/1-Introduction/README.md))។ អ្នកអាចសម្អាត និងកែសម្រួលទិន្នន័យ (ដូចដែលយើងនឹងធ្វើមុនមេរៀន [Web App](../../3-Web-App/README.md))។ យ៉ាងបញ្ចប់ អ្នកអាចត្រូវការតម្រៀបចៃដន្យ និងបម្លែងវា ដោយអាស្រ័យលើបច្ចេកទេសបណ្តុះបណ្តាលរបស់អ្នក។
✅ បន្ទាប់ពីប្រមូល និងដំណើរការទិន្នន័យរបស់អ្នក សូមចំណាយពេលមើលថាទម្រង់របស់វា អាចឱ្យអ្នកដោះស្រាយសំណួរត្រូវបានមែនទេ។ អាចជាករណីដែលទិន្នន័យមិនអាចធ្វើបានល្អក្នុងភារកិច្ចរបស់អ្នក ដូចដែលយើងបានរកឃើញក្នុងមេរៀន [Clustering](../../5-Clustering/1-Visualize/README.md)។
✅ បន្ទាប់ពីប្រមូល និងដំណើរការទិន្នន័យរួច សូមចំណាយពេលមួយសម្រាប់ពិនិត្យមើលថារូបរាងទិន្នន័យនឹងអាចបញ្ចេញចម្លើយសំណួររបស់អ្នកបានរឺទេ។ ប្រហែលជាទិន្នន័យមិនអាចដំណើរការបានល្អសម្រាប់កិច្ចការដែលអ្នកដាក់ជាក់លាក់ ដូចដែលយើងបានរកឃើញនៅក្នុងមេរៀន [Clustering](../../5-Clustering/1-Visualize/README.md)។
### លក្ខណៈពិសេស និងគោលដៅ
### លក្ខណៈ និងគោលដៅ
[លក្ខណៈពិសេស](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) គឺជាសម្បត្តិនៃទិន្នន័យដែលអាចវាស់បាន។ នៅក្នុងតារាងទិន្នន័យជាច្រើនវាត្រូវបានបង្ហាញជាថ្មើរឈ្មោះជួរដេកដូចជា 'កាលបរិច្ឆេទ' 'ទំហំ' ឬ 'ពណ៌'។ អថេរលក្ខណៈពិសេសរបស់អ្នក ដែលភាគច្រើនតំណាងដោយ `X` នៅក្នុងកូដ តំណាងឱ្យអថេរបញ្ចូលដែលនឹងត្រូវប្រើសម្រាប់បណ្តុះបណ្តាលម៉ូដែល
[លក្ខណៈ](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) គឺជាគុណលក្ខណៈដែលអាចវាស់បាននៃទិន្នន័យរបស់អ្នក។ ក្នុងមុខងារទិន្នន័យជាច្រើន វាត្រូវបានបង្ហាញនៅជា​ភាសាស៊ុម​ថា 'ថ្ងៃ' 'ទំហំ' ឬ 'ពណ៌'។ អថេរលក្ខណៈរបស់អ្នក ធ្វើតំណាងជាទូទៅជា `X` ក្នុងកូដ ដែលជាការបញ្ចូលដែលនៅក្នុងការបណ្តុះបណ្តាលគំរូ
គោលដៅគឺជារឿងដែលអ្នកកំពុងព្យាករណ៍។ គោលដៅត្រូវបានតំណាងជាធម្មតា `y` នៅក្នុងកូដ ដើម្បីបង្ហាញចំលើយចំពោះសំណួរដែលអ្នកកំពុងសួរអំពីទិន្នន័យ៖ នៅខែធ្នូ ការពណ៌អំពៅណាដែលមានតម្លៃទាបបំផុត? នៅទីក្រុង San Francisco តំបន់ណាដែលមានតម្លៃអចលនទ្រព្យល្អបំផុត? ពេលខ្លះគោលដៅត្រូវបានហៅថា 'label attribute' ផងដែរ
គោលដៅគឺជារឿងដែលអ្នកកំពុងព្យាករ។ គោលដៅ ធ្វើតំណាងជា `y` នៅក្នុងកូដ ដែលជាចម្លើយសម្រាប់សំណួរដែលអ្នកកំពុងសួរពីទិន្នន័យ៖ ក្នុងខែធ្នូ តើ​ **ពណ៌** ទំពាំងបាយជ្រលក់ណាដែលថោកជាងគេ? នៅសានហ្វ្រង់ស៊ីស្កូ តើតំបន់ណាដែលមាន **តម្លៃ**អចលនទ្រព្យល្អបំផុត? ម្តងម្កាល គោលដៅក៏ត្រូវបានហៅថាជាលេខ​សម្គាល់
### ជ្រើសរើសអថេរលក្ខណៈពិសេសរបស់អ្នក
### ជ្រើសរើសអថេរលក្ខណៈរបស់អ្នក
🎓 **ការជ្រើសរើសលក្ខណៈពិសេស និងការបញ្ចេញលក្ខណៈពិសេស** តើធ្លាប់ដឹងរបៀបជ្រើសអថេរណាមួយក្នុងការបង្កើតម៉ូដែលរបស់អ្នក? ប្រហែលជាអ្នកនឹងត្រូវប្រើវិធីសាស្ត្រជ្រើសរើសលក្ខណៈពិសេស ឬបញ្ចេញលក្ខណៈពិសេស ដើម្បីជ្រើសអថេរដែលត្រឹមត្រូវសម្រាប់ម៉ូដែលមានសមត្ថភាពខ្ពស់បំផុត។ ទាំងពីរបានខុសគ្នា៖ "ការបញ្ចេញលក្ខណៈពិសេសបង្កើតលក្ខណៈថ្មីពីមុខងារ​របស់លក្ខណៈដើម ខណៈពេលការជ្រើសរើសលក្ខណៈពិសេសបង្វិលបញ្ចេញជាសំណុំពីលក្ខណៈសញ្ញា" ([ប្រភព](https://wikipedia.org/wiki/Feature_selection))
🎓 **ការជ្រើសរើសលក្ខណៈ និងការដកស្រង់លក្ខណៈ** តើយើងដឹងយ៉ាងដូចម្តេចថាអថេរណាមួយដែលគួរជ្រើសចាប់ផ្តើមនៅពេលសាងសង់គំរូ? អ្នកប្រហែលជាត្រូវធ្វើដំណើរការជ្រើសរើសលក្ខណៈឬដកស្រង់លក្ខណៈដើម្បីជ្រើសយកអថេរដែលត្រឹមត្រូវសម្រាប់គំរូមានប្រសិទ្ធភាពបំផុត។ ទាំងពីរមានភាពខុសគ្នា៖ "ការដកស្រង់លក្ខណៈបង្កើតលក្ខណៈថ្មីពីមុខងារនៃលក្ខណៈដើម ខណៈដែលការជ្រើសរើសលក្ខណៈសង្ស័យតែផ្នែកមួយនៃលក្ខណៈទាំងមូល។" ([ប្រភព](https://wikipedia.org/wiki/Feature_selection))
### មើលឃើញទិន្នន័យរបស់អ្នក
### សម្រង់ទិន្នន័យរបស់អ្នកជារូបភាព
ផ្នែកសំខាន់មួយនៃឧបករណ៍អ្នកវិទ្យាសាស្ត្រទិន្នន័យគឺមានសមត្ថភាពក្នុងការមើលឃើញទិន្នន័យ ដោយប្រើបណ្ណាល័យល្អៗជាច្រើនដូចជា Seaborn ឬ MatPlotLib។ ការតំណាងទិន្នន័យជារូបភាព អាចអនុញ្ញាតឱ្យអ្នករកឃើញទំនាក់ទំនងលាក់ៗដែលអាចប្រើប្រាស់បាន។ ការមើលឃើញរបស់អ្នកអាចជួយរកឃើញការបង្វិលបម្រែបម្រួល ឬទិន្នន័យមិនត្រូវតម្រូវ (ដូចដែលយើងរកឃើញក្នុង [Classification](../../4-Classification/2-Classifiers-1/README.md))។
មុខងារសំខាន់មួយ​របស់ឧបករណ៍អ្នកវិទ្យាសាស្ត្រទិន្នន័យគឺថាមពលក្នុងការបង្ហាញទិន្នន័យជារូបភាពដោយប្រើបណ្ណាល័យល្អៗមួយចំនួនដូចជា Seaborn ឬ MatPlotLib។ ការផ្តល់តំណាងទិន្នន័យជារូបភាព នឹងអាចឲ្យអ្នកបង្កើតរួមគ្នាបានលំណាំដែលលាក់មិនឲ្យឃើញដែលអ្នកអាចយកប្រយោជន៍បាន។ ការបង្ហាញនេះក៏អាចជួយអ្នករកឃើញការមានទោស ឬទិន្នន័យមិនសមស្មើនឹង (ដូចដែលយើងបានរកឃើញនៅក្នុង [Classification](../../4-Classification/2-Classifiers-1/README.md))។
### បែងចែកឈុតទិន្នន័យរបស់អ្នក
### បំបែកឧទ្ឋរណ៍ទិន្នន័យរបស់អ្នក
មុនបណ្តុះបណ្តាល អ្នកត្រូវបែងចែកឈុតទិន្នន័យទៅជាផ្នែកពីរឬច្រើនដែលមានទំហំមិនស្មើគ្នា តែក៏តំណាងឱ្យទិន្នន័យបានល្អ។
មុនចាប់ផ្តើមបណ្តុះបណ្តាល អ្នកត្រូវបំបែកឧទ្ឋរណ៍ទិន្នន័យរបស់អ្នកជាពីរឬច្រើនផ្នែកដែលមានទំហំមិនស្មើគ្នានោះទេ ប៉ុន្តែត្រូវតំណាងឲ្យទិន្នន័យបានល្អ។
- **បណ្តុះបណ្តាល**។ ផ្នែកនេះនៃឈុតទិន្នន័យត្រូវបានប្រើសម្រាប់បណ្តុះបណ្តាលម៉ូដែល។ ជាឈុតធំជាងគេនៃឈុតទិន្នន័យដើម។
- **តេស្ត**។ ឈុតទិន្នន័យតេស្តគឺជាក្រុមទិន្នន័យឯករាជ្យ ដែលភាគច្រើនបានប្រមូលពីទិន្នន័យដើម ត្រូវបានប្រើប្រាស់សម្រាប់ផ្ទៀងផ្ទាត់សមត្ថភាពម៉ូដែលដែលបានបង្កើត។
- **ផ្ទៀងផ្ទាត់**។ ឈុតផ្ទៀងផ្ទាត់គឺជាក្រុមតូចជាង នៃគំរូឯករាជ្យ ដែលអ្នកប្រើដើម្បីកែតម្រូវអាជ្ញាប័ណ្ណ hyperparameters ឬរចនាសម្ព័ន្ធម៉ូដែល ដើម្បីធ្វើឱ្យម៉ូដែលកាន់តែប្រសើរ។ អាស្រ័យទៅលើទំហំទិន្នន័យ និងសំណួររបស់អ្នក អ្នកអាចមិនត្រូវការបង្កើតឈុតទីបីនេះទេ (ដូចដែលយើងកត់សម្គាល់ក្នុង [ការព្យាករណ៍លំដាប់ពេលវេលា](../../7-TimeSeries/1-Introduction/README.md))។
- **បណ្តុះបណ្តាល**។ ផ្នែកនេះនៃឧទ្ឋរណ៍ទិន្នន័យត្រូវបានឆមាសទៅគំរូរបស់អ្នកសម្រាប់បណ្តុះបណ្តាល។ សំណុំទិន្នន័យនេះមានភាគច្រើននៃទិន្នន័យដើម។
- **សាកល្បង**។ សំណុំទិន្នន័យសាកល្បងគឺជាក្រុមដាច់ដោយឡែកនៃទិន្នន័យ ដែលភាគច្រើនត្រូវបានប្រមូលពីទិន្នន័យដើម ដែលអ្នកប្រើសម្រាប់បញ្ជាក់ពីភាពប្រតិបត្តិការនៃគំរូដែលបានបង្កើត។
- **ផ្ទៀងផ្ទាត់**។ សំណុំផ្ទៀងផ្ទាត់គឺជាក្រុមតូចមួយនៃឧទ្ឋរណ៍ដោយឯករាជ្យ ដែលអ្នកប្រើសម្រាប់កែតម្រូវប៉ារ៉ាម៉ែត្រវិសាលភាព, ឬរចនាសម្ព័ន្ធ, ដើម្បីធ្វើឲ្យគំរូប្រសើរឡើង។ អាស្រ័យលើទំហំទិន្នន័យនិងសំណួររបស់អ្នក អ្នកអាចមិនចាំបាច់បង្កើតសំណុំទីបីនេះទេ (ដូចដែលយើងបានកំណត់នៅក្នុង [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md))។
## ការបង្កើតម៉ូដែល
## សាងសង់គំរូ
ប្រើអថេរគំរប់បណ្តុះបណ្តាលរបស់អ្នក គោលបំណងរបស់អ្នកគឺបង្កើតម៉ូដែល ឬតំណាងស្ថិតិរបស់ទិន្នន័យ ដោយប្រើលេខាធិការកម្មវិធីនានាដើម្បី **បណ្តុះបណ្តាល** វា។ ការបណ្តុះបណ្តាលម៉ូដែលអនុញ្ញាតឱ្យវាត្រូវបានបង្ហាញទៅកាន់ទិន្នន័យ និងធ្វើការទាយពីលំនាំដែលវារកឃើញ បញ្ជាក់ និងទទួលយកឬបដិសេធ។
ប្រើទិន្នន័យបណ្តុះបណ្តាលរបស់អ្នក គោលបំណងរបស់អ្នកគឺសាងសង់គំរូ ឬតំណាងស្ថិតិមួយនៃទិន្នន័យដោយប្រើអាល់ហ្គូរីធម៍ផ្សេងៗដើម្បី **បណ្តុះបណ្តាល** វា។ ការបណ្តុះបណ្តាលគំរូធ្វើឲ្យវាបានស្គាល់ទិន្នន័យ ហើយអនុញ្ញាតឲ្យវាធ្វើការសន្មតពីលំនាំដែលវាពិចារណា បានផ្ទៀងផ្ទាត់ និងទទួលយក ឬបដិសេធ។
### សម្រេចចិត្តលើវិធីសាស្ត្របណ្តុះបណ្តាល
### សម្រេចលើវិធីបណ្តុះបណ្តាល
អាស្រ័យលើសំណួរ និងធម្មជាតិនៃទិន្នន័យ អ្នកនឹងជ្រើសរើសវិធីសាស្ត្រមួយសម្រាប់បណ្តុះបណ្តាលវា។ ដំណើរឆ្លងកាត់ [ឯកសាររបស់ Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - ដែលយើងប្រើនៅក្នុងវគ្គសិក្សានេះ - អ្នកអាចស្វែងយល់ពីវិធីជាច្រើនក្នុងការបណ្តុះបណ្តាលម៉ូដែល។ អាស្រ័យលើបទពិសោធន៍របស់អ្នក អ្នកអាចត្រូវមានការសាកល្បងវិធីផ្សេងៗជាច្រើន ដោយករណីជាក់លាក់ក្រុមអ្នកវិទ្យាសាស្ត្រទិន្នន័យវាយតម្លៃសមត្ថភាពម៉ូដែល ដោយផ្តល់ទិន្នន័យមិនដែលបានមើល មើលភាពត្រឹមត្រូវ ការបង្វិលបម្រែបម្រួល និងបញ្ហាគុណភាពផ្សេងទៀត ហើយជ្រើសរើសវិធីសាស្ត្របណ្តុះបណ្តាលសមរម្យបំផុតសម្រាប់ភារកិច្ច។
អាស្រ័យលើសំណួររបស់អ្នក និងធម្មជាតិនៃទិន្នន័យ អ្នកនឹងជ្រើសរើសវិធីសាស្ត្រមួយសម្រាប់បណ្តុះបណ្តាលវា។ ការដើរតាមឯកសាររបស់ [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) ដែលយើងប្រើនៅវគ្គនេះ អ្នកអាចស្វែងរកវិធីជាច្រើនសម្រាប់បណ្តុះបណ្តាលគំរូ។ អាស្រ័យលើបទពិសោធន៍របស់អ្នក អ្នកអាចត្រូវសាកល្បងវិធីផ្សេងៗគ្នាច្រើនដើម្បីសាងសង់គំរូល្អបំផុត។ អ្នកភាគច្រើននឹងត្រូវទៅតាមដំណើរការដែលអ្នកវិទ្យាសាស្ត្រទិន្នន័យវាយតម្លៃពីការប្រតិបត្តិរបស់គំរូ ដោយផ្តល់ទិន្ននយវអោយវាមើល ទិន្នន័យមិនដែលឃើញ មើលភាពត្រឹមត្រូវ ទំនោរបាន និងបញ្ហាផ្សេងៗដែលធ្វើឲ្យគុណភាពចុះខ្សោយ ហើយជ្រើសរើសវិធីបណ្តុះបណ្តាលសមរម្យបំផុតសម្រាប់កិច្ចការនេះ
### បណ្តុះបណ្តាលម៉ូដែល
### បណ្តុះបណ្តាលគំរូ
ជាប់ជាមួយទិន្នន័យបណ្តុះបណ្តាលរបស់អ្នក អ្នកបានរួចរាល់សម្រាប់ 'fit' វា ដើម្បីបង្កើតម៉ូដែល។ អ្នកនឹងសង្កេតឃើញថាក្នុងបណ្ណាល័យ ML ជាច្រើន អ្នកនឹងឃើញកូដ 'model.fit' - នៅពេលនេះ អ្នកផ្ញើរអថេរលក្ខណៈពិសេសជាអារេនៃតម្លៃ (ភាគច្រើនគឺ 'X') និងអថេរគោលដៅ (ភាគច្រើន 'y')។
មានទិន្នន័យបណ្តុះបណ្តាលរបស់អ្នក អ្នករួចរាល់សម្រាប់ 'ផ្គាប់' វាដើម្បីបង្កើតគំរូ។ អ្នកនឹងសង្កេតឃើញថា នៅក្នុងបណ្ណាល័យ ML ច្រើន អ្នកនឹងឃើញកូដ 'model.fit' - នៅពេលនេះអ្នកបញ្ជូនអថេរលក្ខណៈរបស់អ្នកជាជួរប្រភេទតម្លៃ (ទូទៅជាទំព័រ 'X') និងអថេរកោលដៅ (ទូទៅជាទំព័រ 'y')។
### វាយតម្លៃម៉ូដែល
### វាយតម្លៃគំរូ
ពេលដំណើរការបណ្តុះបណ្តាលបានបញ្ចប់ (វាអាចយកពេលជាច្រើន iteration ឬ 'epoch' ដើម្បីបណ្តុះម៉ូដែលធំមួយ) អ្នកអាចវាយតម្លៃគុណភាពម៉ូដែលដោយប្រើទិន្នន័យតេស្ត ដើម្បីវាស់សមត្ថភាពវា។ ទិន្នន័យនេះគឺជាផ្នែកតូចមួយនៃទិន្នន័យដើម ដែលម៉ូដែលមិនដែលវិភាគមុន។ អ្នកអាចបោះពុម្ពតារាងស្ថិតិអំពីគុណភាពម៉ូដែលរបស់អ្នក។
បន្ទាប់ពីដំណើរការបណ្តុះបណ្តាលបានបញ្ចប់ (វាអាចប្រើពេលជាច្រើនជំហាន ឬ 'epochs' សម្រាប់បណ្តុះបណ្តាលគំរូធំ) អ្នកអាចវាយតម្លៃគុណភាពគំរូដោយប្រើទិន្នន័យសាកល្បងសម្រាប់វាស់ប្រតិបត្តិការ។ ទិន្នន័យនេះគឺជាផ្នែករងចំណែកមួយនៃទិន្នន័យដើមដែលគំរូមិនធ្លាប់វិភាគជាមុន។ អ្នកអាចបោះពុម្ពតារាងវាស់វឌ្ឍនភាពអំពីគុណភាពគំរូរបស់អ្នក។
🎓 **ការផ្គុំម៉ូដែល**
🎓 **ការផ្គាប់គំរូ**
នៅបរិបទនៃការរៀនម៉ាស៊ីន ការផ្គុំម៉ូដែលមានន័យថា ភាពត្រឹមត្រូវនៃមុខងាររបស់ម៉ូដែល ពេលវា​ព្យាយាមវិភាជន៍ទិន្នន័យដែលវាមិនស្គាល់។
នៅក្នុងបរិបទនៃការរៀនម៉ាស៊ីន ការផ្គាប់គំរូ មានន័យថាការត្រឹមត្រូវនៃមុខងារដែកខាងក្រោមរបស់គំរូ ខណៈវាកំពុងព្យាយាមវិភាគទិន្នន័យដែលវាមិនស្គាល់។
🎓 **Underfitting** និង **overfitting** ជាបញ្ហាទូទៅដែលធ្វើឲ្យគុណភាពម៉ូដែលធ្លាក់ចុះ នោះហើយម៉ូដែលត្រូវបានផ្គុំបានមិនល្អគ្រប់គ្រាន់ ឬល្អពេក។ វានាំឲ្យម៉ូដែលប៉ាន់ប្រមាណពីទិន្នន័យបណ្តុះបណ្តាលបានយ៉ាងតិតទៅ ឬលំបាកពេកក្នុងការភ្ជាប់ជាមួយទិន្នន័យ។ ម៉ូដែល overfit នឹងព្យាករណ៍ទិន្នន័យបណ្តុះបណ្តាលបានល្អពេក ពីព្រោះវាបានរៀនលម្អិតនិងសំឡេងរំខានក្នុងទិន្នន័យយ៉ាងល្អ។ ម៉ូដែល underfit គឺមិនត្រឹមត្រូវ ពីព្រោះវាមិនអាចវិភាគទិន្នន័យបណ្តុះបណ្តាលឬទិន្នន័យមិនដែលបានមើលបានយ៉ាងត្រឹមត្រូវទេ។
🎓 **Underfitting** និង **overfitting** ជាបញ្ហាទូទៅដែលធ្វើឲ្យគុណភាពគំរូធ្លាក់ចុះ ចប់សំរាប់ផ្នែកមួយដែលគំរូមិនបានផ្គាប់ល្អគ្រប់គ្រាន់ ឬផ្គាប់ល្អពេក។ វាបង្កើតឲ្យគំរូធ្វើការព្យាករណ៍ឲ្យណាស់ពេក ឬងាយលើពេកជាមួយទិន្នន័យបណ្តុះបណ្តាល។ គំរូ overfit ព្យាករណ៍ទិន្នន័យបណ្តុះបណ្តាលមានភាពត្រឹមត្រូវខ្ពស់ព្រោះវា​បានរៀនលំដាប់លំដោយនិងសំឡេងរំខាននៃទិន្នន័យយ៉ាងល្អ ឯគំរូ underfit មិនត្រឹមត្រូវ ព្រោះវាមិនអាចវិភាគទិន្នន័យបណ្តុះបណ្តាលឬទិន្នន័យដែលមិនបានឃើញបានត្រឹមត្រូវទេ។
![overfitting model](../../../../translated_images/km/overfitting.1c132d92bfd93cb6.webp)
> រូបតំណាងដោយ [Jen Looper](https://twitter.com/jenlooper)
> រូបភាពដោយ [Jen Looper](https://twitter.com/jenlooper)
## ការកែសម្រួលប៉ារ៉ាម៉ែត្រ
## កំណត់ប៉ារ៉ាម៉ែត្រ
នៅពេលដែលការបណ្តុះបណ្តាលដំបូងបានបញ្ចប់ ការសង្កេតគុណភាពម៉ូដែល និងពិចារណាកែលម្អវា ដោយកែសម្រួល 'hyperparameters' របស់វា។ អានបន្ថែមអំពីដំណើរការនេះ [ក្នុងឯកសារ](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)។
បន្ទាប់ពីបណ្តុះបណ្តាលដំបូងបានបញ្ចប់ សូមពិនិត្យគុណភាពគំរូ ហើយពិចារណាធ្វើឲ្យប្រសើរឡើងដោយកែប៉ារ៉ាម៉ែត្រ 'hyperparameters' របស់វា។ អានបន្ថែមអំពីដំណើរការនេះ [នៅក្នុងឯកសារ](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)។
## ការព្យាករណ៍
នេះគឺជាពេលវេលាដែលអ្នកអាចប្រើទិន្នន័យថ្មីទាំងស្រុង ដើម្បីសាកល្បងភាពត្រឹមត្រូវនៃម៉ូដែល។ ក្នុងបរិបទ ML 'បច្ចេកប្រតិបត្តិន៍' ដែលអ្នកកំពុងបង្កើតទ្រព្យសម្បត្តិនៅលើបណ្ដាញ ដើម្បីប្រើម៉ូដែលក្នុងផលិតកម្ម វាអាចមានលទ្ធភាពបង្រួមទិន្នន័យអ្នកប្រើ (ការចុចប៊ូតុង ឧទាហរណ៍) ដើម្បីកំណត់អថេរមួយ ហើយផ្ញើវាទៅម៉ូដែលសម្រាប់ការបកស្រាយ ឬវាយតម្លៃ។
នេះជាពេលវេលាដែលអ្នកអាចប្រើទិន្នន័យថ្មីមួយទាំងស្រុងសម្រាប់សាកល្បងភាពត្រឹមត្រូវនៃគំរូ។ នៅក្នុងបរិបទ ML 'បច្ចេកទេស' ដែលអ្នកកំពុងសង់អចលនវត្ថុបណ្ដាញដើម្បីប្រើគំរូក្នុងការផលិត វិធីនេះអាចមានការប្រមូលទិន្នន័យអ្នកប្រើ (ដូចជាចុចប៊ូតុង) ដើម្បីកំណត់អថេរមួយ និងផ្ញើវាទៅគំរូសម្រាប់ការព្យាយាម ឬវាយតម្លៃ។
នៅក្នុងមេរៀនទាំងនេះ អ្នកនឹងស្វែងយល់ពីរបៀបប្រើជំហានទាំងនេះ ដើម្បីរៀបចំ បង្កើត សាកល្បង វាយតម្លៃ និងព្យាករណ៍ — ជាការប្រតិបត្តិរបស់អ្នកវិទ្យាសាស្ត្រទិន្នន័យ និងពាណិជ្ជកម្មបន្ថែម ជាពេលដែលអ្នកបន្តផ្លូវទៅរកជំនាញ ML full stack
ក្នុងមេរៀនទាំងនេះ អ្នកនឹងរៀនពីវិធីប្រើជំហានទាំងនេះសម្រាប់រៀបចំ សង់ តេស្ត វាយតម្លៃ និងព្យាករ — រួមជាមួយកម្មវិធីទាំងអស់របស់អ្នកវិទ្យាសាស្ត្រទិន្នន័យ និងមិនត្រឹមតែប៉ុណ្ណោះ ខណៈដែលអ្នកបន្តផ្លូវដំណើររបស់អ្នកដើម្បីក្លាយជាវិស្វកររៀនម៉ាស៊ីន 'full stack'
---
## 🚀ការប្រកួតប្រជែង
## 🚀បញ្ហា
គូរជាតារាងបង្ហាញនៃជំហានរបស់អ្នកអនុវត្ត ML។ តើអ្នកឃើញខ្លួននៅកន្លែងណាក្នុងដំណើរការ? តើអ្នកគិតថាអ្នកនឹងមានការលំបាកនៅពេលណា? តើអ្វីដែលមើលទៅងាយស្រួលសម្រាប់អ្នក?
គូរអត្រាដំណើរការលម្អិតបង្ហាញជំហានរបស់អ្នកអនុវត្ត ML។ តើអ្នកឃើញខ្លួននៅឯណាឥឡូវនេះក្នុងដំណើរការ? តើអ្នកព្យាករថានឹងមានកម្រិតលំបាកនៅឯណា? តើអ្វីដែលហាក់មើលទៅសាមញ្ញសម្រាប់អ្នក?
## [សំនួរត្រួតពិនិត្យបន្ទាប់មេរៀន](https://ff-quizzes.netlify.app/en/ml/)
## [ប្រលងបន្ទាប់ពីមេរៀន](https://ff-quizzes.netlify.app/en/ml/)
## ទិដ្ឋភាពវិលត្រឡប់ & ការសិក្សាឯករាជ្យ
## អនុវត្តន៍ & សិក្សាផ្ទាល់ខ្លួន
ស្វែងរកនៅលើអ៊ីនធឺណិតសម្រាប់សម្ភាសន៍ជាមួយអ្នកវិទ្យាសាស្ត្រទិន្នន័យដែលពិភាក្សាអំពីការងារប្រចាំថ្ងៃរបស់ពួកគេ។ នេះគឺជា [មួយឯកសារ](https://www.youtube.com/watch?v=Z3IjgbbCEfs)។
ស្វែងរកអនឡាញសម្រាប់សត្ថបទសំខាន់ៗពីអ្នកវិទ្យាសាស្ត្រទិន្នន័យដែលពិភាក្សាជាមួយការងារប្រចាំថ្ងៃរបស់ពួកគេ។ នេះគឺជា [មួយ](https://www.youtube.com/watch?v=Z3IjgbbCEfs)។
## កិច្ចការផ្ទះ
## ភារកិច្ច
[សម្ភាសអ្នកវិទ្យាសាស្ត្រទិន្នន័យ](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ការព្រមាន**៖
ឯកសារនេះត្រូវបានបំលែងភាសា ដោយប្រើសេវាកម្មបំលែងភាសា AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ ខណៈពេលយើងខិតខំរកភាពត្រឹមត្រូវ សូមយល់ព្រមថាការបំលែងភាសាទ្វេដងដោយស្វ័យប្រវត្តិអាចមានកំហុស ឬការមិនត្រឹមត្រូវ។ ឯកសារដើម៖ ជាភាសារបស់ខ្លួន គួរត្រូវបានចាត់ទុកជាធនធានដើមដែលមានសុពលភាព។ សម្រាប់ព័ត៌មានសំខាន់ៗ ការបំលែងភាសាដោយមនុស្សជំនាញត្រូវបានណែនាំ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសៗ ដែលកើតឡើងពីការប្រើប្រាស់បំលែងភាសានេះឡើយ។
**ការបដិសេធ**៖
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាបកប្រែ AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ បើទោះបីយើងខិតខំក្នុងការធ្វើឱ្យមានភាពត្រឹមត្រូវក៏ដោយ សូមយល់ឱ្យបានថា ការបកប្រែដោយស្វ័យប្រវត្តិអាចមានកំហុស ឬភាពមិនត្រឹមត្រូវខ្លះ។ ឯកសារដើមជាភាសាមូលដ្ឋានគួរត្រូវបានគិតថាជា ប្រភពដែលមានសក្ដានុពល។ សម្រាប់ព័ត៌មានដែលមានសារៈសំខាន់ ការបកប្រែដោយមនុស្សជំនាញត្រូវបានណែនាំ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសប្លែកណាមួយដែលកើតមានពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -1,96 +1,96 @@
# សាងសង់ម៉ូដែលរេសគ្រីស្យុងដោយប្រើ Scikit-learn: រេសគ្រីស្យុង ជា​ចំនួនបួន​វិធី
# បង្កើតម៉ូដែលកំណត់ត្រា regression ប្រើប្រាស់ Scikit-learn: regression ៤ របៀប
## អសាមញ្ញករ Note
## សម្គាល់សម្រាប់អ្នកចាប់ផ្ដើម
រេសគ្រីស្យុងបន្ទាត់ត្រូវបានប្រើនៅពេលដែលយើងចង់ទាយទិន្នន័យ **តម្លៃលេខ** (ឧទាហរណ៍ តម្លៃផ្ទះ សីតុណ្ហភាព ឬការលក់)។ វាដំណើរការដោយស្វែងរកបន្ទាត់ស្របមួយ ដែលតំណាងល្អបំផុតសម្រាប់ទំនាក់ទំនងរវាងមុខងារបញ្ចូល និងចេញ
ការកំណត់ត្រា Linear regression ត្រូវបានប្រើពេលយើងចង់ទាយទោល **តម្លៃជាលេខ** (ឧទាហរណ៍, តម្លៃផ្ទះ, សីតុណ្ហភាព, ឬការលក់)។ វាធ្វើការដោយស្វែងរកខ្សែស្របមួយដែលតំណាងឱ្យទំនាក់ទំនងរវាងលក្ខណៈបញ្ចូល និងលទ្ធផលបានល្អបំផុត
ក្នុងមេរៀននេះ យើងផ្តោតសំខាន់លើការយល់ដឹងពីគំនិតមុនពេលស្វែងយល់បន្ថែមពីបច្ចេកទេសរេសគ្រីស្យុងខ្ពស់ជាងនេះ។
នៅក្នុងមេរៀននេះ យើងផ្តោតលើការយល់ដឹងពីគំនិតមុនពេលស្វែងយល់បច្ចេកទេស regression ដែលមានភាពស្មុគស្មាញជាងនេះ។
![Linear vs polynomial regression infographic](../../../../translated_images/km/linear-polynomial.5523c7cb6576ccab.webp)
> គំនូរទាក់ទងដោយ [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [គន្លងប្រលងមុនមេរៀន](https://ff-quizzes.netlify.app/en/ml/)
> រូបតំណាងដោយ [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [តេស្តមុខមាត់មេរៀន](https://ff-quizzes.netlify.app/en/ml/)
> ### [មេរៀននេះមាននៅក្នុងភាសា R ផង!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### ការណែនាំ
> ### [មេរៀននេះមានជាភាសា R ផងដែរ!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### ការណែនាំ
រហូតមកដល់បច្ចុប្បន្ន អ្នកបានស្វែងយល់ពីអ្វីដែលរេសគ្រីស្យុងជាមួយទិន្នន័យគំរូដែលបានប្រមូលពីឃ្លាំងតម្លៃគ្រប់របស់ផ្កាយប័ន្តដែលយើងនឹងប្រើពេញមួយមេរៀននេះ។ អ្នកក៏បានបង្ហាញវាជាមួយ Matplotlib
រហូតដល់ពេលនេះ អ្នកបានស្វែងយល់អំពីអ្វីទៅជាកំណត់ត្រា regression ជាមួយទិន្នន័យគំរូពី dataset តម្លៃផ្លែគុជ ដែលយើងនឹងប្រើកន្លងមកក្នុងមេរៀននេះ។ អ្នកក៏បានបង្ហាញវាដោយប្រើ Matplotlib ផងដែរ
ឥឡូវនេះ អ្នកបានត្រៀមខ្លួនដើម្បីរំដោះចូលលើរេសគ្រីស្យុងសម្រាប់ ML។ ដំណើរការបង្ហាញភាពនេះអនុញ្ញាតឱ្យអ្នកចេះយល់ពីទិន្នន័យ ប៉ុន្តែអំណាចពិតនៃប្រព័ន្ធរៀនម៉ាស៊ីនមកពី _ការបណ្តុះម៉ូដែល_។ ម៉ូដែលត្រូវបានបណ្តុះលើទិន្នន័យប្រវត្តិសាស្ត្រដើម្បីទទួលយកទំនាក់ទំនងទិន្នន័យដោយស្វ័យប្រវត្តិ ហើយវាអនុញ្ញាតឱ្យអ្នកទាយបានលទ្ធផលសម្រាប់ទិន្នន័យថ្មីដែលម៉ូដែលមិនបានឃើញពីមុន។
ឥឡូវនេះ អ្នករួចរាល់ក្នុងការចូលដល់ regression ជ្រាលជ្រៅសម្រាប់ ML។ ខណៈពេលការបង្ហាញអនុញ្ញាតឲ្យអ្នកយល់ដឹងទិន្នន័យ កម្លាំងពិតរបស់ Machine Learning មកពី _ការបណ្តុះបណ្តាលម៉ូដែល_។ ម៉ូដែលទាំងនេះត្រូវបានបណ្តុះបណ្តាលលើទិន្នន័យប្រវត្តិ ដើម្បីចាប់យកក្បួនពាក់ព័ន្ធរវាងទិន្នន័យបានដោយស្វ័យប្រវត្តិ ហើយវាអនុញ្ញាតឲ្យអ្នកទាយទ្ឋានលទ្ធផលសម្រាប់ទិន្នន័យថ្មី ដែលម៉ូដែលមិនទាន់ឃើញពីមុន។
នៅក្នុងមេរៀននេះ អ្នកនឹងរៀនបន្ថែមអំពីប្រភេទរេសគ្រីស្យុងពីរប្រភេទ: _រេសគ្រីស្យុងបន្ទាត់មូលដ្ឋាន_ និង _រេសគ្រីស្យុងព៉ូលីណូមៀល_ ជាមួយនឹងគណិតវិទ្យាខ្លះៗដែលនៅក្រោមបច្ចេកទេសទាំងនេះ។ ម៉ូដែលទាំងនោះនឹងអនុញ្ញាតឲ្យយើងទាយតម្លៃផ្កាយប័ន្តអាស្រ័យលើទិន្នន័យបញ្ចូលខុសៗគ្នា។
នៅក្នុងមេរៀននេះ អ្នកនឹងស្វែងយល់បន្ថែមពីប្រភេទនៃ regression ២ ប្រភេទ ៖ _linear regression ជាមូលដ្ឋាន_ និង _polynomial regression_, រួមជាមួយគណិតវិទ្យាមួយចំនួននៅពីក្រោយបច្ចេកទេសទាំងនេះ។ ម៉ូដែលទាំងនេះនឹងអនុញ្ញាតឲ្យយើងទាយតម្លៃផ្លែគុជដោយផ្អែកលើទិន្នន័យបញ្ចូលដ៏ខុសគ្នា។
[![ML for beginners - Understanding Linear Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for beginners - Understanding Linear Regression")
> 🎥 ចុចលើរូបភាពខាងលើសម្រាប់វីដេអូសង្ខេបអំពីរេសគ្រីស្យុងបន្ទាត់
> 🎥 ចុចរូបភាពខាងលើសម្រាប់មើលវីដេអូសង្ខេបពី linear regression
> ក្នុងអំឡុងពេលសិក្សាជំនាញនេះ យើងគិតថា ពុំទាមទារជំនាញគណិតវិទ្យាច្រើននោះទេ ហើយផ្តោតធ្វើឲ្យវាអាចចូលដល់បានសម្រាប់និស្សិតដែលមកពីដែនផ្សេងៗ ដូច្នេះសូមកត់សម្គាល់កំណត់ចំណាំ 🧮 ការហៅចេញ សៀវភៅរៀន និងឧបករណ៍សិក្សាផ្សេងៗ ដើម្បីជួយបង្រៀនយល់បានល្អ
> ក្នុងកម្រិតសិក្សាទាំងនេះ យើងសន្មតថាជំនាញគណិតវិទ្យាមិនខ្ពស់ ព្រមទាំងព្យាយាមធ្វើឲ្យវាអាចចូលដល់បានសម្រាប់សិស្សពីវិស័យផ្សេងៗ ដូច្នេះសូមមើលកំណត់សម្គាល់, 🧮 ការហៅ, រូបតំណាង និងឧបករណ៍រៀនផ្សេងទៀតសម្រាប់ជំនួយក្នុងការយល់ដឹង
### គួរដឹងជាមុន
### តម្រូវការមុន
អ្នកគួរតែស្គាល់រចនាសម្ព័ន្ធទិន្នន័យផ្កាយដែលយើងកំពុងពិនិត្យឥឡូវនេះ។ អ្នកអាចស្រាវជ្រាវវា ដែលបានរៀបចំរួចទៅហើយក្នុងឯកសារ _notebook.ipynb_ នៃមេរៀននេះ។ នៅក្នុងឯកសារ តម្លៃផ្កាយបង្ហាញចេញជាតម្លៃមួយទៅក្នុងឈុតទិន្នន័យថ្មី។ សូមប្រាកដថាអ្នកអាចរត់ឯកសារនេះនៅក្នុងកណ្តុរប្រតិបត្តិការ Visual Studio Code។
អ្នកគួរតែលេខពេញចិត្តទៅនឹងរចនាសម្ព័ន្ធទិន្នន័យផ្លែគុជដែលយើងកំពុងពិនិត្យ។ អ្នកអាចរកឃើញវាត្រូវបានបញ្ចូលរួច និងបានបើកស្អាតក្នុងឯកសារ _notebook.ipynb_ របស់មេរៀននេះ។ ក្នុងឯកសារ តម្លៃផ្លែគុជត្រូវបានបង្ហាញជាតម្លៃភាគតំណាងមួយក្នុង DataFrame ថ្មី។ សូមប្រាកដថាអ្នកអាចរត់ notebooks ទាំងនេះនៅក្នុង kernel នៃ Visual Studio Code។
### ការប្រៀបប្រដៅ
### ការរៀបចំ
ជាថ្មីវិញ អ្នកកំពុងផ្ទុកទិន្នន័យនេះដើម្បីសួរចម្ងល់ពីវា។
ដើម្បីរំលឹក អ្នកកំពុងផ្ទុកទិន្នន័យនេះដើម្បីសួរចំលើយពីវា។
- ពេលណាជាពេលល្អបំផុតក្នុងការជាវផ្កាយ?
- តម្លៃដែលខ្ញុំអាចរំពឹងទុកសម្រាប់ប្រអប់ផ្កាយតូចតាចនេះ?
- តើខ្ញុំគួរជាវវាទុកក្នុងធុងបាក់សែលកន្លះឬក្នុងប្រអប់ 1 1/9 បាសែលទេ?
តោះបន្តស្គាល់ទិន្នន័យនេះ។
- ពេលណាជាពេលល្អបំផុតក្នុងការទិញផ្លែគុជ?
- តម្លៃដែលខ្ញុំអាចរំពឹងទុក្ខប្រអប់ផ្លែគុជតូចមួយជាអ្វី?
- តើខ្ញុំគួរទិញវានៅក្នុងធុងកន្លែងកន្លះបាសែល ឬប្រអប់ ១ ១/៩ បាសែល?
យើងសូមបន្តស្រាវជ្រាវក្នុងទិន្នន័យនេះ។
ក្នុងមេរៀនមុន អ្នកបានបង្កើត DataFrame Pandas ហើយបំពេញវា ជាមួយផ្នែកមួយនៃទិន្នន័យដើម ដោយស្ដង់ដារតម្លៃតាមបាសែល។ ប៉ុន្តែតែតិច អ្នកបានប្រមូលបានប្រហែល ៤០០ចំនួនទិន្នន័យ ហើយសម្រាប់ខែរដូវស្លឹកឈើជ្រុះតែប៉ុណ្ណោះ។
ក្នុងមេរៀនមុន អ្នកបានបង្កើត DataFrame របស់ Pandas ហើយបញ្ចូលវាជាមួយផ្នែកមួយនៃ dataset ដើម បម្រែបម្រួលតម្លៃដោយបាសែល។ ប៉ុន្តែដោយធ្វើការនេះ អ្នកអាចទទួលបានតែប្រហែល៤០០ចំណុចទិន្នន័យ និងសម្រាប់ខែរដូវស្លឹកឈើជ្រុះតែប៉ុណ្ណោះ។
សូមមើលទិន្នន័យដែលបានបញ្ចូលរួចនៅក្នុងទំព័រនេះក្នុងឯកសារ notebook នៃមេរៀន។ ទិន្នន័យបានបញ្ចូលរួច និងបង្ហាញរាងចំណុចព្រាត់ដើម្បីបង្ហាញខែ ទំនងជាយើងអាចរកបានព័ត៌មានលម្អិតបន្ថែមអំពីធម្មជាតិទិន្នន័យ ដោយសម្រួលវាបន្ថែមទៀត។
សូមមើលទៅទិន្នន័យដែលយើងបានបញ្ចូលរួចក្នុង notebook រួមជាមួយមេរៀននេះ។ ទិន្នន័យបានបញ្ចូលរួចហើយ និងមានការ scatterplot ដំបូងបង្ហាញតាមខែ។ ប្រហែលជាយើងអាចទទួលបានព័ត៌មានលម្អិតមួយចំនួនពីធម្មជាតិនៃទិន្នន័យដោយការសម្អាតវាបន្ថែមទៀត។
## បន្ទាត់រេសគ្រីស្យុងបន្ទាត់មួយ
## ខ្សែ regression ស្រប
ដូចដែលអ្នកបានរៀនក្នុងមេរៀន ១ គោលគំនិតនៃលំហាត់រេសគ្រីស្យុងបន្ទាត់គឺដើម្បីអាចគូរបន្ទាត់មួយសម្រាប់
ដូចដែលអ្នកបានរៀនក្នុងមេរៀនទី ១ គោលដៅនៃលំហាត់ linear regression គឺដើម្បីអាចគូសខ្សែដូចខាងក្រោម
- **បង្ហាញទំនាក់ទំនងអថេរ**។ បង្ហាញទំនាក់ទំនងរវាងអថេរ
- **ធ្វើការទាយតម្លៃ**។ ទាយតម្លៃបានត្រឹមត្រូវថាចំណុចថ្មីនឹងស្ថិតនៅឯសន្លឹកណា
- **ធ្វើការទាយទោល**។ ធ្វើការទាយទោលបានត្រឹមត្រូវលើទីតាំងនៃចំណុចទិន្នន័យថ្មីមួយ ទាក់ទងទៅខ្សែស្របនោះ
វាជារឿងទូទៅនៃ **Least-Squares Regression** ដើម្បីគូរបែបនេះ។ ពាក្យ "Least-Squares" មានន័យថាផលបិទកំហុសរួមមិនធំ។ សម្រាប់ចំណុចទិន្នន័យមួយៗ យើងវាស់រយៈកន្លះកោងចុះ (ហៅថា residual) រវាងចំណុចពិត និងបន្ទាត់រេសគ្រីស្យុង
វាមានទំាងជាគន្លងនៃ **Least-Squares Regression** ដើម្បីគូសខ្សែបែបនេះ។ ពាក្យ "Least-Squares" មានន័យថា ជំហាននៃការកាត់បន្ថយកំហុសសរុបនៅក្នុងម៉ូដែល។ សម្រាប់ចំណុចទិន្នន័យរាល់ចំណុច យើងវាស់ចម្ងាយបញ្ឈរ (ហៅថា residual) រវាងចំណុចពិត និងខ្សែ regression
យើងធ្វើការការ៉េរយៈចន្លោះទាំងនេះដោយមានមូលហេតុសំខាន់ពីរគឺ:
យើងធ្វើការ​លោតបន្ធោងចម្ងាយនេះសម្រាប់មូលហេតុសំខាន់ ២៖
1. **ទំហំលើទិសដៅ:** យើងចង់ពិនិត្យកំហុស -5 ដូចគ្នានឹងកំហុស +5។ ការ<E19EB6> square បំរេ所有តម្លៃជាផ្កាយវិជ្ជមានទាំងអស់។
1. **ទំហំជាងទិសដៅ៖** យើងចង់ចាត់ទុកកំហុស -៥ ដូចគ្នានឹងកំហុស +៥។ ការ​លោតបន្ធោងធ្វើឲ្យតម្លៃទាំងអស់ទៅជាអវិជ្ជមាន។
2. **ពិនិត្យចំពោះចំណុចក្រៅ:** ការ square ផ្តល់តុល្យភាពលើកំហុសធំៗ បង្ខំឲ្យបន្ទាត់នៅជិតចំណុចដែលឆ្ងាយ។
2. **ដាក់ពិន័យចំពោះចំណុចខុសប្លែក៖** ការលោតបន្ធោងធ្វើឲ្យកំហុសធំហើយមានទំងន់បន្ថែម ហើយជំរុញឲ្យខ្សែស្របនៅជិតចំណុចដែលឆ្ងាយ។
យើងបន្ថែមតម្លៃការ square ទាំងនេះគ្នាទៅវិញ។ គោលបំណងគឺរកបន្ទាត់ដែលសរុបនេះតិចបំផុត (តម្លៃតិចបំផុត) ហេតុនេះហៅពីរការនេះថា "Least-Squares"។
ក្រោយមក យើងនឹងបូករួមតម្លៃលោតបន្ធោងទាំងអស់ទាំងនេះ។គោលដៅរបស់យើងគឺរកឃើញខ្សែនូវកន្លែងដែលសរុបចុងក្រោយកើតមានតិចបំផុត (តម្លៃតិចបំផុតដែលអាចមាន)—អាស្រ័យពីឈ្មោះ "Least-Squares"។
> **🧮 បង្ហាញគណិតវិទ្យា**
> **🧮 បង្ហាញគណិតវិទ្យា**
>
> បន្ទាត់នេះ ដែលហៅថា _បន្ទាត់សម្រង់ល្អបំផុត_ អាចបង្ហាញដោយ [សមីការ](https://en.wikipedia.org/wiki/Simple_linear_regression):
> ខ្សែនេះហៅថា _line of best fit_ អាចបង្ហាញដោយ [សមីការ](https://en.wikipedia.org/wiki/Simple_linear_regression):
>
> ```
> Y = a + bX
> ```
>
> `X` គឺជា 'អថេរពន្យល់'។ `Y` គឺជា 'អថេរនិយម'។ ជំហាននៃបន្ទាត់គឺ `b` ហើយ `a` គឺជាចំណុចកាត់បន្ទាត់ y ដែលធ្វើអោយ `Y` រក្សាតម្លៃនៅពេល `X = 0`
> `X` គឺជា "អថេរពន្យល់"។ `Y` គឺជា "អថេរអាស្រ័យ"។ ចំហាយខ្សែគឺ `b` ហើយ `a` គឺជា y-intercept ដែលមានន័យថាតម្លៃ `Y` នៅពេល `X = 0`
>
>![calculate the slope](../../../../translated_images/km/slope.f3c9d5910ddbfcf9.webp)
>
> ជំហាន `b` គណនា ជាមួយគំនូរ [Jen Looper](https://twitter.com/jenlooper)
> ជំហានដំបូង គណនាចំហាយ `b`។ រូបតំណាងដោយ [Jen Looper](https://twitter.com/jenlooper)
>
> ក្នុងពាក្យផ្សេងៗ ហើយយោងទៅលើសំណួរដើមរបស់ទិន្នន័យផ្លែគុជ៖ "ទាយតម្លៃផ្លែគុជតាមបាសែលក្នុងមួយខែ", `X` នឹងបញ្ចេញតម្លៃតម្លៃ និង `Y` នឹងបញ្ចេញខែការលក់។
>
> នៅក្នុងពាក្យផ្សេង ហើយយោងទៅតាមសំណួរដើមរបស់ទិន្នន័យផ្កាយ "ទាយតម្លៃផ្កាយតាមបាសែលដោយខែ" ការបញ្ចូល `X` នឹងយោងទៅតម្លៃ និង `Y` នឹងយោងទៅខែ។
>![complete the equation](../../../../translated_images/km/calculation.a209813050a1ddb1.webp)
>
> គណនាតម្លៃ Y។ ប្រសិនបើអ្នកបង់ប្រហែល $៤ វាចាំបាច់ត្រូវ April! គំនូរដោយ [Jen Looper](https://twitter.com/jenlooper)
> គណនាតម្លៃ Y។ បើអ្នកកំពុងបង់ប្រាក់ប្រហែល $4 វា​គួរតែជាខែមេសា! រូបតំណាងដោយ [Jen Looper](https://twitter.com/jenlooper)
>
> គណិតវិទ្យាដែលគណនាបន្ទាត់គួរតែបង្ហាញពីជំហាន `b` មានផ្ទៃមួយនៃការចាប់ផ្តើមតែម្តង នៅពេ`X = 0`
> គណិតវិទ្យាដែលគណនាចំពោះខ្សែនេះត្រូវបង្ហាញចំហាយខ្សែ ហើយវាក៏អាស្រ័យលើ intercept ឬទីតាំង `Y` នៅពេលដែ`X = 0`
>
> អ្នកអាចមើលវិធីសាស្រ្តគណនាបញ្ជាក់លម្អិតបាននៅលើវេបសាយ [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html)។ សូមចូលទៅកាន់ [កាលគណនា Least-squares នេះ](https://www.mathsisfun.com/data/least-squares-calculator.html) ដើម្បីមើលពីរបៀបលេខប៉ះពាល់បន្ទាត់
> អ្នកអាចមើលវិធីសាស្ត្រគណនាតម្លៃទាំងនេះក្រៅពី [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html)។ សូមទៅសំណេះសំណាល [Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) ដើម្បីមើលការប៉ះពាល់នៃតម្លៃចំនួនទៅលើខ្សែ
## សមាភាព/Correlation
## ការចងក្រង
ពាក្យមួយទៀតដែលត្រូវយល់គឺ **ាំងឃូផេរ៉េលេសិនកូអ៊ីហ្វ៊ីស្យង** រវាងអថេរ X និង Y ។ ប្រើ scatterplot អ្នកអាចមើលឃើញកូអ៊ីហ្វីស្យងនេះបានយ៉ាងរហ័ស។ ប្លង់ជាមួយចំណុចចំរៀងក្នុងបន្ទាត់ស្អាតនោះមានសមាភាពខ្ពស់ ប៉ុន្តែប្លង់ជាមួយចំណុចចំរាយនៅគ្រប់ទីកន្លែងរវាង X និង Y មានសមាភាពទាប។
ពាក្យមួយទៀតដែលត្រូវយល់គឺ **នុផលចងក្រង (Correlation Coefficient)** រវាងអថេរ X និង Y ប្រាប់។ ដោយប្រើ scatterplot អ្នកអាចឃើញអនុផលចងក្រងនេះបានរហ័ស។ ពេល scatterplot មានចំណុចកន្លងទៅតាមខ្សែស្រប មានអនុផលចងក្រងខ្ពស់ ប៉ុន្តែពេល scatterplot មានចំណុចចែកចាយជុំវិញលើទីលានសរុប មានអនុផលចងក្រងទាប។
ម៉ូដែលរេសគ្រីស្យុងបន្ទាត់ល្អនឹងជាៈ ម៉ូដែលដែលមានកូអ៊ីហ្វីស្យង់សមាភាពខ្ពស់ (ជិត ១ ជាង ០) ប្រើវិធី Least-Squares Regression ជាមួយបន្ទាត់រេសគ្រីស្យុង
ម៉ូដែល linear regression ដែលល្អ គឺម៉ូដែលមានអនុផលចងក្រងខ្ពស់ (ជិត 1 មិនមែន 0) ដោយប្រើវិធី Least-Squares Regression ជាមួយខ្សែ regression
✅ រត់ notebook ដែលផ្ដល់ជាមួយមេរៀននេះ និងមើល scatterplot រវាង Month និង Price ។ តើទិន្នន័យដែលភ្ជាប់រវាង Month និង Price សម្រាប់ការលក់ផ្កាយមានសមាភាពខ្ពស់ ឬទាប ដោយយោងទៅតាមការបកស្រាយរបស់អ្នកពី scatterplot? តើវាប្រែប្រួលដែរឬទេ ប្រសិនបើអ្នកប្រើមាត្រដ្ឋានលម្អិតជាងនេះជំនួស `Month` ឧ. *day of the year* (ចំនួនថ្ងៃចាប់ពីដើមឆ្នាំ)?
✅ រាជធានី notebook ដែលបញ្ជាក់មេរៀននេះ និងមើល scatterplot រវាង ខែក្រោមតម្លៃ។ តើទិន្នន័យដែលភ្ជាប់ខែក្រោមតម្លៃសម្រាប់ការលក់ផ្លែគុជមានអនុផលចងក្រងខ្ពស់ ឬទាប តាមការបកស្រាយរូបភាពរបស់អ្នក? តើវាប្រែប្រួលបើប្រើវាស់វែងលម្អិតជាងខែដូចជា *ថ្ងៃឆ្នាំ* (ជាចំនួនថ្ងៃចាប់ពីដើមឆ្នាំ)?
នៅលើកូដខាងក្រោម យើងនឹងកត់សម្គាល់ថា យើងបានសម្អាតទិន្នន័យរួចហើយ ហើយទទួលបាន DataFrame ដែលហៅថា `new_pumpkins` ដូចក្នុងតារាងដូចខាងក្រោម៖
ក្នុងកូដខាងក្រោមវាយើងនឹងសន្មតថាយើងបានបន្ថែមសម្អាតទិន្នន័យ ហើយទទួលបាន DataFrame ឈ្មោះ `new_pumpkins` ដូចខាងក្រោម៖
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
---|-------|-----------|---------|------|---------|-----------|------------|-------
@ -100,36 +100,36 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri
73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
> កូដសម្រាប់សម្អាតទិន្នន័យមាននៅក្នុង [`notebook.ipynb`](notebook.ipynb)។ យើងបានអនុវត្តជំហានសម្អាតដូចក្នុងមេរៀនមុន ហើយបានគណនាថ្នេរជួរឈរ `DayOfYear` ដោយប្រើបន្ទាត់នេះ៖
> កូដសម្រាប់សម្អាតទិន្នន័យអាចរកបានក្នុង [`notebook.ipynb`](notebook.ipynb)។ យើងបានអនុវត្តជំហានសម្អាតដដែលដូចមេរៀនមុន ហើយបានគណនាគូបន្ទាត់ `DayOfYear` ដោយប្រើនិយមន័យ​ខាងក្រោម៖
```python
day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
```
ឥឡូវនេះដែលអ្នកមានយល់ដឹងពីគណិតវិទ្យារបស់រេសគ្រីស្យុងបន្ទាត់ អ្នកមកបង្កើតម៉ូដែល Regression ដើម្បីមើលថាតើយើងអាចទាយបានថាតើប្រអប់ផ្កាយណាដែលមានតម្លៃផ្កាយល្អបំផុត។ អ្នកដែលដែលជាវផ្កាយសម្រាប់តំបន់លំហែកាយថ្ងៃបុណ្យអាចចង់បានព័ត៌មាននេះ ដើម្បីអាចបឹតបញ្ចូលការជាវផ្កាយសម្រាប់តំបន់នោះ
ឥឡូវនេះដែលអ្នកមានការយល់ដឹងក្នងគណិតវិទ្យាក្រោយ linear regression យើងសាកល្បងបង្កើតម៉ូដែល Regression ដើម្បីមើលថាតើយើងអាចទាយថាតើកញ្ចប់ផ្លែគុជណាអាចមានតម្លៃល្អបំផុត។ មនុស្សដែលទិញផ្លែគុជសម្រាប់បរិវេទបុណ្យអាចចង់បានព័ត៌មាននេះដើម្បីអាចធ្វើអោយការទិញកញ្ចប់ផ្លែគុជមានប្រសិទ្ធភាពល្អបំផុតសម្រាប់បរិវេទ
## ស្វែងរកសមាភាព
## ការស្វែងរកការចងក្រង
[![ML for beginners - Looking for Correlation: The Key to Linear Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for beginners - Looking for Correlation: The Key to Linear Regression")
> 🎥 ចុចលើរូបភាពខាងលើសម្រាប់វីដេអូសង្ខេបអំពីសមាភាព
> 🎥 ចុចរូបភាពខាងលើសម្រាប់មើលវីដេអូសង្ខេបពីការស្វែងរកការចងក្រង
ពីមេរៀនមុនអ្នកប្រហែលជាបានឃើញថាតម្លៃមធ្យមនៃខែផ្សេងៗមានរូបរាងដូចជា:
ពីមេរៀនមុន អ្នកប្រហែលជាបានឃើញថាតម្លៃមធ្យមរបស់ខែផ្សេងៗមើលទៅដូចខាងក្រោម៖
<img alt="Average price by month" src="../../../../translated_images/km/barchart.a833ea9194346d76.webp" width="50%"/>
នេះបង្ហាញថាមានសមាភាពមួយ ហើយយើងអាចព្យាយាមបណ្តុះម៉ូដែលរេសគ្រីស្យុងបន្ទាត់ដើម្បីទាយទំនាក់ទំនងរវាង `Month` និង `Price`រវាង `DayOfYear` និង `Price`។ នេះគឺជា scatter plot បង្ហាញទំនាក់ទំនងបន្ថែម:
វាសម្លឹងបង្ហាញថា គួរតែមានការចងក្រងខ្លះ ហើយយើងអាចព្យាយាមបណ្តុះម៉ូដែល linear regression ដើម្បីទាយទំនាក់ទំនងរវាង `Month` និង `Price``DayOfYear` និង `Price`។ នេះគឺជា scatter plot បង្ហាញទំនាក់ទំនងចុងក្រោយ៖
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/km/scatter-dayofyear.bc171c189c9fd553.webp" width="50%" />
មកមើលពី `corr` មុខងារថា មានសមាភាពម្តេច
មកមើលថាតើមានការចងក្រងជាមួយ `corr` function មែនទេ
```python
print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
```
វាបង្ហាញថាសមាភាពតូចណាស់ - ប្រាំពីរយភាគរយដោយ `Month` និង -០.១៧ ដោយ `DayOfMonth` ប៉ុន្តែអាចមានទំនាក់ទំនងសំខាន់ផ្សេងទៀត។ វាហាក់ដូចជាមានក្រុមតម្លៃផ្សេងគ្នាដែលអាចទាក់ទងនឹងប្រភេទផ្កាយផ្សេងគ្នា។ ដើម្បីបញ្ជាក់ គោលដៅនេះ យើងចុះជ្រាប និងគូរផ្សេងគ្នាសម្រាប់ផ្កាយក្នុងប្រភេទតូចៗដោយបន្ទាត់ពណ៌ផ្សេងទៀត។ ដោយផ្តល់ប៉ារ៉ាម៉ែត្រ `ax` ទៅមុខងារ scatter ការគូរអាចបង្ហាញចំណុចទាំងអស់នៅលើក្រាបនេះបាន
វាបង្ហាញថាការចងក្រងមានតិច (-0.15 សម្រាប់ `Month` និង -0.17 សម្រាប់ `DayOfYear`) ប៉ុន្តែអាចមានទំនាក់ទំនងសំខាន់ផ្សេងទៀត។ វា​បង្ហាញថាមានក្រុមតម្លៃផ្សេងៗដែលទាក់ទងទៅនឹងប្រភេទផ្លែគុជផ្សេងគ្នា។ ដើម្បីបញ្ជាក់សំណងនេះ សូមគូសផ្ទាំងផ្តោតលើប្រភេទផ្លែគុជដោយពណ៌ផ្សេងៗ។ ដោយផ្តល់ផារាម៉ែត្រ `ax` ទៅ `scatter` អ្នកអាចគូសចំណុចទាំងអស់នៅលើក្រាហ្វមួយដូចគ្នា
```python
ax=None
@ -141,7 +141,7 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/km/scatter-dayofyear-color.65790faefbb9d54f.webp" width="50%" />
ការស៊ើបអង្កេតបង្ហាញថាប្រភេទផ្កាយមានឥទ្ធិពលលើតម្លៃនៃការលក់ច្រើនជាងកាលបរិច្ឆេទលក់។ យើងអាចមើលឃើញនេះជាមួយក្រាបបារ:
ការស៊ើបអង្កេតរបស់យើងបង្ហាញថាប្រភេទផ្លែគុជមានឥទ្ធិពលច្រើនជាងលើតម្លៃសរុបជាងថ្ងៃដែលលក់។ យើងអាចឃើញវាជាមួយក្រាហ្វបារ៖
```python
new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
@ -149,7 +149,7 @@ new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
<img alt="Bar graph of price vs variety" src="../../../../translated_images/km/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
ចូរយើងផ្ដោតលើប្រភេទផ្កាយតែមួយបច្ចុប្បន្ននេះ 'pie type' ហើយមើលឥទ្ធិពលនៃកាលបរិច្ឆេទលើតម្លៃ៖
សូមផ្តោតសំខាន់បច្ចុប្បន្នលើប្រភេទផ្លែគុជតែមួយគត់ 'pie type' ហើយមើលថាតើថ្ងៃមានឥទ្ធិពលដូចម្ដេចចំពោះតម្លៃ៖
```python
pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
@ -157,24 +157,24 @@ pie_pumpkins.plot.scatter('DayOfYear','Price')
```
<img alt="Scatter plot of Price vs. Day of Year" src="../../../../translated_images/km/pie-pumpkins-scatter.d14f9804a53f927e.webp" width="50%" />
បើយើងគណនាសមាភាពរវាង `Price` និង `DayOfYear` ដោយប្រើ `corr` អ្នកនឹងបានប្រហែល `-0.27` - មានន័យថាការបណ្តុះម៉ូដែលទាយត្រូវមានអត្ថន័យ
បើយើងគណនាការចងក្រងរវាង `Price` និង `DayOfYear` ដោយប្រើ `corr` function ឥឡូវនេះ អ្នកនឹងបានតម្លៃប្រហែល `-0.27` - មានន័យថាការបណ្តុះម៉ូដែលទាយទោលរួចហើយមានហត្ថពលន៍
> មុនពេលបណ្តុះម៉ូដែលរេសគ្រីស្យុងបន្ទាត់ វាជារឿងសំខាន់ក្នុងការធ្វើអោយទិន្នន័យរបស់យើងបានស្អាត។ រេសគ្រីស្យុងបន្ទាត់មិនល្អសម្រាប់តម្លៃដែលខ្វះទេ ដូច្នេះវាមានអត្ថន័យក្នុងការដកចេញចំណុចទិន្នន័យខ្វះទាំងអស់៖
> មុនពេលបណ្តុះម៉ូដែល linear regression វាម៉ត់ចត់ឲ្យប្រាកដថាទិន្នន័យស្អាត។ Linear regression មិនប្រសើរនៅពេលមានតម្លៃទំនេរ ដូច្នេះវាអាចមានអត្ថប្រយោជន៍ក្នុងការបោះបង់ជាសំណុំចំលងទាំងអស់៖
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
វិធីសាស្រ្តមួយផ្សេងទៀតគឺបំពេញតម្លៃទទេនោះជាមួយតម្លៃមធ្យមពីជួរឈរចំរៀង។
វិធីមួយផ្សេងទៀតគឺបំពេញតម្លៃទំនេរទាំងនោះជាមួយតម្លៃមធ្យមពីជួរឈរដែលទាក់ទង។
## រេសគ្រីស្យុងបន្ទាត់សាមញ្ញ
## Regression ស្រួលៗ linear
[![ML for beginners - Linear and Polynomial Regression using Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for beginners - Linear and Polynomial Regression using Scikit-learn")
> 🎥 ចុចលើរូបភាពខាងលើសម្រាប់វីដេអូសង្ខេបអំពីរេសគ្រីស្យុងបន្ទាត់ និងព៉ូលីណូមៀល
> 🎥 ចុចរូបភាពខាងលើសម្រាប់មើលវីដេអូសង្ខេបពី linear និង polynomial regression
ដើម្បីបណ្តុះម៉ូដែលរេសគ្រីស្យុងបន្ទាត់របស់យើង យើងនឹងប្រើបណ្ណាល័យ **Scikit-learn**
ដើម្បីបណ្តុះម៉ូដែល Linear Regression របស់យើង យើងនឹងប្រើបណ្ណាល័យ **Scikit-learn**
```python
from sklearn.linear_model import LinearRegression
@ -182,31 +182,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
យើងចាប់ផ្តើមដោយបំបែកតម្លៃបញ្ចូល (Features) និងលទ្ធផលដែលរំពឹងទុក (Label) ទៅជា array numpy បំបែក:
យើងចាប់ផ្ដើមដោយបំបែកកម្រិតបញ្ចូល (features) និងលទ្ធផលដែលរំពឹងទុក (label) ទៅក្នុង array numpy ផ្សេងៗ៖
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> សូមចំណាំថា យើងបានធ្វើ `reshape` លើទិន្នន័យបញ្ចូល ដើម្បីឲ្យកញ្ចប់ Linear Regression យល់បានត្រឹមត្រូវ។ Linear Regression រំពឹងថានឹងទទួល array ទំហំ 2D ដែលជួរដេកនីមួយៗជាគេហ្មត់មុខងារបញ្ចូលមួយ។ ក្នុងករណីយើងមានតែមុខងារតែមួយ ដូច្នេះត្រូវការតម្រូវ array ទៅជា N&times;1 ដែល N គឺជាចំនួនទិន្នន័យ។
> សូមចំណាំថាយើងត្រូវបានធ្វើ `reshape` លើទិន្នន័យបញ្ចូល ដើម្បីឲ្យ package Linear Regression យល់បានត្រឹមត្រូវ។ Linear Regression រងចាំ array 2D ជាកម្រិតបញ្ចូល ដែលជារៀងរាល់ជួរឈរនៃ array តំណាងថាលក្ខណៈបញ្ចូលមួយ vector។ សម្រាប់ករណីយើង មានតែបញ្ចូលមួយ ចាំបាច់ត្រូវមាន array ទំហំ N×1 ដែល N ជា​ចំនួនទិន្នន័យ។
បន្ទាប់មកយើងត្រូវបំបែកទិន្នន័យជាកញ្ចប់ហ្វឹកហាត់ និងតេស្ត ដើម្បីអាចត្រួតពិនិត្យម៉ូដែលបន្ទាប់ពីបណ្តុះ:
បន្ទាប់មក យើងត្រូវបំបែកទិន្នន័យជាក្រុមបណ្តុះបណ្តាលនិងសាកល្បង ដើម្បីពិនិត្យម៉ូដែលបន្ទាប់ពីបណ្តុះបណ្តាល៖
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
ចុងក្រោយ ការបណ្តុះម៉ូដែលរេសគ្រីស្យុងបន្ទាត់ពិតត្រឹមពីរជួរដេកកូដប៉ុណ្ណោះ។ យើងកំណត់វត្ថុ `LinearRegression` ហើយបង្វួលវាទៅលើទិន្នន័យដោយប្រើ `fit` វិធីសាស្រ្ត
ចុងក្រោយ ការបណ្តុះណែនាំម៉ូដែល Linear Regression ពិតប្រាកដត្រូវការចំនួនកូដប៉ុន្មានជួរប៉ុណ្ណោះ។ យើងកំណត់អំពើ `LinearRegression` ហើយតភ្ជាប់វាជាមួយទិន្នន័យដោយវិធីសាស្ត្រ `fit`
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
វត្ថុ `LinearRegression` បន្ទាប់ពីធ្វើការ `fit` មានគ្រប់គ្រាន់នៃអនុគមន៍រាងក្រាបដែលអាចចូលដំណើរការបានដោយប្រើគុណលក្ខណៈ `.coef_`។ ក្នុងករណីរបស់យើង មានគ្រាន់តែអនុគមន៍រាងតែមួយ ដែលគួរតែនឹងទៅជាទីប្រហែល `-0.017`។ វាជាអត្ថន័យថា តម្លៃមានទំនងធ្លាក់ខ្សែពេលវេលាបន្តិចបន្តួច ប៉ុន្តែមិនច្រើនទេ ប្រមាណពីរចិនសសម្រាប់មួយថ្ងៃ។ យើងអាចចូលដំណើរការចំណុចកាត់នៃក្រាបជាមួយអ័ក្ស Y ដោយប្រើ `lin_reg.intercept_` - វានឹងនៅជិត `21` ក្នុងករណីរបស់យើង បង្ហាញពីតម្លៃនៅដើមឆ្នាំ។
វត្ថុ `LinearRegression` បន្ទាប់ពី​បានធ្វើការបណ្តុះ​បណ្តាល (`fit`-ting) មានគោលបំណងសមាមាត្រទាំងអស់នៃសមីការបញ្ចេញលទ្ធផល ដែល​អាច​ចូលដំណើរការបាន​ដោយ​ប្រើ​អចលនវត្ថុ `.coef_`។ នៅក្នុងករណីរបស់​យើង មានគោលបំណងតែមួយ ប៉ុន្តែគួរតែប្រហែលជា `-0.017`។ នេះមានន័យថាកម្លៃ​តម្លៃ​ព្រៃដូចជានឹងធ្លាក់បន្តិចបន្តួចជាមួយ​ពេលវេលា ប៉ុន្តែមិនច្រើនពេក យ៉ាងតិចប្រហែល 2 សេន្ទក្នុងមួយថ្ងៃ។ យើងក៏អាចចូលដំណើរការចំណុច​ឆ្លុះកាត់នៃសមីកាញ្ចេញលទ្ធផលជាមួយអ័ក្ស Y បានដោយប្រើ `lin_reg.intercept_` - វានឹងប្រហែលជា `21` ក្នុងករណីយើង បង្ហាញពី​តម្លៃ​នៅដើម​ឆ្នាំ។
ដើម្បីមើលថា ម៉ូឌែលរបស់យើងមានត្រឹមត្រូវប៉ុណ្ណា យើងអាចប៉ាន់ស្មានតម្លៃនៅលើទិន្នន័យសាកល្បង ហើយបន្ទាប់មកវាស់ថាតើការព្យាករណ៍របស់យើងនៅជិតតម្លៃដែលរំពឹងទុកយ៉ាងដូចម្តេច។ វាអាចធ្វើបានដោយប្រើសន្ទស្សន៍ root mean square error (RMSE) ដែលជាគម្លាតព្រំជាមួយមធ្យមនៃចំនួនឯកតាជាដើមរវាងតម្លៃរំពឹងទុក និងតម្លៃដែលបានព្យាករណ៍
ក្នុងការមើលថាតើ​ម៉ូឌែលរបស់យើងមានភាពត្រឹមត្រូវប៉ុណ្ណា យើងអាចទាយតម្លៃលើទិន្នន័យសាកល្បង ហើយបន្ទាប់មកវាស់ឈរភាពជិតស្និទ្ធរបស់ការទាយរបស់យើងនឹងតម្លៃដែលរំពឹងទុក។ នេះអាចធ្វើបានដោយប្រើមាត្រដ្ឋាន root mean square error (RMSE) ដែលជាចម្ងាយរបស់មធ្យមនៃភាពខុសគ្នាប្រក់គ្នាជារូបបូកមួយរវាងតម្លៃរំពឹងនិងតម្លៃទាយ
```python
pred = lin_reg.predict(X_test)
@ -214,37 +214,38 @@ pred = lin_reg.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
```
កំហុសរបស់យើងមានទំនងជាច្រើនជាង២ ពិន្ទុ ដែលប្រមាណជា ~17%។ មិនល្អពេកទេ។ ទាំងនេះគឺជាសន្ទស្សន៍ដាក់ទំនាក់ទំនងគុណភាពម៉ូឌែល អាចទទួលបានជា **coefficient of determination** ដូចខាងក្រោម៖
កំហុសរបស់យើងហាក់ដូចជាប្រហែល 2 ពិន្ទុ ដែលប្រហែលជាគឺ ~17%។ មិនល្អធ្វើទេ។ មាត្រដ្ឋានជួនកាលទៀតនៃគុណភាពម៉ូឌែលគឺ **coefficient of determination** ដែលអាចទទួលបានដូចខាងក្រោម៖
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
ប្រសិនបើតម្លៃគឺ 0 វាមានន័យថា ម៉ូឌែលមិនយកទិន្នន័យអោយបានជាការបញ្ចូល និងដំណើរការជា *predictor linear អាក្រក់បំផុត* ដែលជាមធ្យមតម្លៃលទ្ធផលប៉ុណ្ណោះ។ តម្លៃ 1 មានន័យថាយើងអាចព្យាករណ៍លទ្ធផលទាំងអស់បានយ៉ាងពេញលេញ។ ក្នុងករណីរបស់យើង អនុគមន៍សង្ខេបគឺជាទីប្រហែល 0.06 ដែលគឺទាបណាស់។
បើតម្លៃគឺ 0 មានន័យថា ម៉ូឌែលមិនយកទិន្នន័យបញ្ចូលចូលក្នុងការគិតឡើយ ហើយដំណើរការជា *អ្នកទាយបន្ទាត់អាក្រក់បំផុត* ដែលគ្រាន់តែជាមធ្យមនៃលទ្ធផល។ តម្លៃ 1 មានន័យថាយើងអាចទាយបានអ្វីគ្រប់យ៉ាងយ៉ាងត្រឹមត្រូវ។ ក្នុងករណីយើង គុណហានិភ័យគឺប្រហែល 0.06 ដែលច្រើនទាប។
យើងអាចគូសបង្ហាញទិន្នន័យសាកល្បងជាមួយខ្សែ regression ដើម្បីមើលឃើញថា regression ធ្វើការយ៉ាងដូចម្តេចក្នុងករណីរបស់យើងបានកាន់តែច្បាស់
យើងក៏អាចគូរបង្ហាញទិន្នន័យសាកល្បងរួមជាមួយបន្ទាត់សមីការបញ្ចេញលទ្ធផល ដើម្បីមើលថាតើសមីការបញ្ចេញលទ្ធផលដំណើរការយ៉ាងដូចម្តេច
```python
plt.scatter(X_test,y_test)
plt.plot(X_test,pred)
```
<img alt="Linear regression" src="../../../../translated_images/km/linear-results.f7c3552c85b0ed1c.webp" width="50%" />
## Regression ប៉ូលីណូមី
## សមីការបញ្ចេញលទ្ធផល Polynomial Regression
ប្រភេទមួយផ្សេងទៀតនៃ Linear Regression គឺ Polynomial Regression។ ខណៈពេលពេលដែលពេលខ្លះ មានទំនាក់ទំនងបន្ទាត់រវាងអថេរណ៍ - ការរំលាយបំពងត្រូវបានវាស់ចំណុះកាន់តែធំ ទីផ្សារក៏កាន់តែល្អ - ពេលខ្លះទំនាក់ទំនងទាំងនេះមិនអាចត្រូវបានគូសបង្ហាញជាល្វែងឬបន្ទាត់តែមួយបានទេ។
ប្រភេទមួយទៀតនៃសមីការបញ្ចេញលទ្ធផលបន្ទាត់គឺ សមីការ Polynomial Regression។ ខណៈពេលដែលខ្លះមានទំនាក់ទំនងបន្ទាត់រវាងអថេរផ្សេងៗ - ទំហំប៉ូមពេញមួយធំពីលទ្ធផលកាន់តែលើកម្លៃ យ៉ាងណាក៏ដោយ ទំនាក់ទំនងទាំងនេះមិនអាចគូរជាបន្ទាត់ផ្លាត់ ឬបន្ទាត់ត្រង់បានទេ។
សូមមើល [ឧទាហរណ៍បន្ថែម](https://online.stat.psu.edu/stat501/lesson/9/9.8) ទិន្នន័យដែលអាចប្រើបាន Polynomial Regression
នៅទីនេះមាន [ឧទាហរណ៍បន្ថែម](https://online.stat.psu.edu/stat501/lesson/9/9.8) នៃទិន្នន័យដែលអាចប្រើ Polynomial Regression
ើល្ដងទៀតលើទំនាក់ទំនងរវាង Date និង Price។ តើ scatterplot នេះមើលទៅដូចជាគួរត្រូវបានវិភាគតាមបន្ទាត់តែមួយទេ? តើតម្លៃនៃតម្លៃតម្លើងនឹងមានការធ្លាក់ឡើង? ក្នុងករណីនេះ អ្នកអាចសាកល្បង polynomial regression។
សូមមើទំនាក់ទំនងរវាង Date និង Price ជាទៀត។ តើ scatterplot នេះមើលទៅគួរត្រូវបានវិភាគដោយបន្ទាត់ត្រង់តែមួយ? តើតម្លៃអាចប្រែប្រួលបានទេ? ក្នុងករណីនេះ អ្នកអាចសាកល្បងសមីការ polynomial regression។
ប៉ូលីណូមីគឺជាការបង្ហាញគណិតវិទ្យាដែលអាចមានអថេរណ៍មួយឬច្រើន និងគុណលក្ខណៈ
Polynomials គឺជាអប្បបរមាណ គណិតវិទ្យា ដែលប្រហែលជាមានអថេរមួយ ឬច្រើន និងគោលបំណងជាសំណុំ
Polynomial regression បង្កើតខ្សែជារបារោងក្រោងសម្រាប់ផ្គូរផ្គងទិន្នន័យប្លែកៗសម្រាប់ការព្យាករណ៍។ ក្នុងករណីរបស់យើង ប្រសិនបើយើងបញ្ចូលអថេរ `DayOfYear` កាយក្រិតទីពីរចូល ទិន្នន័យបញ្ចូល យើងអាចជួយឱ្យត្រូវបានផ្គូរផ្គងជាមួយខ្សែប្រមាណប៉ារ៉ាបល (parabolic curve) ដែលមានតម្លៃអប្បបរមានៅចំណុចមួយក្នុងឆ្នាំ។
Polynomial regression បង្កើតបន្ទាត់ពោងដើម្បីផ្គួតផ្គងទិន្នន័យមិនបន្ទាត់បានល្អជាងមុន។ ក្នុងករណីរបស់យើង ប្រសិនបើបញ្ចូលអថេរ `DayOfYear` ការប្រកួតកំណត់ក្នុងទិន្នន័យចូលទាំងមូល យើងគួរតែអាចធ្វើការបណ្តុះក្នុងទិន្នន័យជាមួយព្រីលារតិសន្ទិលក្រោមរូបមន្ត Parabolic ដែលមានអប្បបរមា​នៅចំណុចមួយក្នុងឆ្នាំ។
Scikit-learn មាន [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) ជំនួយសម្រាប់បង្រួមជំហាន ផលិតផលនៃដំណើរការទិន្នន័យជាមួយគ្នា។ **pipeline** ជាចំនងចងគ្នានៃ **estimators**។ ក្នុងករណីរបស់យើង យើងនឹងបង្កើត pipeline ដែលបន្ថែមលក្ខណៈ polynomial មុនបណ្តុះ regression:
Scikit-learn មាន API [pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) ប្រយោជន៍ក្នុងការបញ្ចូលជំហ៊ានផ្សេងៗនៃការបញ្ចូលទិន្នន័យជាមួយគ្នា។ **pipeline** គឺជាច្រវាក់នៃ **estimators**។ ក្នុងករណីយើង យើងនឹងបង្កើត pipeline ដែលដំបូងបន្ថែមលក្ខណៈ polynomial ទៅម៉ូឌែល ហើយបន្ទាប់បណ្តុះ regression៖
```python
from sklearn.preprocessing import PolynomialFeatures
@ -254,61 +255,83 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
```
ការប្រើ `PolynomialFeatures(2)` មានន័យថាយើងនឹងបញ្ចូល polynomials កំរិតទី ២ ទាំងអស់ពីទិន្នន័យបញ្ចូល។ ក្នុងករណីយើង នឹងមានតែមួយគឺគឺ `DayOfYear`<sup>2</sup> ប៉ុន្តែជិតជាមួយអថេរចំនួនពីរ X និង Y វានឹងបន្ថែម X<sup>2</sup>, XY និង Y<sup>2</sup>។ យើងអាចប្រើ polynomials កំរិតខ្ពស់ជាងនេះបានផងដែរ ប្រសិនបើយើងចង់។
Pipeline អាចប្រើបានយ៉ាងដូចគ្នាទៅនឹងវត្ថុ `LinearRegression` ដើម, គឺ៖ យើងអាច `fit` pipeline ហើយបន្ទាប់មកប្រើ `predict` ដើម្បីទទួលលទ្ធផលទាយ៖
```python
pred = pipeline.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test,pred))
print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
ដើម្បីគូរបន្ទាត់ពោងស្រទាប់ម៉ាត់ អ្នកប្រើ `np.linspace` ដើម្បីបង្កើតជួរចាប់ផ្តើមតម្លៃបញ្ចូលស្មើគ្នា ជាងការគូរតាមទិន្នន័យសាកល្បងដែលមិនមានលំដាប់ (ដែលនឹងបង្កើតបន្ទាត់ zigzag):
ការ​ប្រើប្រាស់ `PolynomialFeatures(2)` មានន័យថាយើងនឹងបញ្ចូលក polynomial ពីដំណើរការថ្នាក់ទីពីរទាំងអស់ ពីទិន្នន័យបញ្ចូល។ ក្នុងករណីរបស់យើង វានឹងមានតែ `DayOfYear`<sup>2</sup> ប៉ុណ្ណោះ ប៉ុន្តែសម្រាប់អថេរឈ្មោះ X និង Y ខុសគ្នា វានឹងបន្ថែម X<sup>2</sup> XY និង Y<sup>2</sup>។ យើងអាចប្រើ polynomial ថ្នាក់ខ្ពស់ជាងនេះប្រសិនបើចង់បាន។
```python
X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)
y_range = pipeline.predict(X_range)
Pipeline អាចប្រើដូចជាវត្ថុ `LinearRegression` ដើម គឺយើងអាច `fit` pipeline ហើយបន្ទាប់មកប្រើ `predict` ដើម្បីទទួលបានលទ្ធផល។ នេះជាក្រាផាងបង្ហាញទិន្នន័យសាកល្បង និងខ្សែប្រមាណ៖
plt.scatter(X_test, y_test)
plt.plot(X_range, y_range)
```
នេះគឺជាបន្ទាត់បង្ហាញទិន្នន័យសាកល្បង និងបន្ទាត់សន្និដ្ឋាន៖
<img alt="Polynomial regression" src="../../../../translated_images/km/poly-results.ee587348f0f1f60b.webp" width="50%" />
ដោយប្រើ Polynomial Regression យើងអាចទទួលបាន MSE ទាបបន្តិច និង coefficient determination ខ្ពស់ជាង ប៉ុន្តែមិនច្រើនខ្លាំងទេ។ យើងត្រូវយកចិត្តទុកដាក់ទៅលើលក្ខណៈផ្សេងទៀតផង!
ប្រើ Polynomial Regression អាចទទួលបានកម្លាំង RMSE ទាបជាង និងឈរភាពកំណត់ខ្ពស់ជាង ប៉ុន្តែមិនច្រើនពេកទេ។ យើងត្រូវយកចិត្តទុកដាក់លើលក្ខណៈផ្សេងទៀត!
> អ្នកអាចសង្កេតឃើញថា តម្លៃបណ្ដូលរបស់ កំបោរភាគច្រើនបង្ហាញនៅក្បែរបុណ្យ Halloween។ តើធ្វើដូចម្តេចដើម្បីពន្យល់ពីនេះ?
> អ្នកអាចមើលឃើញថាតម្លៃបន្ទះប៉ូមគឺអប្បបរមា ខណៈពេលដែលនៅជិតបុណ្យ Halloween។ តើអ្នកអាចពន្យល់បែបណា?
🎃 អបអរសាទរ អ្នកទើបបង្កើតម៉ូឌែលអាចជួយព្យាករណ៍តម្លៃកំបោរភាគបាយបាន។ អ្នកប្រហែលជាអាចធ្វើបែបនេះសម្រាប់ប្រភេទកំបោរទាំងអស់ ប៉ុន្តែវាអាចធ្វើឱ្យធុញនឿយ។ យើងនឹងរៀនពីរបៀបយកប្រភេទកំបោរចូលទៅក្នុងម៉ូឌែល!
🎃 អបអរសាទរ! អ្នកបានបង្កើតម៉ូឌែលដែលអាចជួយទាយតម្លៃបន្ទះប៉ូមសម្រាប់នំបុ័ង។ អ្នកប្រហែលជាអាចធ្វើឡើងវិញសម្រាប់ប្រភេទប៉ូមទាំងអស់ ប៉ុន្តែវាជារឿងធុញនឿយ។ យើងត្រូវស្យៀនការយល់ពីរបៀបយកភាពខុសគ្នាប្រភេទប៉ូមចូលក្នុងម៉ូឌែលរបស់យើង!
## លក្ខណៈប្រភេទ (Categorical Features)
## លក្ខណៈកាតេហ្គរី
នៅពិភពល្អ គួរតែមានសមត្ថភាពក្នុងការព្យាករណ៍តម្លៃសម្រាប់ប្រភេទកំបោរផ្សេងៗដោយប្រើម៉ូឌែលដូចគ្នា។ ក៏ប៉ុន្តែ បន្ទាត់ `Variety` ខុសគ្នាពីបន្ទាត់ដូចជា `Month` ពីព្រោះវាមានតម្លៃមិនមែនជាចំនួន។ បន្ទាត់ដូចនេះហៅថា **categorical**
នៅក្នុងពិភពដ៏ល្អបំផុត យើងចង់អាចទាយតម្លៃរបស់ប៉ូមប្រភេទផ្សេងៗ ដោយប្រើម៉ូឌែលដដែល។ ទោះយ៉ាងណា ជួរឈរដែលមានឈ្មោះ `Variety` មានភាពខុសពីជួរឈរ‌ដូចជា `Month` ពីព្រោះវាមានតម្លៃមិនមែនជាលេខ។ ជួរឈរដូចនេះហៅថា **categorical**
[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 ចុចរូបភាពខាងលើដើម្បីមើលវីដេអូចង្អុលបង្ហាញខ្លីអំពីការប្រើលក្ខណៈ categorical
> 🎥 ចុចលើរូបភាពខាងលើសម្រាប់វីដេអូសង្ខេបអំពីការប្រើលក្ខណៈកាតេហ្គរី
នៅទីនេះ អ្នកអាចមើលឃើញថាតម្លៃមធ្យមនៃតម្លៃអាស្រ័យលើប្រភេទ៖
នេះអ្នកអាចមើលឃើញថាតម្លៃមធ្យមពឹងផ្អែកលើប្រភេទ៖
<img alt="Average price by variety" src="../../../../translated_images/km/price-by-variety.744a2f9925d9bcb4.webp" width="50%" />
ដើម្បីយកប្រភេទគិតចូល ជាអង្គភាពចំនួន យើងត្រូវកំណត់វាទៅជាទ្រង់ទ្រាយចំនួនឬ **encode** វា។ មានវិធីខ្លះៗដូចនេះ
ដើម្បីយកប្រភេទចូលក្នុងការគិតយើងត្រូវបំលែងវាទៅជាទម្រង់លេខ ឬ **encode** វា។ មានវិធីជាច្រើនដែលអាចធ្វើបាន
* **numeric encoding** ងាយស្រួលបង្កើតតារាងប្រភេទផ្សេងៗ ហើយប្តូរឈ្មោះប្រភេទជាទីតាំងក្នុងតារាង។ នេះមិនល្អសម្រាប់ linear regression ព្រោះ linear regression ប្រើតម្លៃចំនួនជាក់លាក់របស់ index ហើយបូកលទ្ធផលដោយគុណនឹង coefficient មួយ។ នៅក្នុងករណីរបស់យើង ទំនាក់ទំនងរវាងលេខរៀងនិងតម្លៃមិនមែនជាបន្ទាត់ទេ ទោះបីយើងតម្រៀបតាមលំដាប់ជាការពិត
* **One-hot encoding** ជំនួបបន្ទាត់ `Variety` ជាមួយបន្ទាត់ ៤ ប្រភេទផ្សេងៗ បន្ទាត់មួយសម្រាប់ប្រភេទនីមួយៗ។ រាល់បន្ទាត់ នឹងមាន `1` ប្រសិនបើជាបន្ទាត់នៃប្រភេទនោះ និង `0` ប្រសិនបើមិនមែន។ នោះមានន័យថា មានគុណលក្ខណៈបួននៅក្នុង linear regression សម្រាប់ប្រភេទកំបោរផ្សេងៗ ដែលរួមបញ្ចូលតម្លៃចាប់ផ្តើម (ឬតម្លៃបន្ថែម) សម្រាប់ប្រភេទនោះ
* ការបំលែងលេខសាមញ្ញ (**numeric encoding**) នឹងបង្កើតតារាងនៃប្រភេទផ្សេងៗ ហើយបន្ទាប់មកប្តូរឈ្មោះប្រភេទជាកន្លែងក្នុងតារាង។ វាមិនមែនជាគំនិតល្អសម្រាប់សមីការបញ្ចេញលទ្ធផលបន្ទាត់ ទេ ព្រោះសមីការបញ្ចេញលទ្ធផលបន្ទាត់យកតម្លៃលេខនៃសន្ទស្សន៍ចូលរួមក្នុងការគណនា ហើយបូកបន្ថែមចូល ធ្វើការបូកគុណជាមួយគោលបំណងខ្លះ។ ក្នុងករណីយើង ទំនាក់ទំនងរវាងលេខសន្ទស្សន៍ និងតម្លៃពិតមិនបន្ទាត់ទេ ទោះបីយើងធ្វើអោយតំណាងលេខត្រូវត្រួតត្រាក្នុងលំដាប់ច្បាស់ក៏ដោយ
* ការបំលែងប្រភេទជា **one-hot encoding** នឹងប្តូរជួរឈរ `Variety` ទៅជាជួរឈរបួនផ្សេងៗ មួយសម្រាប់ប្រភេទនីមួយៗ។ ត្រង់ជួរឈរនីមួយនឹងមានតម្លៃ `1` ប្រសិនបើជួរដេកពាក់ព័ន្ធជាប្រភេទនោះ ហើយ `0` ផ្សេងៗគ្នា។ នេះមានន័យថានឹងមានគោលបំណងបួនក្នុងសមីការបញ្ចេញលទ្ធផលឲ្យតម្រូវតម្លៃចាប់ផ្តើម (ឬ “តម្លៃបន្ថែម”) សម្រាប់ប្រភេទប៉ូមនីមួយៗ
កូដខាងក្រោមបង្ហាញពីរបៀបបម្លែងប្រភេទទៅ one-hot encoding
កូដខាងក្រោមបង្ហាញពីរបៀបដែលយើងអាចបំលែងប្រភេទជាទម្រង់ one-hot encoded
```python
pd.get_dummies(new_pumpkins['Variety'])
```
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
----|-----------|-----------|--------------------------|----------
70 | 0 | 0 | 0 | 1
71 | 0 | 0 | 0 | 1
... | ... | ... | ... | ...
1738 | 0 | 1 | 0 | 0
1739 | 0 | 1 | 0 | 0
1740 | 0 | 1 | 0 | 0
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
ដើម្បីបណ្តុះ linear regression ជាមួយ one-hot encoded variety ជាដំណើរការបញ្ចូល បូកផ្សំពីការចាប់ផ្តើម `X` និង `y` ត្រូវបានកំណត់ត្រឹមត្រូវ៖
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
----|-----------|-----------|--------------------------|----------
70 | 0 | 0 | 0 | 1
71 | 0 | 0 | 0 | 1
... | ... | ... | ... | ...
1738 | 0 | 1 | 0 | 0
1739 | 0 | 1 | 0 | 0
1740 | 0 | 1 | 0 | 0
1741 | 0 | 1 | 0 | 0
1742 | 0 | 1 | 0 | 0
ដើម្បីបណ្តុះសមីការបញ្ចេញលទ្ធផលបន្ទាត់ប្រើបណ្តុះប្រភេទ one-hot encoded ជា input យើងគ្រាន់តែត្រូវផ្តល់ `X` និង `y` ដោយត្រឹមត្រូវ៖
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
កូដដែលនៅសល់ដូចគ្នានឹងវាដែលបានប្រើខាងលើសម្រាប់បណ្តុះ Linear Regression។ ប្រសិនបើអ្នកសាកល្បង វានឹងបង្ហាញថា mean squared error ប្រហែលដូចគ្នា ប៉ុន្តែ coefficient determination ទទួលបានខ្ពស់ជាង (~77%)។ ដើម្បីទទួលបានការព្យាករណ៍ត្រឹមត្រូវច្រើនទៀត អ្នកអាចយកលក្ខណៈ categorical ផ្សេងៗ និងលក្ខណៈចំនួនដូចជា `Month``DayOfYear` មកគិតរួម។ ដើម្បីទទួលបាន array លក្ខណៈធំមួយ អ្នកអាចប្រើ `join`
Remaining កូដដូចគ្នានឹងអ្វីដែលយើងប្រើខាងលើសម្រាប់បណ្តុះ Linear Regression។ ប្រសិនបើអ្នកសាកល្បង អ្នកនឹងឃើញថាកំហុសគន្លងគំនូសមធ្យមនៃ squared error ជិតតំលៃដដែល ប៉ុន្តាយើងទទួលបាន coefficient of determination ខ្ពស់ជាង (~77%)។ ដើម្បីទទួលបានការទាយខ្ពស់ជាងនេះទៀត យើងអាចយកលក្ខណៈ categorical ជាច្រើនជាមួយ លក្ខណៈលេខ ដូចជា `Month``DayOfYear`។ ដើម្បីធ្វើអោយជាសំណុំលក្ខណៈធំមួយ យើងអាចប្រើ `join`
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -317,69 +340,69 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
```
នៅទីនេះយើងក៏យកចិត្តទុកដាក់លើ `City` និងប្រភេទ `Package` ផងដែរ ដែលផ្តល់ RMSE 2.84 (១០.៥%) និង coefficient determination 0.94!
នៅទីនេះ យើងក៏នឹងយក `City` និងប្រភេទ `Package` ទៅគិតផង ដែលផ្តល់ឱ្យយើង MSE 2.84 (10%) និង coefficient determination 0.94!
## បង្ហាប់គ្រប់យ៉ាងរួមគ្នា
## សម្រង់ទាំងអស់ជាមួយគ្នា
ដើម្បីបង្កើតម៉ូឌែលល្អបំផុត យើងអាចប្រើទិន្នន័យបញ្ចូលរួមគ្នា (categorical one-hot encoded + numeric) ពីឧទាហរណ៍ខាងលើជាមួយ Polynomial Regression។ រួចកូដពេញលេញសម្រាប់ការងាររបស់អ្នក៖
ដើម្បីបង្កើតម៉ូឌែលល្អបំផុត យើងអាចប្រើទិន្នន័យរួម (categorical one-hot encoded + numeric) ពីឧទាហរណ៍ខាងលើ រួមជាមួយ Polynomial Regression។ នេះជាកូដពេញលេញសម្រាប់សម្រួលអ្នក៖
```python
# ប្រើប្រាស់ទិន្នន័យសម្រាប់ហាត់ប្រាណ
# បង្កើតទិន្នន័យសម្រាប់បណ្ដុះបណ្ដាល
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# បំបែកទិន្នន័យចេញជាបំណែកហាត់ប្រាណ និងសាកល្ប
# បំបែកទិន្នន័យចេញជាក្រុមបណ្ដុះបណ្ដាល និងសំណួរប្រល
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# រៀបចំ និងហាត់ប្រាណផ្លូវប្រតិបត្តិការ
# កំណត់ និងបណ្ដុះបណ្ដាលបាយឡុង
pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
pipeline.fit(X_train,y_train)
# ព្យាករណ៍លទ្ធផលសម្រាប់ទិន្នន័យសាកល្បង
# ប្រោសចេញលទ្ធផលសម្រាប់ទិន្នន័យសាកល្បង
pred = pipeline.predict(X_test)
# គណនារាង MSE និងកំណត់ការសម្រេច
mse = np.sqrt(mean_squared_error(y_test,pred))
print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
# គណនាតម្លៃ RMSE និងកំណត់ការសំរេច
rmse = mean_squared_error(y_test, pred, squared=False)
print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)')
score = pipeline.score(X_train,y_train)
print('Model determination: ', score)
```
នេះគួរតែផ្តល់ឱ្យយើងនូវ coefficient determination ខ្ពស់ជាងគេប្រមាណ 97% និង MSE=2.23 (~8% កំហុសព្យាករណ៍) ។
| ម៉ូឌែល | MSE | Coefficient determination |
|-------|-----|---------------------------|
| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 |
| `Variety` Linear | 5.24 (19.7%) | 0.77 |
| លក្ខណៈទាំងអស់ Linear | 2.84 (10.5%) | 0.94 |
នេះគួរតែផ្តល់ឲ្យយើងបាន coefficient determination ល្អបំផុតប្រហែល ៩៧% និង RMSE=2.23 (~៨% កំហុស).
| ម៉ូឌែល | RMSE | coefficient determination |
|-------|-----|-------------------------|
| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 |
| `Variety` Linear | 5.24 (19.7%) | 0.77 |
| លក្ខណៈទាំងអស់ Linear | 2.84 (10.5%) | 0.94 |
| លក្ខណៈទាំងអស់ Polynomial | 2.23 (8.25%) | 0.97 |
🏆 តើអ្នកបានធ្វើបានល្អ! អ្នកបង្កើតម៉ូឌែល Regression បួនក្នុងមួយមេរៀន ហើយបង្កើតគុណភាពម៉ូឌែលបានទៅដល់97%។ នៅក្នុងផ្នែកចុងក្រោយ នៃមេរៀន Regression អ្នកនឹងរៀនអំពី Logistic Regression ដើម្បីកំណត់ប្រភេទ។
🏆 សូមអបអរសាទរ! អ្នកបានបង្កើតម៉ូឌែល Regression បួនប្រភេទក្នុងមេរៀនមួយ ហើយកែលម្អគុណភាពម៉ូឌែលដល់ ៩៧%។ នៅផ្នែកចុងក្រោយនៃមេរៀន Regression អ្នកនឹងរៀនអំពី Logistic Regression ដើម្បីកំណត់ប្រភេទ។
---
## 🚀 បញ្ញើ
---
## 🚀ការប្រកួតប្រជែង
សាកល្បងអថេរផ្សេងៗគ្នាក្នុងកំណត់ត្រានេះ ដើម្បីមើលថាតើការតភ្ជាប់ទំនាក់ទំនងសមរម្យទៅប៉ុណ្ណា ជាមួយគុណភាពម៉ូឌែល
សាកល្បងអថេរផ្សេងៗក្នុង notebook នេះ ដើម្បីមើលថាតើ​ធរណីមាត្រភ្ជាប់​សម្រាប់ការទាយម៉ូឌែលមានភាពទាក់ទងយ៉ាងដូចម្តេច
## [ការប្រលងក្រោយមេរៀន](https://ff-quizzes.netlify.app/en/ml/)
## [សំណួរប្រឡងបន្ទាប់មេរៀន](https://ff-quizzes.netlify.app/en/ml/)
## សិក្សាផ្ទាល់ខ្លួន
## ការពិនិត្យឡើងវិញ និងរៀនដោយខ្លួនឯង
នៅក្នុងមេរៀននេះ យើងបានរៀនអំពី Linear Regression។ មានប្រភេទ Regression ផ្សេងទៀតដែលសំខាន់។ សូមអានអំពី Stepwise, Ridge, Lasso និង Elasticnet។ វគ្គសិក្សាល្អសម្រាប់រៀនបន្ថែមគឺ [វគ្គសិក្សារបស់ Stanford Statistical Learning](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
នៅក្នុងមេរៀននេះ យើងបានរៀនអំពី Linear Regression។ មានប្រភេទសមីការបញ្ចេញលទ្ធផលសំខាន់ផ្សេងទៀត។ សូមអានអំពី Stepwise, Ridge, Lasso និង Elasticnet techniques។ មេរៀនល្អសម្រាប់អនុវត្តន៍បន្ថែមគឺ [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## ការបង្រៀន
## បេសកកម្ម
[បង្កើតម៉ូឌែល](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ការព្រមាន**៖
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាប្រែសម្រួល AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ ខណៈពេលដែលយើងខិតខំប្រឹងប្រែងចំពោះភាពត្រឹមត្រូវ សូមយកចិត្តទុកដាក់ថាការប្រែសម្រួលដោយស្វ័យប្រវត្តិនោះអាចមានកំហុសឬការខ្វះខាតបាន។ ឯកសារដើមក្នុងភាសាមាតុភូមិគួរត្រូវបានយកទៅពិចារណាជាតម្រូវការសំខាន់។ សម្រាប់ព័ត៌មានសំខាន់ៗ ការប្រែសម្រួលដោយអ្នកជំនាញមនុស្សគឺត្រូវបានផ្ដល់អនុសាសន៍។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកប្រែខុសចាប់ពីការប្រើប្រាស់ការប្រែសម្រួលនេះឡើយ។
**ការបដិសេធ**:
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ ខណៈពេលដែលយើងខិតខំប្រឹងប្រែងសម្រាប់ភាពត្រឹមត្រូវ សូមយល់ឲ្យបានថាការបកប្រែដោយស្វ័យប្រវត្តិអាចមានកំហុស ឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមក្នុងភាសាមាតុភូមិគួរត្រូវបានគេយកជាជាតំណរ ម៉ោងសម្រាប់ព័ត៌មានសំខាន់ៗ គេណែនាំឲ្យប្រើការបកប្រែដោយអ្នកជំនាញ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសកើតឡើងពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -4,14 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## ការធ្វើប្រតិកម្មរស្មី និងប៉ូលីណូម្យែលសម្រាប់ការកំណត់តម្លៃស្ពឺគ្រប់លក្ខណៈ - មេរៀនទី 3\n",
"## ការតម្រឹមបន្ទាត់ និងផលវិភាគពហុវិថីសម្រាប់តម្លៃទឹកដោះគោ - មេរៀនទី 3\n",
"\n",
"ផ្ទុកបណ្ណាល័យនិងទិន្នន័យដែលត្រូវការ។ បម្លែងទិន្នន័យទៅជាតារាងដែលមានផ្នែកមួយនៃទិន្នន័យ៖\n",
"រុញបណ្ណាល័យដែលត្រូវការ និងកំពុងប្រើនូវឯកសារទិន្នន័យ។ បម្លែងទិន្នន័យទៅជា dataframe ដែលមានកំណត់ខ្លះនៃទិន្នន័យ៖\n",
"\n",
"- តែចាប់យកស្ពឺដែលមានតម្លៃតាមប៊ែស៊ែលតែប៉ុណ្ណោះ \n",
"- បម្លែងកាលបរិច្ឆេទទៅជាខែ \n",
"- គណនាតម្លៃជាមធ្យមនៃតម្លៃខ្ពស់ និងទាប \n",
"- បម្លែងតម្លៃឲ្យបង្ហាញតម្លៃតាមបរិមាណប៊ែស៊ែល\n"
"- យកតែទឹកដោះគោដែលមានតម្លៃលក់តាមប៊ូស៊ែលតែប៉ុណ្ណោះ\n",
"- បម្លែងកាលបរិច្ឆេទទៅជាខែ\n",
"- គណនាតម្លៃ​ឲ្យ​ជាជាក់ស្តែង​មធ្យមនៃតម្លៃខ្ពស់ និងទាប\n",
"- បម្លែងតម្លៃដើម្បីបញ្ចូលតម្លៃតាមបរិមាណប៊ូស៊ែល\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ប្លង់ចែកចាយរំឮកឲ្យយើងចាំថាយើងមានទិន្នន័យតែពីខែសីហារទៅដល់ខែធ្នូតែប៉ុណ្ណោះ។ យើងប្រហែលជាចាំបាច់ត្រូវការទិន្នន័យបន្ថែមដើម្បីអាចរើសសេចក្តីសន្និដ្ឋានក្នុងរបៀបបន្ទាត់បាន។\n"
"ផ្លុតចោលបង្ហាញយើងថាយើងមានទិន្នន័យខែត្រឹមតែពីខែសីហាររហូតដល់ខែធ្នូប៉ុណ្ណោះ។ យើងប្រហែលជាត្រូវការទិន្នន័យបន្ថែមទៀតដើម្បីអាចស្រាវជ្រាវផលិតផលបានយ៉ាងត្រួតត្រា។\n"
]
},
{
@ -448,7 +448,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"មកមើលថាតើមានការតភ្ជាប់គ្នាឬអត់:\n"
"មកពិនិត្យមើលថាតើមានទំនាក់ទំនងឬអត់៖\n"
]
},
{
@ -474,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ហាក់ដូចជាការតភ្ជាប់គ្នាមានតិចតួច ប៉ុន្តែមានសម្រង់ផ្សេងទៀតសំខាន់ជាងនេះ - ព្រោះចំណុចតម្លៃនៅក្នុងរូបភាពខាងលើមានក្រុមច្រើនផ្សេងគ្នា។ យើងចាំបាច់ត្រូវបង្កើតរូបភាពមួយដែលបង្ហាញពីប្រភេទផ្លែផលឪឡឹកផ្សេងៗ៖\n"
"ដូចជាការតភ្ជាប់គ្នាពិតប្រាកដមានតិចណាស់ ប៉ុន្តែក៏មានទំនាក់ទំនងសំខាន់បន្ថែមទៀតផង ព្រោះតម្លៃនៅក្នុងសម្រាំងខាងលើដូចជាមានក្រុមច្រើនចំនួនផ្សេងគ្នា។ យើងចង់បង្កើតសម្រាំងមួយដែលនឹងបង្ហាញប្រភេទផ្លែខ្ចប់ផ្សេងៗ:\n"
]
},
{
@ -538,7 +538,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"សម្រាប់ពេលវេលានេះ មកផ្តោតលើកំណត់តែប្រភេទតែមួយគត់ - **ប្រភេទប៉ាយ**។\n"
"សម្រាប់ពេលនេះ យើងមកផ្តោតលើប្រភេទមួយតែប៉ុណ្ណោះ - **ប្រភេទប៉ាយ**។\n"
]
},
{
@ -586,9 +586,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### ព្រីរេស៊ីយ៉ុងវែគ្គ\n",
"### អនុគមន៍រៀងរាល់បន្ទាត់\n",
"\n",
"យើងនឹងប្រើ Scikit Learn ដើម្បីបណ្តុះម៉ូឌែលព្រីរេស៊ីយ៉ុងវែគ្គ៖\n"
"យើងនឹងប្រើ Scikit Learn ដើម្បីហ្វឹកហាត់ម៉ូដែលអនុគមន៍រៀងរាល់បន្ទាត់៖\n"
]
},
{
@ -666,7 +666,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ចំនង់ជន្លង់នៃរបារ​អាចកំណត់បានពីមេគុណសមីការស្រប៖\n"
"ចំណេញប៉ារ៉ាលែលនៃខ្សែអាចកំណត់បានពីអនុបាគនៃការវិញ្ញាសាទ្រង់បូកដូចតទៅ៖\n"
]
},
{
@ -693,7 +693,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"យើងអាចប្រើម៉ូដែលដែលបានបណ្តុះបណ្តាលដើម្បីព្យាករណ៍តម្លៃបាន៖\n"
"យើងអាចប្រើម៉ូដែលដែលបានបណ្តុះបណ្តាលក្នុងការព្យាករណ៍តម្លៃៈ\n"
]
},
{
@ -722,11 +722,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### ប្រតិកម្មPolynomial\n",
"### ព្រីហ្សេស្យុងប៉ូលីណូមី얼\n",
"\n",
"ម្តងម្កាលទំនាក់ទំនងរវាងលក្ខណៈពិសេស និងលទ្ធផលគឺមិនមែនជាកំណត់រចនាសម្ព័ន្ធបន្ទាត់ទេ។ ឧទាហរណ៍ តម្លៃដូងអាចខ្ពស់នៅរដូវរងារ (ខែ=1,2) បន្ទាប់មកធ្លាក់ចុះនៅរដូវក្តៅ (ខែ=5-7) ហើយបន្ទាប់មកឡើងវិញ។ ការប្រែប្រួលបន្ទាត់មិនអាចរកបានទំនាក់ទំនងនេះយ៉ាងត្រឺតព្រាន់។\n",
"មួយចំនួន ពីព្រោះទំនាក់ទំនងរវាងលក្ខណៈពិសេស និងលទ្ធផល គឺជាបែបអត់បូណ៌។ ឧទាហរណ៍ តម្លៃកំពុងមានការឡើងខ្ពស់ក្នុងរដូវរងារប្រោះខែ(1,2) បន្ទាប់មកធ្លាក់ចុះក្នុងរដូវក្ដៅ(ខែ5-7) ហើយបន្ទាប់មកឡើងវិញ។ ព្រីហ្សេស្យុងបន្ទាត់មិនអាចរកបានទំនាក់ទំនងនេះយ៉ាងត្រឹមត្រូវទេ។\n",
"\n",
"នៅក្នុងករណីនេះ យើងអាចពិចារណាបន្ថែមលក្ខណៈពិសេសបន្ថែម។ វិធីសាមញ្ញគឺប្រើរូបមន្តប៉ូលីណូមីពីលក្ខណៈបញ្ចូល ដែលនឹងនាំឱ្យមាន **ប្រតិកម្មPolynomial**។ នៅក្នុង Scikit Learn យើងអាចគណនា​លក្ខណៈប៉ូលីណូមីជាមុនដោយស្វ័យប្រវត្តិនៅតាម pipeline: \n"
"នៅក្នុងករណីនេះ យើងអាចពិចារណាបន្ថែមលក្ខណៈពិសេសបន្ថែម។ វិធីសាមញ្ញគឺប្រើពូលីណូមីលពីលក្ខណៈបញ្ចូល ដែលនឹងនាំឱ្យមាន **ព្រីហ្សេស្យុងប៉ូលីណូមី얼**។ ក្នុង Scikit Learn យើងអាចគណនាពូលីណូមីលស្វ័យប្រវត្តិដោយប្រើបាព្លាយន៍: \n"
]
},
{
@ -781,22 +781,25 @@
"score = pipeline.score(X_train,y_train)\n",
"print('Model determination: ', score)\n",
"\n",
"plt.scatter(X_test,y_test)\n",
"plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
"X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n",
"y_range = pipeline.predict(X_range)\n",
"\n",
"plt.scatter(X_test, y_test)\n",
"plt.plot(X_range, y_range)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ប្រភេទការអ៊ិនគូដ\n",
"### ចំលើយកូដផ្សេងៗ\n",
"\n",
"នៅក្នុងពិភពលោកដ៏ល្អឥតខ្ចោះ យើងចង់អាចរំពឹងទុកតម្លៃសម្រាប់ប្រភេទផ្លែទំពាំងបាយជូផ្សេងៗដោយប្រើម៉ូដែលដដែល។ ដើម្បីគិតគូរប្រភេទ យើងត្រូវការបម្លែងវាទៅជាទម្រង់ខ្នាតលេខ ឬ **អ៊ិនគូដ**។ មានវិធីជាច្រើនដែលយើងអាចធ្វើបាន៖\n",
"នៅក្នុងពិភពដែលល្អបំផុត យើងចង់អាចទាយថ្លៃសម្រាប់ចំលើយកូដត pumpkin ផ្សេងៗដោយប្រើម៉ូដែលដដែល។ ដើម្បីយកចំលើយកូដទៅគិត គឺយើងត្រូវបម្លែងវាទៅជាទម្រង់គណ Orchardic ឬ **encode**។ មានវិធីជាច្រើនដែលយើងអាចធ្វើបាន៖\n",
"\n",
"* ការអ៊ិនគូដខ្នាតលេខសាមញ្ញ ដែលនឹងបង្កើតតារាងនៃប្រភេទផ្សេងៗ ហើយបន្ទាប់មកជំនួសឈ្មោះប្រភេទដោយដាក់លេខលំដាប់ក្នុងតារាងនោះ។ នេះមិនមែនជាគំនិតល្អសម្រាប់ការត្រួតពិនិត្យបែបរូបមន្តស្រឡាញ់ សម្រាប់ linear regression ទេ ព្រោះ linear regression ស្រមៃថា តម្លៃខ្នាតលេខនៃលេខលំដាប់នោះមានទំនាក់ទំនងជាមួយតម្លៃតាមលេខ ហើយតម្លៃខ្នាតលេខនោះនឹងមិនបានសម្របសម្រួលជាលេខជាមួយតម្លៃតម្លៃទេ។\n",
"* ការអ៊ិនគូដOne-hot ដែលនឹងជំនួសជួរឈរប្រភេទ `Variety` ជាជួរឈរពីរពណ៌ 4 មក 4 ជួរឈរ ភាគតែមួយសម្រាប់ប្រភេទនីមួយៗ ដែលនឹងមានលេខ 1 ប្រសិនបើជួរដេកនោះជាប្រភេទដែលបានកំណត់ ហើយ 0 ករណីផ្សេងទៀត។\n",
"* ការចំលើយកូដគណ Orchardic ដ៏សាមញ្ញ ដែលនឹងបង្កើតតារាងនៃចំលើយកូដផ្សេងៗ ហើយបន្ទាប់មកជំនួសឈ្មោះចំលើយកូដនោះដោយកន្លែងបន្ទាត់នៅក្នុងតារាងនោះ។ នេះមិនមែនជាគំនិតល្អបំផុតសម្រាប់វិធីសាស្រ្តរេហ្គ្រីស្យុងបន្ទាត់ទេ ពីព្រោះវិធីសាស្រ្តនោះគិតតម្លៃគណ Orchardic នៃកន្លែងបន្ទាត់ ដោយតម្លៃគណ Orchardic នោះមិនជាទំនាក់ទំនងគ្នាទៅនឹងតម្លៃតម្លៃនេះនោះទេ។\n",
"* ការចំលើយកូដមួយ-កំពូល (one-hot encoding) ដែលនឹងជំនួសជួរឈរឈ្មោះ `Variety` ដោយជួរឈរ ៤ ទៀត ផ្សេងៗគ្នា ដែលមួយសម្រាប់ចំលើយកូដនីមួយៗ ហើយនឹងផ្ទុកលេខ ១ ប្រសិនបើជួរបង្ហាញពីចំលើយនោះ និង ០ ផ្សេងទៀត។\n",
"\n",
"កូដខាងក្រោមបង្ហាញពីរបៀបដែលយើងអាចអ៊ិនគូដដែលមានទម្រង់ one-hot សម្រាប់ប្រភេទ៖\n"
"កូដខាងក្រោមបង្ហាញពីរបៀបដែលយើងអាចធ្វើការចំលើយកូដមួយ-កំពូលសម្រាប់ចំលើយកូដមួយបាន៖\n"
]
},
{
@ -944,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### រេស៊ែរ​ស្យុង​រېខប្រេស​ស្យុង​លើ​ប្រភេទ\n",
"### ការវិភាគបន្ទាត់លើចំរើន\n",
"\n",
"ឥឡូវនេះយើង​នឹង​ប្រើ​កូដ​ដូច​ខាង​លើ ប៉ុន្តែ​មិន​ប្រើ `DayOfYear` ទេ ប៉ុន្តែ​យើង​នឹង​ប្រើ​ប្រភេទ​ដែល​បាន​កូដ​ជា​មួយ​ភាគទាន​មួយ:\n"
"ឥឡូវនេះយើង​នឹង​ប្រើ​កូដ​ដដែល​ដូច​ខាង​លើ ប៉ុន្តែ​ប្ដូរ​ពី `DayOfYear` ទៅ​ប្រើ​ចំរើន​ដែល​បាន encode មួយ-កម្រិត​ជា​អាំង​ទឺរ‌បែបមួយ:\n"
]
},
{
@ -994,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"យើងអាចសាកល្បងប្រើលក្ខណៈពិសេសផ្សេងទៀតដោយវិធីដូចគ្នានេះ ហើយបញ្ចូលវាជាមួយលក្ខណៈសារពើភ័ណ្ឌជាឈ្មេាះ គឺដូចជា `Month` ឬ `DayOfYear`:\n"
"យើងក៏អាចព្យាយាមប្រើលក្ខណៈផ្សេងទៀតក្នុងវិធីដូចគ្នាបែបនេះ រួមបញ្ចូលជាមួយលក្ខណៈគណនាតូចៗដូចជា `Month` ឬ `DayOfYear`:\n"
]
},
{
@ -1025,9 +1028,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### បន្ទាត់ពហុប៉ូលីណូមីយ៉ាល់\n",
"### ការប្រូកទំហំប៉ូលីណូមីយ៉ាល\n",
"\n",
"បន្ទាត់ពហុប៉ូលីណូមីយ៉ាល់អាចត្រូវបានប្រើជាមួយលក្ខណៈប្រភេទដែលបានបម្លែងជារូបមន្តមួយ-កម្រិត។ កូដសម្រាប់បណ្តុះបណ្តាលបន្ទាត់ពហុប៉ូលីណូមីយ៉ាល់គឺស្អិតដូចជាដែលយើងបានឃើញខាងលើ។\n"
"ការប្រូកទំហំប៉ូលីណូមីយ៉ាលអាចត្រូវបានប្រើជាមួយលក្ខណៈប្រភេទដែលត្រូវបានកូដកម្មអ៊ុតទៅតែមួយក៏បាន។ កូដសម្រាប់បណ្តុះបណ្តាលការប្រូកទំហំប៉ូលីណូមីយ៉ាលវានឹងស្រដៀងគ្នានឹងអ្វីដែលយើងបានឃើញខាងលើ។\n"
]
},
{
@ -1074,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**ការបដិសេធ**៖\nឯកសារនេះបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ ខណៈពេលដែលពួកយើងខិតខំព្យាយាមឱ្យបានត្រឹមត្រូវ សូមជ្រាបថា ការបកប្រែដោយម៉ាស៊ីនអាចមានកំហុសឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមក្នុងភាសាបុរាណគួរត្រូវបានចាត់ទុកជាទិន្នន័យឯកសារដែលមានសុពលភាពខ្ពស់។ សម្រាប់ព័ត៌មានសំខាន់ៗ សូមណែនាំឱ្យប្រើការបកប្រែដោយមនុស្សដែលជា​អ្នកជំនាញ។ ពួកយើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសប្លែកណាមួយដែលមានចេញពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**ការបដិសេធ**៖ \nឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ ទោះបីយើងខិតខំស្វែងរកភាពត្រឹមត្រូវ ក៏សូមយល់ដឹងថាការបកប្រែដោយស្វ័យប្រវត្តិក្នុងខ្លួនវាអាចមានកំហុស ឬការមិនត្រឹមត្រូវខ្លះៗបាន។ ឯកសារដើមនៅក្នុងភាសារបស់វាគួរត្រូវបានគេយកទៅជាភាពត្រឹមត្រូវនាពេលបុរាណ។ សម្រាប់ព័ត៌មានសំខាន់ៗ ស លោកអ្នកគួរប្រើការបកប្រែដោយមនុស្សជំនាញផ្ទាល់។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការប្រាស្រ័យមិនត្រឹមត្រូវណាមួយ ដែលកើតឡើងពីការប្រើប្រាស់ការបកប្រែនេះទេ។\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],

Loading…
Cancel
Save