You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/km/5-Clustering/1-Visualize/README.md

340 lines
42 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# ការណែនាំអំពីការបែងចែកក្រុម
ការបែងចែកក្រុមគឺជាប្រភេទនៃការសិក្សាដោយគ្មានការត្រួតពិនិត្យ ([Unsupervised Learning](https://wikipedia.org/wiki/Unsupervised_learning)) ដែលទាយថា ឯកសារទិន្នន័យមិនមានស្លាក ឬថា ទិន្នន័យបញ្ចូលរបស់វាមិនត្រូវបានតភ្ជាប់ជាមួយនឹងលទ្ធផលដែលបានកំណត់ជាមុន។ វា​ប្រើ​អាល់ហ្គோரី​ធម៍​ផ្សេងៗ​ដើម្បី​ចម្រោះតាមទិន្នន័យ​គ្មាន​ស្លាក និងផ្តល់​ការបែងចែកជាក្រុម​តទៅតាមលំនាំដែលវាសង្កេតឃើញក្នុងទិន្នន័យ។
[![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You by PSquare")
> 🎥 ចុចរូបភាព​ខាងលើសម្រាប់វីដេអូ។ ខណៈពេលដែលអ្នកកំពុងរៀនម៉ាស៊ីនរៀនជាមួយការបែងចែកក្រុម សូមរីករាយជាមួយបទចម្រៀង Dance Hall នៃប្រទេស Nigeria នេះគឺជាបទចម្រៀងដែលមានការវាយតម្លៃខ្ពស់ពីឆ្នាំ 2014 ដោយ PSquare។
## [សំនួរតេស្តមុនអធិប្បាយ](https://ff-quizzes.netlify.app/en/ml/)
### ការណែនាំ
[ការបែងចែកក្រុម](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) មានប្រយោជន៍ខ្លាំងសម្រាប់ការស្វែងយល់ទិន្នន័យ។ យើងមកមើលថា តើវាអាចជួយរកឃើញនិន្នាការនិងលំនាំនៅវិធីដែលអ្នកស្តាប់ភ្លេងកម្ពុជាស៊ីវ៉េងហ្សិកប៍រមកបានយ៉ាងដូចម្តេច។
✅ ចំណាយពេលមួយនាទីគិតអំពីប្រយោជន៍នៃការបែងចែកក្រុម។ ក្នុងជីវិតពិត ការបែងចែកក្រុមកើតឡើងខណៈដែលអ្នកមានចំណុចគ្រប់យ៉ាងនៃការកក់ស្បែក ហើយត្រូវតែចម្រោះសម្លៀកបំពាក់របស់សមាជិកគ្រួសាររបស់អ្នក 🧦👕👖🩲។ ក្នុងវិទ្យាសាស្ត្រទិន្នន័យ ការបែងចែកក្រុមកើតឡើងពេលខល្បងវិភាគចំណូលចិត្តរបស់អ្នកប្រើ ហើយកំណត់លក្ខណៈនៃឯកសារទិន្នន័យគ្មានស្លាក។ ការបែងចែកក្រុម ជួយបំភ្លឺន័យចម្រង់ដូចជាប្រអប់ស្រោមជើងស្បែក។
[![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering")
> 🎥 ចុចរូបភាពខាងលើសម្រាប់វីដេអូ៖ John Guttag របស់ MIT គឺណែនាំអំពីការបែងចែកក្រុម
នៅក្នុងបរិដ្ឋានវិជ្ជាជីវៈ ការបែងចែកក្រុមអាចប្រើសម្រាប់កំណត់ចំណែកទីផ្សារ កំណត់ថា តើក្រុមអាយុណាដែលទិញមុខទំនិញណា ឧទាហរណ៍។ ប្រើសម្រាប់រកករណីប្លែកៗ ឧត្តមសម្រាប់រកការលួចបន្លំពីកម្រិតទិន្នន័យប្រតិបត្តិការកាតឥណទាន។ ឬអ្នកអាចប្រើការបែងចែកក្រុមដើម្បីច្បាស់លាស់ភាពមានមហារីកក្នុងឯកសារស្កែនវេជ្ជសាស្រ្តមួយ។
✅ ចំណាយពេលមួយនាទីគិតពីវិធីដែលអ្នកបានជួបប្រទៈជាមួយការបែងចែកក្រុមក្នុងបរិដ្ឋានធម្មជាតិ ដូចជា ធនាគារ, ពាណិជ្ជកម្មអេឡិចត្រូនិក, ឬអាជីវកម្ម។
> 🎓 ចំនុចគួរចាប់អារម្មណ៍ គឺការ​វិភាគ​ក្រុម​បានចាប់ផ្តើម​នៅ​ក្នុង វិស័យ Anthropology និង Psychology ក្នុងឆ្នាំ 1930។ តើអ្នកអាចស្រមៃថាវាត្រូវបានប្រើយ៉ាងដូចម្តេច?
ក្នុងករណីផ្សេងទៀត អ្នកអាចប្រើវាសម្រាប់បែងចែកលទ្ធផលស្វែងរក - ជាដំណាក់កាលផ្ដោតតាមតំណភ្ជាប់ទំនិញ, រូបភាព, ឬការវាយតម្លៃ។ ការបែងចែកក្រុមមានប្រយោជន៍ខ្លាំងនៅពេលដែលអ្នកមានទិន្នន័យច្រើនដែលអ្នកចង់កាត់បន្ថយ ហើយធ្វើការវិភាគជាមុខងារជ្រាលជ្រៅបន្ថែម ដូច្នេះបច្ចេកទេសនេះអាចប្រើសម្រាប់រៀនអំពីទិន្នន័យ មុនពេលថតម៉ូដែលផ្សេងៗ។
✅ បន្ទាប់ពីទិន្នន័យរបស់អ្នកត្រូវបានរៀបចំក្នុងក្រុម អ្នកបែងចែកវាជា ID ក្រុម ហើយបច្ចេកទេសនេះអាចមានប្រយោជន៍នៅពេលរក្សាអាហារូបត្ថម្ភនៃទិន្នន័យ; អ្នកអាចយោងទៅកាន់ចំណុចទិន្នន័យដោយ ID ក្រុម ជំនួសទៅនឹងប្រើទិន្នន័យដែលបង្ហាញអត្តសញ្ញាណ។ តើអ្នកអាចគិតអំពីមូលហេតុផ្សេងទៀតហើយហេតុអ្វីបានជាជ្រើសយោង ID ក្រុមជាជំនួសវត្ថុផ្សេងទៀតក្នុងក្រុមដើម្បីកំណត់វា?
បន្ថែមការយល់ដឹងរបស់អ្នកអំពីបច្ចេកទេសបែងចែកក្រុមក្នុងមេឡឺន [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott)
## ការចាប់ផ្តើមជាមួយការបែងចែកក្រុម
[Scikit-learn ផ្ដល់ជូននូវវីធីផ្សេងៗ](https://scikit-learn.org/stable/modules/clustering.html) សម្រាប់បំពេញការបែងចែកក្រុម។ ប្រភេទដែលអ្នកជ្រើសរើសនឹងអាស្រ័យលើការប្រើប្រាស់របស់អ្នក។ យោងតាមឯកសារ ចំណុចផ្សេងគ្នានៃមាគ៌ាមួយៗមានអត្ថប្រយោជន៍ខុសៗគ្នា។ នេះគឺជាបារាំងតារាងសាមញ្ញនៃវិធីសាស្ត្រ ដែលស្គីតឡើនគាំទ្រ និងករណីប្រើប្រាស់សមរម្យរបស់ពួកវា៖
| ឈ្មោះវិធីសាស្ត្រ | ករណីប្រើ |
| :--------------------------- | :----------------------------------------------------------------- |
| K-Means | គោលបំណងទូទៅ, inductive |
| Affinity propagation | ក្រុមច្រើន, មិនស្មើ, inductive |
| Mean-shift | ក្រុមច្រើន, មិនស្មើ, inductive |
| Spectral clustering | ក្រុមតិច, ស្មើ, transductive |
| Ward hierarchical clustering | ក្រុមច្រើន, ដាក់កំណត់, transductive |
| Agglomerative clustering | ក្រុមច្រើន, ដាក់កំណត់, បំបែកប្រភេទអេយូស៍ Euclidean, transductive |
| DBSCAN | គំនរផ្ទៃមិនស្មើ, ក្រុមមិនស្មើ, transductive |
| OPTICS | គំនរផ្ទៃមិនស្មើ, ក្រុមមិនស្មើជាមួយសំបុត្រផ្ទឹងខុសៗគ្នា, transductive |
| Gaussian mixtures | គំនរផ្ទៃស្មើ, inductive |
| BIRCH | ឯកសារទិន្នន័យធំជាមួយច្រេីន, inductive |
> 🎓 របៀបដែលយើងបង្កើតក្រុមពាក់ព័ន្ធយ៉ាងខ្លាំងនឹងរបៀបយើងប្រមូលចំណុចទិន្នន័យទៅជាក្រុម។ យើងមកពន្យល់ពាក្យគន្លឹះ៖
>
> 🎓 ['Transductive' ទល់នឹង 'inductive'](https://wikipedia.org/wiki/Transduction_(machine_learning))
>
> ការសន្និដ្ឋានតាមការបញ្ជូន (transductive inference) នៅលើករណីបណ្តុះបណ្តាលដែលតភ្ជាប់ទៅករណីសាកល្បងជាក់លាក់។ ការសន្និដ្ឋានអនុគមន៍ (inductive inference) គឺចេញពីករណីបណ្តុះបណ្តាលដែលដាក់ចេញជាការតំលើងទង្វើទូទៅ ហើយបន្ទាប់មកអនុវត្តទៅករណីសាកល្បង។
>
> ឧទាហរណ៍៖ សូមគំនិតថា អ្នកមានទិន្នន័យដែលមានស្លាកមួយផ្នែកប៉ុណ្ណោះ។ មានវត្ថុជារបាំង, ស៊ីឌី, និងខាំស្កិច។ ការងាររបស់អ្នកគឺផ្ដល់ស្លាកទៅវត្ថុខាំស្កិចទទេ។ ប្រសិនបើអ្នកជ្រើសរើសវិធីសាស្ត្រអនុគមន៍ អ្នកនឹងបណ្តុះម៉ូដែលស្វែងរក 'របាំង' និង 'ស៊ីឌី' ហើយផ្ដល់ស្លាកទៅទិន្នន័យគ្មានស្លាក។ វិធីសាស្ត្រនេះប្រឈមមុខនឹងការលំបាកក្នុងការបែងចែកវត្ថុពិតជាជាទម្រង់ 'កាសែត'។ វិធីសាស្ត្រតាមការបញ្ជូន ប្រញាប់ប្រញាល់ដោះស្រាយទិន្នន័យមិនស្គាល់វា ដោយវាធ្វើការបែងចែកវត្ថុដែលស្រដៀងគ្នាទៅក្នុងក្រុម ហើយបន្ទាប់មកផ្ដល់ស្លាកទៅក្រុម។ ក្នុងករណីនេះ ក្រុមអាចបង្ហាញ 'វត្ថុភ្លេងរង្វង់' និង 'វត្ថុកែង'។
>
> 🎓 ['គំនរមិនស្មើ' ទល់នឹង 'គំនរស្មើ'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)
>
> កាន់តាមគណិតវិទ្យា គំនរមិនស្មើ និង គំនរស្មើ បញ្ជាក់ពីវិធីវាស់ចម្ងាយរវាងចំណុចដោយវិធី គំនរស្មើ ([Euclidean](https://wikipedia.org/wiki/Euclidean_geometry)) ឬ គំនរមិនស្មើ (non-Euclidean)។
>
> 'គំនរស្មើ' ក្នុងបរិបទនេះគឺ Euclidean (ផ្ទៃផែនទី), ហើយគំនរមិនស្មើគឺ non-Euclidean។ តើគំនរ និង ម៉ាស៊ីនរៀនមានចំនាក់ទំនងយ៉ាងដូចម្តេច? ដោយសារ​ទាំងពីរជាវិស័យដែលដើមកំណើតពីគណិតវិទ្យា នោះវាត្រូវមានវិធីវាស់ចម្ងាយរវាងចំណុចក្នុងក្រុម ដោយរបៀបគំនរស្មើ ឬ គំនរមិនស្មើ ប្រែក្លាយតាមលក្ខណៈទិន្នន័យ។ [ចម្ងាយ Euclidean](https://wikipedia.org/wiki/Euclidean_distance) វាស់ជាប្រវែងខ្សែរវាងចំណុចពីរដោយផ្ទាល់។ [ចម្ងាយ non-Euclidean](https://wikipedia.org/wiki/Non-Euclidean_geometry) វាស់តាមខ្សែរ曲។ ប្រសិនបើទិន្នន័យរបស់អ្នក មើលទៅមិនស្ថិតលើផែនទីផ្ទាល់ នោះ អ្នកប្រហែលជាត្រូវការប្រើអាល់ហ្គរីធម៍ពិសេសសម្រាប់ដោះស្រាយវា។
>
![Flat vs Nonflat Geometry Infographic](../../../../translated_images/km/flat-nonflat.d1c8c6e2a96110c1.webp)
> រូបភាពដោយ [Dasani Madipalli](https://twitter.com/dasani_decoded)
>
> 🎓 ['ចម្ងាយ'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)
>
> ក្រុមត្រូវបានកំណត់ដោយម៉ាទ្រីចចម្ងាយរវាងចំណុច។ ចម្ងាយឈ្មោះ Euclidean គឺដោយជម្រាលតម្លៃមធ្យមនៃចំណុច និងមាន 'centroid' ឬចំណុចមួយកណ្តាល។ ចម្ងាយវាស់តាមចម្ងាយទៅកាន់ centroid នោះ។ ចម្ងាយ non-Euclidean មានការតំរៀបជាក្រុម 'clustroids' ដែលជាចំណុចអាចជិតច្រើនចំណុចផ្សេងទៀត។ Clustroids មានវិធីកំណត់ខុសៗគ្នា។
>
> 🎓 ['ដាក់កំណត់'](https://wikipedia.org/wiki/Constrained_clustering)
>
> [ការបែងចែកក្រុមដាក់កំណត់](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) បញ្ចូលការសិក្សា 'semi-supervised' ទៅក្នុងវិធានការដោយគ្មានការត្រួតពិនិត្យនេះ។ ទំនាក់ទំនងរវាងចំណុចត្រូវបានមើលថាជា 'មិនអាចភ្ជាប់' ឬ 'ត្រូវភ្ជាប់' ដើម្បីដាក់កំណត់ច្បាស់លាស់លើទិន្នន័យ។
>
> ឧទាហរណ៍៖ ប្រសិនបើអាល់ហ្គរីធម៍ត្រូវបញ្ចេញការងារនៅលើទិន្នន័យគ្មានស្លាក ឬជាក់ស្តែងខ្លះនៃស្លាក ក្រុមដែលបានបង្កើតអាចមានគុណភាពខ្សោយ។ ក្នុងឧទាហរណ៍ខាងលើ ក្រុមអាចបែងចែកជា 'វត្ថុភ្លេងរង្វង់', 'វត្ថុកែង', 'វត្ថុកោងត្រី', និង 'គុយគុយ'។ ប្រសិនប្រសើរបំពាន ន័យដូចជា ("វត្ថុត្រូវតែផលិតពីផ្លាស្ទិច", "វត្ថុខ្លះត្រូវតែផលិតសំលេង") វាអាចជួយ 'ដាក់កំណត់' អាល់ហ្គរីធម៍ឲ្យធ្វើជម្រើសល្អជាងមុន។
>
> 🎓 'ភាពខ្លាញ់'
>
> ទិន្នន័យដែល 'រញ្លៀត' ត្រូវបានគេពិនិត្យថា 'ខ្លាញ់'។ ចម្ងាយរវាងចំណុចនៅក្នុងក្រុមមួយៗអាចបង្ហាញថាខ្លាញ់ឬច្របូកច្របល់ ហើយទិន្នន័យនេះត្រូវបានវិភាគជាមួយវិធីបែងចែកក្រុមសមរម្យ។ [អត្ថបទនេះ](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) បង្ហាញពីភាពខុសគ្នារវាងការប្រើ K-Means clustering និង HDBSCAN ដើម្បីស្វែងយល់ទិន្នន័យរញ្លៀតដែលមានភាពខ្លាញ់ខុសៗគ្នា។
## អាល់ហ្គរីធម៍បែងចែកក្រុម
មានអាល់ហ្គរីធម៍បែងចែកក្រុមជាង 100 និងការប្រើប្រាស់របស់ពួកវាអាស្រ័យលើលក្ខណៈទិន្នន័យ។ យើងមកពិភាក្សាពីអាល់ហ្គរីធម៍សំខាន់ៗ៖
- **ការបែងចែកក្រុមរាយត្រី**។ ប្រសិនបើវត្ថុត្រូវបានចាត់ថ្នាក់ដោយជិតស្និទ្ធទៅកាន់វត្ថុជិតខាង ជាងទៅវត្ថុឆ្ងាយ ក្រុមនឹងបង្កើតផ្អែកលើចម្ងាយរបស់សមាជិកទៅកាន់វត្ថុផ្សេងៗ។ Scikit-learn agglomerative clustering គឺជារឿងរាយត្រី។
![Hierarchical clustering Infographic](../../../../translated_images/km/hierarchical.bf59403aa43c8c47.webp)
> រូបភាពដោយ [Dasani Madipalli](https://twitter.com/dasani_decoded)
- **ការបែងចែកក្រុមមជ្ឈមណ្ឌល**។ អាល់ហ្គរីធម៍ពេញនិយមនេះត្រូវការជ្រើសរើស 'k' ឬចំនួនក្រុមចង់បង្កើត បន្ទាប់មកអាល់ហ្គរីធម៍កំណត់ចំណុចមជ្ឈមណ្ឌលនៃក្រុមមួយ ហើយប្រមូលទិន្នន័យជុំវិញចំណុចនោះ។ [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) គឺជារូបមន្តពេញនិយមនៃការបែងចែកមជ្ឈមណ្ឌល។ ចំណុចមជ្ឈមណ្ឌលកំណត់ដោយមធ្យមដល់ជិតមុខ និង​ហៅ​វា​ឈ្មោះ​ដូច្នេះ។ ចម្ងាយចតពីក្រុមត្រូវបានធ្វើអោយតិចបំផុត។
![Centroid clustering Infographic](../../../../translated_images/km/centroid.097fde836cf6c918.webp)
> រូបភាពដោយ [Dasani Madipalli](https://twitter.com/dasani_decoded)
- **ការបែងចែកក្រុមដោយផ្អែកលើចែកចាយ**។ អាស្រ័យលើគំរូស្ថិតិ, ការបែងចែកក្រុមដោយផ្អែកលើចែកចាយផ្តោតលើការកំណត់ប្រហែលថាចំណុចទិន្នន័យជាក្រុមណាមួយ ហើយផ្តល់អោយយ៉ាងសមរម្យ។ វិធី Gaussian mixture ស្ថិតក្នុងប្រភេទនេះ។
- **ការបែងចែកក្រុមដោយផ្អែកលើភាពខ្លាញ់**។ ចំណុចទិន្នន័យត្រូវបានផ្ដាច់ក្នុងក្រុមដោយផ្អែកលើភាពខ្លាញ់ ឬ ការប្រមូលគ្នាព័ន្ធព័ន្ធ។ ចំណុចដែលឆ្ងាយពីក្រុមត្រូវបានគេចាត់ទុកជាចំណុចលំបាក ឬសំឡេងរំខាន។ DBSCAN, Mean-shift, និង OPTICS ស្ថិតក្នុងប្រភេទនេះ។
- **ការបែងចែកក្រុមបែបក្រឡា**។ សម្រាប់ឯកសារទិន្នន័យច្រើនវិមាត្រ ក្រឡាបង្កើតឡើង ហើយទិន្នន័យត្រូវបានបែងចែកទៅក្នុងក្រឡានីមួយៗ ដូច្នេះបង្កើតក្រុម។
## លំហាត់ - បែងចែកក្រុមទិន្នន័យរបស់អ្នក
ការបែងចែកក្រុមជាបច្ចេកទេសមានអត្ថប្រយោជន៍ខ្លាំងដោយរូបភាពភាពបញ្ជាក់យ៉ាងត្រឹមត្រូវ ដូច្នេះតោះចាប់ផ្តើមដោយរូបភាពទិន្នន័យភ្លេងរបស់យើង។ លំហាត់នេះនឹងជួយយើងសម្រេចថាវិធីណាមួយនៃការបែងចែកក្រុមដែលយើងគួរប្រើប្រាស់យ៉ាងមានប្រសិទ្ធភាពសម្រាប់ប្រភេទទិន្នន័យនេះ។
1. បើកឯកសារ [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) ក្នុងថតនេះ។
1. នាំចូលកញ្ចប់ `Seaborn` សម្រាប់ការតាំងរូបភាពទិន្នន័យល្អ។
```python
!pip install seaborn
```
1. បន្ថែមទិន្នន័យបទចម្រៀងពី [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv)។ បើក data frame ជាមួយទិន្នន័យពីបទចម្រៀងខ្លះៗ។ រៀបចំសម្រាប់ការស្វែងយល់ទិន្នន័យនេះដោយនាំចូលបណ្ណាល័យ និងបង្ហាញទិន្នន័យ៖
```python
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("../data/nigerian-songs.csv")
df.head()
```
ពិនិត្យមើលបន្ទាត់ដើមទិន្នន័យប៉ុន្មានបន្ទាត់៖
| | name | album | artist | artist_top_genre | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature |
| --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- |
| 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternative r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 |
| 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 |
| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 |
| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 |
| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 |
1. ទទួលបានព័ត៌មានអំពី dataframe ដោយហៅ `info()`
```python
df.info()
```
លទ្ធផលបង្ហាញដូចខាងក្រោម៖
```output
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 530 entries, 0 to 529
Data columns (total 16 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 530 non-null object
1 album 530 non-null object
2 artist 530 non-null object
3 artist_top_genre 530 non-null object
4 release_date 530 non-null int64
5 length 530 non-null int64
6 popularity 530 non-null int64
7 danceability 530 non-null float64
8 acousticness 530 non-null float64
9 energy 530 non-null float64
10 instrumentalness 530 non-null float64
11 liveness 530 non-null float64
12 loudness 530 non-null float64
13 speechiness 530 non-null float64
14 tempo 530 non-null float64
15 time_signature 530 non-null int64
dtypes: float64(8), int64(4), object(4)
memory usage: 66.4+ KB
```
1. ពិនិត្យមើលមួយទៀតសម្រាប់តម្លៃ null ដោយហៅ `isnull()` និងបញ្ជាក់ថា សរុបមានតម្លៃ 0៖
```python
df.isnull().sum()
```
មើលទៅល្អ៖
```output
name 0
album 0
artist 0
artist_top_genre 0
release_date 0
length 0
popularity 0
danceability 0
acousticness 0
energy 0
instrumentalness 0
liveness 0
loudness 0
speechiness 0
tempo 0
time_signature 0
dtype: int64
```
1. ពិពណ៍នាអំពីទិន្នន័យ៖
```python
df.describe()
```
| | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature |
| ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- |
| count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 |
| mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 |
| std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 |
| min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 |
| 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 |
| 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 |
| 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 |
| max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 |
> 🤔 ប្រសិនបើយើងកំពុងធ្វើការជាមួយ clustering ដែលជាវិធីសាស្រ្តមិនត្រូវការទិន្នន័យមានស្លាកហើយ (unsupervised method) នោះហេតុអ្វីបានជាយើងបង្ហាញទិន្នន័យនេះជាមួយស្លាក? ក្នុងដំណាក់កាលស្វែងយល់ទិន្នន័យ វាគឺមានប្រយោជន៍ ប៉ុន្តែវាមិនចាំបាច់សម្រាប់ algorithm clustering ដើម្បីដំណើរការ។ អ្នកអាចដកក្បាលជួរឈរចេញហើយយោងទៅតាមលេខជួរឈរបាន។
មើលតម្លៃទូទៅរបស់ទិន្នន័យ។ សូមចំណាំថា popularity អាចមានតម្លៃ '0' ដែលបង្ហាញពីបទចម្រៀងដែលគ្មានចំណាត់ថ្នាក់។ យើងនឹងដកវាចេញក្នុងរយៈពេលខ្លី។
1. ប្រើ barplot ដើម្បីរក genres ដែលពេញនិយមបំផុត៖
```python
import seaborn as sns
top = df['artist_top_genre'].value_counts()
plt.figure(figsize=(10,7))
sns.barplot(x=top[:5].index,y=top[:5].values)
plt.xticks(rotation=45)
plt.title('Top genres',color = 'blue')
```
![most popular](../../../../translated_images/km/popular.9c48d84b3386705f.webp)
✅ ប្រសិនបើអ្នកចង់មើលតម្លៃលំដាប់ខ្ពស់បន្ថែមទៀត គ្រាន់តែរំលាស់ `[:5]` ទៅតម្លៃធំជាងនេះ ឬយកវាចេញដើម្បីមើលទាំងអស់។
សូមចំណាំ ថា នៅពេល genre ខ្ពស់គឺពណ៌នាថា 'Missing' មានន័យថា Spotify មិនបានចាត់ថ្នាក់វា ទេ ដូចនេះយើងត្រូវដកវាចេញ។
1. ដកទិន្នន័យ missing ដោយផ.Filterវាចេញ
```python
df = df[df['artist_top_genre'] != 'Missing']
top = df['artist_top_genre'].value_counts()
plt.figure(figsize=(10,7))
sns.barplot(x=top.index,y=top.values)
plt.xticks(rotation=45)
plt.title('Top genres',color = 'blue')
```
ឥឡូវនេះពិនិត្យមើល genres ម្តងទៀត៖
![most popular](../../../../translated_images/km/all-genres.1d56ef06cefbfcd6.webp)
1. នៅទូទៅ genre បីចុងក្រោយបំផុតគ្រប់គ្រង dataset នេះ។ យើងសូមផ្តោតទៅលើ `afro dancehall`, `afropop`, និង `nigerian pop` ហើយបន្ថែមការលាងសំអាត dataset ដើម្បីដកវត្ថុដែលមានតម្លៃ popularity បាន 0 (មានន័យថាវាមិនបានចាត់ថ្នាក់ជាមួយ popularity ក្នុង dataset ហើយអាចត្រូវបានគេយល់ថាជាសំឡេងរំខានសម្រាប់គោលបំណងរបស់យើង)៖
```python
df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]
df = df[(df['popularity'] > 0)]
top = df['artist_top_genre'].value_counts()
plt.figure(figsize=(10,7))
sns.barplot(x=top.index,y=top.values)
plt.xticks(rotation=45)
plt.title('Top genres',color = 'blue')
```
1. ប្រើតេស្តមួយឆាប់រហ័សដើម្បីមើលថាតើយោងរវាងទិន្នន័យមានទំនាក់ទំនងខ្លះទេ៖
```python
corrmat = df.corr(numeric_only=True)
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corrmat, vmax=.8, square=True)
```
![correlations](../../../../translated_images/km/correlation.a9356bb798f5eea5.webp)
ទំនាក់ទំនងត្រឹមតែខ្លាំងតែរវាង `energy` និង `loudness` ប៉ុណ្ណោះ ដែលមិនចម្លែកទេ ព្រោះតន្ត្រីដែលមានសំឡេងខ្លាំងសាកសមនឹងមានថាមពលខ្លាំង។ ផ្សេងទៀត ទំនាក់ទំនងគឺខ្សោយ។ វានឹងគួរឱ្យចាប់អារម្មណ៍មើលថា algorithm clustering អាចធ្វើអ្វីបានពីទិន្នន័យនេះ។
> 🎓 សូមចំណាំថា ទំនាក់ទំនងមិនមានន័យថាមានមូលហេតុទេ! យើងមានភស្តុតាងនៃទំនាក់ទំនង ប៉ុន្តែមិនមានភស្តុតាងនៃមូលហេតុ។ គេហទំព័រស្រែកសើចមួយបានបង្ហាញរូបភាពដែលផ្តោតលើចំណុចនេះ។
តើមានការប្រមូលផ្តុំក្នុង dataset នេះជុំវិញការសង្កេតថាល្បីរបស់បទចម្រៀង និង danceability ទេ? FacetGrid បង្ហាញថាមានវង់រាងមូល ដែលដាក់បន្ទាប់គ្នា បើមិនគិតពី genre។ តើអាចជាការចូលរួមរបស់​អ្នកស្តាប់ចម្រៀងនីហ្សេរីយ៉ា នៅលើកម្រិតខ្លះនៃ danceability សម្រាប់ genre នេះទេ?
✅ សូមព្យាយាមប្រើ datapoint ផ្សេងទៀត (energy, loudness, speechiness) និង genre តន្ត្រីផ្សេងៗ មើលថាតើអ្នកអាចរកឃើញអ្វីបានខ្លះ? សូមមើលតារាង `df.describe()` ដើម្បីមើលចំនួនទូទៅនៃចំណុចទិន្នន័យ។
### អនុវត្តន៍ - ការបែងចែកទិន្នន័យ
តើតួរនៃ genre ទាំងបីនេះខុសគ្នាយ៉ាងសំខាន់ទេក្នុងការសង្កេតឱ្យឃើញការលេងភ្លេងរបស់ពួកវា ដោយផ្អែកលើ popularity?
1. ពិនិត្យការបែងចែកទិន្នន័យនៃ genre ទីបីក្នុងចំណោម popularity និង danceability តាមអ័ក្ស x និង y មួយ៖
```python
sns.set_theme(style="ticks")
g = sns.jointplot(
data=df,
x="popularity", y="danceability", hue="artist_top_genre",
kind="kde",
)
```
អ្នកអាចស្គាល់ភាពជាវង់រាងមូលនៅជុំវិញចំណុចទូទៅមួយ នូវការបែងចែកចំណុចទិន្នន័យ។
> 🎓 សូមចំណាំថា ឧទាហរណ៍នេះប្រើក្រាហ្វ KDE (Kernel Density Estimate) ដែលតំណាងឲ្យទិន្នន័យតាមរយៈវង់ភាពប្រភេទប្រសាទបន្តរបន្ត។ វាអនុញ្ញាតឲ្យយើងពិវោធន៍ទិន្នន័យនៅពេលធ្វើការជាមួយការបែងចែកច្រើន។
ទូទៅ genre ទាំងបីស្របគ្នាខ្ពស់លើការលេងភ្លេង និង popularity។ ការកំណត់ cluster ក្នុងទិន្នន័យដែលស្របគ្នាខ្សោយនេះ នឹងជាការប្រឈមមួយ៖
![distribution](../../../../translated_images/km/distribution.9be11df42356ca95.webp)
1. បង្កើត scatter plot៖
```python
sns.FacetGrid(df, hue="artist_top_genre", height=5) \
.map(plt.scatter, "popularity", "danceability") \
.add_legend()
```
scatterplot របស់អ័ក្សដូចគ្នាបង្ហាញលំនាំស្រដៀងគ្នានៃការប្រមូលផ្តុំ
![Facetgrid](../../../../translated_images/km/facetgrid.9b2e65ce707eba1f.webp)
ទូទៅសម្រាប់ clustering អ្នកអាចប្រើ scatterplot ដើម្បីបង្ហាញក្រុមទិន្នន័យ ដូច្នេះការទទួលបានជំនាញកែច្នៃ visualization ប្រភេទនេះគឺមានប្រយោជន៍ខ្ពស់។ ក្នុងមេរៀនបន្ទាប់ យើងនឹងយកទិន្នន័យដែលបានត្រៀមនេះ ហើយប្រើ k-means clustering ដើម្បីរកក្រុមទិន្នន័យដែលមានការប្រាប់គ្នានៅវិធីគួរឱ្យចាប់អារម្មណ៍។
---
## 🚀បញ្ហាប្រឈម
ក្នុងការរៀបចំសម្រាប់មេរៀនក្រោយ សូមបង្កើតតារាងអំពី algorithm clustering ផ្សេងៗដែលអ្នកអាចស្វែងរក និងប្រើនៅក្នុងបរិបទផលិតកម្ម។ តើបញ្ហាប្រឈមណាដែល clustering ព្យាយាមដោះស្រាយ?
## [សំណួរពិសោធន៍បន្ទាប់មេរៀន](https://ff-quizzes.netlify.app/en/ml/)
## ការត្រួតពិនិត្យ និងអប់រំផ្ទាល់ខ្លួន
មុនពេលអ្នកអនុវត្ត algorithm clustering ដូចដែលយើងបានរៀន វាជាគំនិតល្អក្នុងការយល់ដឹងពីសារធាតុនៃ dataset របស់អ្នក។ អានបន្ថែមពីប្រធានបទនេះ [នៅទីនេះ](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)
[អត្ថបទមានប្រយោជន៍នេះ](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) នាំអ្នកឆ្ពោះទៅកាន់វិធីផ្សេងៗនៃ algorithm clustering ដែលប្រើប្រាស់ បើយោងតាមរាងទិន្នន័យផ្សេងៗ។
## ភារកិច្ច
[ស្រាវជ្រាវអំពីការបង្ហាញឬបង្ហាញទិន្នន័យផ្សេងៗសម្រាប់ clustering](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ការបដិសេធ**:
ឯកសារនេះត្រូវបានបម្លែងភាសា ដោយប្រើសេវាបម្លែងភាសា AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ ទោះយើងខ្ញុំមានក្តីប្រាថ្នាឱ្យបានច្បាស់លាស់ តែសូមយល់ដឹងថាការបម្លែងដោយស្វ័យប្រវត្តិក៏អាចមានកំហុសឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមជាភាសាទីតាំងគួរត្រូវបានគេប្រើជាប្រភពច្បាស់លាស់។ សម្រាប់ព័ត៌មានសំខាន់ៗ សូមណែនាំឱ្យប្រើប្រាស់ការប្រែដោយមនុស្សជំនាញ។ យើងខ្ញុំមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសបន្ទាប់ពីការប្រើប្រាស់ការបម្លែងនេះនោះទេ។
<!-- CO-OP TRANSLATOR DISCLAIMER END -->