|
|
# ការណែនាំអំពីការបែងចែកក្រុម
|
|
|
|
|
|
ការបែងចែកក្រុមគឺជាប្រភេទនៃការសិក្សាដោយគ្មានការត្រួតពិនិត្យ ([Unsupervised Learning](https://wikipedia.org/wiki/Unsupervised_learning)) ដែលទាយថា ឯកសារទិន្នន័យមិនមានស្លាក ឬថា ទិន្នន័យបញ្ចូលរបស់វាមិនត្រូវបានតភ្ជាប់ជាមួយនឹងលទ្ធផលដែលបានកំណត់ជាមុន។ វាប្រើអាល់ហ្គோரីធម៍ផ្សេងៗដើម្បីចម្រោះតាមទិន្នន័យគ្មានស្លាក និងផ្តល់ការបែងចែកជាក្រុមតទៅតាមលំនាំដែលវាសង្កេតឃើញក្នុងទិន្នន័យ។
|
|
|
|
|
|
[](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) មានប្រយោជន៍ខ្លាំងសម្រាប់ការស្វែងយល់ទិន្នន័យ។ យើងមកមើលថា តើវាអាចជួយរកឃើញនិន្នាការនិងលំនាំនៅវិធីដែលអ្នកស្តាប់ភ្លេងកម្ពុជាស៊ីវ៉េងហ្សិកប៍រមកបានយ៉ាងដូចម្តេច។
|
|
|
|
|
|
✅ ចំណាយពេលមួយនាទីគិតអំពីប្រយោជន៍នៃការបែងចែកក្រុម។ ក្នុងជីវិតពិត ការបែងចែកក្រុមកើតឡើងខណៈដែលអ្នកមានចំណុចគ្រប់យ៉ាងនៃការកក់ស្បែក ហើយត្រូវតែចម្រោះសម្លៀកបំពាក់របស់សមាជិកគ្រួសាររបស់អ្នក 🧦👕👖🩲។ ក្នុងវិទ្យាសាស្ត្រទិន្នន័យ ការបែងចែកក្រុមកើតឡើងពេលខល្បងវិភាគចំណូលចិត្តរបស់អ្នកប្រើ ហើយកំណត់លក្ខណៈនៃឯកសារទិន្នន័យគ្មានស្លាក។ ការបែងចែកក្រុម ជួយបំភ្លឺន័យចម្រង់ដូចជាប្រអប់ស្រោមជើងស្បែក។
|
|
|
|
|
|
[](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) វាស់តាមខ្សែរ曲។ ប្រសិនបើទិន្នន័យរបស់អ្នក មើលទៅមិនស្ថិតលើផែនទីផ្ទាល់ នោះ អ្នកប្រហែលជាត្រូវការប្រើអាល់ហ្គរីធម៍ពិសេសសម្រាប់ដោះស្រាយវា។
|
|
|
>
|
|
|

|
|
|
> រូបភាពដោយ [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 គឺជារឿងរាយត្រី។
|
|
|
|
|
|

|
|
|
> រូបភាពដោយ [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
|
|
|
|
|
- **ការបែងចែកក្រុមមជ្ឈមណ្ឌល**។ អាល់ហ្គរីធម៍ពេញនិយមនេះត្រូវការជ្រើសរើស 'k' ឬចំនួនក្រុមចង់បង្កើត បន្ទាប់មកអាល់ហ្គរីធម៍កំណត់ចំណុចមជ្ឈមណ្ឌលនៃក្រុមមួយ ហើយប្រមូលទិន្នន័យជុំវិញចំណុចនោះ។ [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) គឺជារូបមន្តពេញនិយមនៃការបែងចែកមជ្ឈមណ្ឌល។ ចំណុចមជ្ឈមណ្ឌលកំណត់ដោយមធ្យមដល់ជិតមុខ និងហៅវាឈ្មោះដូច្នេះ។ ចម្ងាយចតពីក្រុមត្រូវបានធ្វើអោយតិចបំផុត។
|
|
|
|
|
|

|
|
|
> រូបភាពដោយ [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')
|
|
|
```
|
|
|
|
|
|

|
|
|
|
|
|
✅ ប្រសិនបើអ្នកចង់មើលតម្លៃលំដាប់ខ្ពស់បន្ថែមទៀត គ្រាន់តែរំលាស់ `[: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 ម្តងទៀត៖
|
|
|
|
|
|

|
|
|
|
|
|
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)
|
|
|
```
|
|
|
|
|
|

|
|
|
|
|
|
ទំនាក់ទំនងត្រឹមតែខ្លាំងតែរវាង `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 ក្នុងទិន្នន័យដែលស្របគ្នាខ្សោយនេះ នឹងជាការប្រឈមមួយ៖
|
|
|
|
|
|

|
|
|
|
|
|
1. បង្កើត scatter plot៖
|
|
|
|
|
|
```python
|
|
|
sns.FacetGrid(df, hue="artist_top_genre", height=5) \
|
|
|
.map(plt.scatter, "popularity", "danceability") \
|
|
|
.add_legend()
|
|
|
```
|
|
|
|
|
|
scatterplot របស់អ័ក្សដូចគ្នាបង្ហាញលំនាំស្រដៀងគ្នានៃការប្រមូលផ្តុំ
|
|
|
|
|
|

|
|
|
|
|
|
ទូទៅសម្រាប់ 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 --> |