|
|
3 months ago | |
|---|---|---|
| .. | ||
| solution | 7 months ago | |
| README.md | 3 months ago | |
| assignment.md | 7 months ago | |
| notebook.ipynb | 11 months ago | |
README.md
บทนำสู่การทำคลัสเตอร์
การทำคลัสเตอร์เป็นประเภทหนึ่งของ การเรียนรู้แบบไม่ต้องมีผู้สอน ที่สมมุติว่าชุดข้อมูลไม่มีป้ายกำกับ หรืออินพุตไม่มีการจับคู่กับผลลัพธ์ที่กำหนดไว้ล่วงหน้า ใช้อัลกอริธึมต่าง ๆ เพื่อจัดเรียงข้อมูลที่ไม่มีป้ายกำกับและจัดกลุ่มตามรูปแบบที่มันวิเคราะห์พบในข้อมูล
🎥 คลิกที่รูปภาพด้านบนเพื่อดูวิดีโอ ขณะที่คุณกำลังเรียนรู้แมชชีนเลิร์นนิงด้วยการทำคลัสเตอร์ ขอให้สนุกกับเพลงแนวนิการ์เจียนแดนซ์ฮอลล์ - นี่เป็นเพลงอันดับสูงจากปี 2014 โดย PSquare
แบบทดสอบก่อนบรรยาย
บทนำ
การทำคลัสเตอร์ มีประโยชน์มากสำหรับการสำรวจข้อมูล ลองดูว่ามันช่วยค้นหาแนวโน้มหรือรูปแบบในการบริโภคเพลงของผู้ฟังชาวไนจีเรียได้หรือไม่
✅ ใช้เวลาสักครู่คิดเกี่ยวกับการใช้การทำคลัสเตอร์ ในชีวิตจริงการทำคลัสเตอร์เกิดขึ้นเมื่อคุณมีกองผ้าสกปรกและต้องจัดแยกเสื้อผ้าของสมาชิกในครอบครัว 🧦👕👖🩲 ในวิทยาศาสตร์ข้อมูล การทำคลัสเตอร์เกิดขึ้นเมื่อพยายามวิเคราะห์ความชอบของผู้ใช้ หรือกำหนดลักษณะของชุดข้อมูลที่ไม่มีป้ายกำกับการทำคลัสเตอร์ในทางหนึ่งช่วยให้เข้าใจความยุ่งเหยิง เหมือนลิ้นชักใส่ถุงเท้า
🎥 คลิกที่รูปภาพด้านบนเพื่อดูวิดีโอ: John Guttag จาก MIT แนะนำการทำคลัสเตอร์
ในสถานการณ์ทางวิชาชีพ การทำคลัสเตอร์สามารถใช้กำหนดสิ่งต่าง ๆ เช่น การแบ่งส่วนตลาด การกำหนดกลุ่มอายุที่ซื้อสินค้ารายการใด อย่างเช่น อีกการใช้งานคือการตรวจจับความผิดปกติ อาจใช้ตรวจจับการฉ้อโกงจากชุดข้อมูลธุรกรรมบัตรเครดิต หรือคุณอาจใช้การทำคลัสเตอร์เพื่อตรวจหาก้อนเนื้อในชุดการสแกนทางการแพทย์
✅ ใช้เวลาคิดสักนาทีว่าคุณอาจเคยพบการทำคลัสเตอร์ใน 'สถานการณ์จริง' ในการธนาคาร อีคอมเมิร์ซ หรือธุรกิจอย่างไร
🎓 น่าสนใจว่าการวิเคราะห์คลัสเตอร์เริ่มขึ้นในสาขามนุษยวิทยาและจิตวิทยาในทศวรรษ 1930 คุณนึกภาพได้ไหมว่ามันถูกใช้ในรูปแบบใดบ้าง?
อีกทางเลือกหนึ่งคือใช้เพื่อจัดกลุ่มผลการค้นหา เช่น แยกลิงก์ช็อปปิ้ง รูปภาพ หรือรีวิว การทำคลัสเตอร์มีประโยชน์เมื่อต้องการลดขนาดชุดข้อมูลขนาดใหญ่และต้องการทำการวิเคราะห์เชิงลึกต่อไป ดังนั้นเทคนิคนี้จึงใช้สำหรับเรียนรู้เกี่ยวกับข้อมูลก่อนสร้างโมเดลอื่นๆ
✅ เมื่อข้อมูลถูกจัดเรียงในคลัสเตอร์แล้ว คุณจะกำหนดไอดีคลัสเตอร์ให้ และเทคนิคนี้ช่วยรักษาความเป็นส่วนตัวของชุดข้อมูลคุณสามารถแทนการอ้างถึงจุดข้อมูลด้วยไอดีคลัสเตอร์แทนข้อมูลที่เปิดเผยได้ คุณนึกถึงเหตุผลอื่นที่ใช้ไอดีคลัสเตอร์แทนส่วนอื่น ๆ ของคลัสเตอร์เพื่อระบุตัวตนได้ไหม?
เพิ่มพูนความเข้าใจเกี่ยวกับเทคนิคการทำคลัสเตอร์ใน โมดูลการเรียนรู้
การเริ่มต้นกับการทำคลัสเตอร์
Scikit-learn มีวิธีมากมาย สำหรับทำคลัสเตอร์ ชนิดที่เลือกใช้ขึ้นอยู่กับกรณีการใช้งานของคุณ ตามเอกสารแต่ละวิธีมีข้อดีต่างกัน นี่คือตารางสรุปวิธียอดนิยมใน Scikit-learn และการใช้งานที่เหมาะสม:
| ชื่อวิธี | กรณีใช้งาน |
|---|---|
| K-Means | วัตถุประสงค์ทั่วไป, inductive |
| Affinity propagation | คลัสเตอร์จำนวนมากและไม่เท่ากัน, inductive |
| Mean-shift | คลัสเตอร์จำนวนมากและไม่เท่ากัน, inductive |
| Spectral clustering | คลัสเตอร์จำนวนน้อยและเท่าเทียม, transductive |
| Ward hierarchical clustering | คลัสเตอร์จำนวนมากและมีข้อจำกัด, transductive |
| Agglomerative clustering | คลัสเตอร์จำนวนมาก, มีข้อจำกัด, ระยะทางไม่เป็นแบบยูคลิด, transductive |
| DBSCAN | รูปทรงไม่เรียบ, คลัสเตอร์ไม่เท่ากัน, transductive |
| OPTICS | รูปทรงไม่เรียบ, คลัสเตอร์ไม่เท่ากันซึ่งมีความหนาแน่นไม่เท่ากัน, transductive |
| Gaussian mixtures | รูปทรงเรียบ, inductive |
| BIRCH | ชุดข้อมูลใหญ่ที่มีค่าผิดปกติ, inductive |
🎓 วิธีที่เราสร้างคลัสเตอร์เกี่ยวข้องกับวิธีการรวบรวมจุดข้อมูลเข้ากลุ่มกัน ลองทำความเข้าใจคำศัพท์ต่าง ๆ:
🎓 'Transductive' กับ 'inductive'
การอนุมานแบบ transductive มาจากกรณีฝึกที่สังเกตเห็นซึ่งจับคู่กับกรณีทดสอบเฉพาะเจาะจง ในขณะที่การอนุมานแบบ inductive มาจากกรณีฝึกที่จับคู่กับกฎทั่วไปซึ่งนำไปใช้กับกรณีทดสอบ
ตัวอย่าง: สมมติว่าคุณมีชุดข้อมูลที่มีป้ายกำกับบางส่วน บางอย่างเป็น 'แผ่นเสียง' บางอย่างเป็น 'ซีดี' และบางอย่างไม่มีป้าย คุณมีหน้าที่กำหนดป้ายสำหรับข้อมูลที่ไม่มีป้าย หากใช้วิธี inductive คุณจะฝึกโมเดลให้มองหา 'แผ่นเสียง' และ 'ซีดี' แล้วนำป้ายเหล่านั้นไปใช้กับข้อมูลที่ไม่มีป้าย วิธีนี้จะมีปัญหาเมื่อต้องจัดประเภทสิ่งที่เป็น 'เทปคาสเซ็ท' ขณะที่วิธีแบบ transductive จะจัดการข้อมูลที่ไม่รู้จักนี้ได้ดีขึ้นโดยการรวบรวมวัตถุที่คล้ายกันเข้าด้วยกันและระบุป้ายในกลุ่มนั้น เช่น คลัสเตอร์อาจแยกออกเป็น 'สิ่งดนตรีทรงกลม' และ 'สิ่งดนตรีทรงสี่เหลี่ยม'
🎓 'รูปร่างไม่เรียบ' กับ 'รูปร่างเรียบ'
มาจากคำศัพท์ทางคณิตศาสตร์ รูปร่างไม่เรียบกับรูปร่างเรียบหมายถึงการวัดระยะห่างระหว่างจุดโดยวิธีรูปร่าง 'เรียบ' (Euclidean) หรือ 'ไม่เรียบ' (non-Euclidean)
'รูปร่างเรียบ' ในที่นี้หมายถึงเรขาคณิตยูคลิด (ซึ่งส่วนหนึ่งสอนเป็น 'เรขาคณิตระนาบ') และ 'รูปร่างไม่เรียบ' หมายถึงเรขาคณิตแบบไม่ใช่ยูคลิด แล้วเรขาคณิตเกี่ยวข้องกับแมชชีนเลิร์นนิงอย่างไร? เนื่องจากทั้งสองศาสตร์นี้มีรากฐานจากคณิตศาสตร์ จึงต้องมีวิธีวัดระยะห่างระหว่างจุดในคลัสเตอร์ที่เหมาะสม โดยวิธี 'เรียบ' หรือ 'ไม่เรียบ' ขึ้นอยู่กับลักษณะของข้อมูล ระยะห่างแบบยูคลิด วัดโดยความยาวเส้นตรงระหว่างจุดสองจุด ขณะที่ ระยะห่างแบบไม่ใช่ยูคลิด วัดบนเส้นโค้ง หากข้อมูลของคุณเมื่อแสดงภาพแล้วดูเหมือนไม่อยู่บนระนาบ อาจต้องใช้อัลกอริธึมเฉพาะมาแก้ไข
แผนภูมิภาพโดย Dasani Madipalli
คลัสเตอร์ถูกกำหนดโดยเมทริกซ์ระยะห่าง เช่น ระยะห่างระหว่างจุด ซึ่งสามารถวัดได้หลากหลายวิธี คลัสเตอร์แบบยูคลิดกำหนดโดยค่าเฉลี่ยของค่าจุด และมี 'จุดศูนย์กลาง' หรือเซ็นทรอยด์ ระยะห่างจึงวัดจากจุดศูนย์กลางนี้ ส่วนระยะห่างแบบไม่ใช่ยูคลิดอ้างถึง 'คลัสโตรยด์' ซึ่งเป็นจุดที่ใกล้กับจุดอื่นมากที่สุด คลัสโตรยด์สามารถกำหนดได้หลายวิธี
การทำคลัสเตอร์ที่มีข้อจำกัด คือการนำการเรียนรู้กึ่งมีผู้สอนมาใช้ในวิธีแบบไม่มีผู้สอน ความสัมพันธ์ระหว่างจุดถูกกำหนดว่า 'ไม่สามารถเชื่อมโยง' หรือ 'ต้องเชื่อมโยง' เพื่อบังคับกฎบางอย่างกับชุดข้อมูล
ตัวอย่าง: หากปล่อยให้อัลกอริธึมทำงานอย่างอิสระบนชุดข้อมูลที่ไม่มีป้ายหรือกึ่งมีป้าย คุณภาพคลัสเตอร์ที่ได้อาจต่ำ ได้คลัสเตอร์กลุ่ม 'สิ่งดนตรีทรงกลม' 'สิ่งดนตรีทรงสี่เหลี่ยม' 'สิ่งทรงสามเหลี่ยม' และ 'คุกกี้' หากมีข้อจำกัดหรือกฎ ("วัตถุต้องทำจากพลาสติก", "วัตถุต้องสามารถทำดนตรีได้") จะช่วยให้อัลกอริธึมเลือกทำงานได้ดีขึ้น
🎓 'ความหนาแน่น'
ข้อมูลที่ 'มีเสียงรบกวน' ถือว่ามีความหนาแน่น ระยะห่างระหว่างจุดในคลัสเตอร์อาจแตกต่างกันและต้องวิเคราะห์ด้วยวิธีการทำคลัสเตอร์ที่เหมาะสม บทความนี้ ชี้ให้เห็นความแตกต่างระหว่างการใช้ K-Means กับ HDBSCAN ในการสำรวจชุดข้อมูลที่มีเสียงรบกวนและความหนาแน่นในคลัสเตอร์ไม่เท่ากัน
อัลกอริธึมการทำคลัสเตอร์
มีอัลกอริธึมการทำคลัสเตอร์มากกว่า 100 แบบ และการใช้งานขึ้นอยู่กับลักษณะของข้อมูล ลองพูดถึงอัลกอริธึมหลักๆ บางตัว:
-
การทำคลัสเตอร์แบบลำดับชั้น (Hierarchical clustering) หากวัตถุถูกจัดกลุ่มโดยพิจารณาระยะห่างกับวัตถุใกล้เคียงแทนที่จะกับวัตถุที่อยู่ไกลกว่าสร้างคลัสเตอร์ขึ้นตามระยะห่างระหว่างสมาชิก Scikit-learn ใช้การทำคลัสเตอร์แบบ agglomerative ซึ่งเป็นแบบลำดับชั้น
แผนภูมิภาพโดย Dasani Madipalli
-
การทำคลัสเตอร์แบบเซ็นทรอยด์ (Centroid clustering) อัลกอริธึมยอดนิยมที่ต้องเลือก 'k' หรือจำนวนคลัสเตอร์ที่จะสร้าง หลังจากนั้นอัลกอริธึมจะกำหนดจุดศูนย์กลางของคลัสเตอร์และรวบรวมข้อมูลรอบๆ จุดนั้น K-means clustering เป็นเวอร์ชันยอดนิยมของการทำคลัสเตอร์แบบเซ็นทรอยด์ เซ็นทรอยด์ถูกกำหนดโดยค่าเฉลี่ยที่ใกล้ที่สุด ชื่อก็จึงมาจากตรงนี้ ระยะห่างกำหนดโดยระยะห่างยกกำลังสองจากคลัสเตอร์จะถูกลดให้น้อยที่สุด
แผนภูมิภาพโดย Dasani Madipalli
-
การทำคลัสเตอร์แบบฐานะการกระจายตัว (Distribution-based clustering) โดยอิงจากการจำลองทางสถิติ มุ่งเน้นการกำหนดความน่าจะเป็นที่จุดข้อมูลจะอยู่ในคลัสเตอร์ และกำหนดสมาชิกตามนั้น วิธี Gaussian mixture อยู่ในประเภทนี้
-
การทำคลัสเตอร์แบบฐานะความหนาแน่น (Density-based clustering) จุดข้อมูลถูกจัดกลุ่มตามความหนาแน่นหรือการรวมตัวกันของพวกมัน จุดที่อยู่ห่างจากกลุ่มถือเป็นค่าผิดปกติหรือเสียงรบกวน DBSCAN, Mean-shift และ OPTICS อยู่ในประเภทนี้
-
การทำคลัสเตอร์แบบตาราง (Grid-based clustering) สำหรับชุดข้อมูลหลายมิติ จะสร้างตาราง และแบ่งข้อมูลลงในเซลล์ของตารางเพื่อสร้างคลัสเตอร์
แบบฝึกหัด - ทำคลัสเตอร์ข้อมูลของคุณ
การทำคลัสเตอร์ในฐานะเทคนิคได้รับการช่วยเหลืออย่างมากจากการแสดงผลภาพ ดังนั้นเรามาเริ่มต้นด้วยการแสดงผลข้อมูลเพลงของเรา แบบฝึกหัดนี้จะช่วยเราเลือกวิธีการทำคลัสเตอร์ที่เหมาะสมกับลักษณะข้อมูลนี้มากที่สุด
-
เปิดไฟล์ notebook.ipynb ในโฟลเดอร์นี้
-
นำเข้าแพ็กเกจ
Seabornเพื่อการแสดงผลข้อมูลที่ดี!pip install seaborn -
เพิ่มข้อมูลเพลงจาก nigerian-songs.csv โหลด dataframe ที่มีข้อมูลเพลง เตรียมพร้อมสำรวจข้อมูลนี้โดยนำเข้าไลบรารีและแสดงข้อมูลออกมา:
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 -
รับข้อมูลบางอย่างเกี่ยวกับ dataframe โดยเรียกใช้
info():df.info()ผลลัพธ์จะดูเหมือนนี้:
<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 -
ตรวจสอบค่าที่หายไปอีกครั้งด้วยการเรียกใช้
isnull()และตรวจสอบผลรวมว่าคือ 0:df.isnull().sum()ดูดีมาก:
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 -
อธิบายข้อมูล:
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) ที่ไม่จำเป็นต้องใช้ข้อมูลที่มีป้ายกำกับ (labeled data) ทำไมเราถึงแสดงข้อมูลนี้พร้อมกับป้ายกำกับ? ในขั้นตอนการสำรวจข้อมูล ป้ายกำกับเหล่านี้มีประโยชน์ แต่ไม่ได้จำเป็นสำหรับอัลกอริทึมการจัดกลุ่มที่จะทำงาน คุณอาจแค่ลบหัวคอลัมน์แล้วอ้างอิงข้อมูลด้วยหมายเลขคอลัมน์แทนก็ได้
ดูค่าทั่วไปของข้อมูล โปรดสังเกตว่า popularity อาจเป็น '0' ซึ่งแสดงถึงเพลงที่ยังไม่มีการจัดอันดับ เราจะลบข้อมูลเหล่านี้ในไม่ช้า
-
ใช้กราฟแท่ง (barplot) เพื่อค้นหาแนวเพลงที่ได้รับความนิยมมากที่สุด:
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] เป็นค่ามากขึ้น หรือจะลบออกเพื่อดูทั้งหมด
โปรดทราบว่าเมื่อแนวเพลงท็อปถูกระบุว่าเป็น 'Missing' หมายความว่า Spotify ไม่ได้จัดประเภทให้ ดังนั้นเราจะลบออก
-
ลบข้อมูลที่หายไปโดยการกรองออก
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')ตอนนี้ตรวจสอบแนวเพลงอีกครั้ง:
-
โดยรวมแล้ว สามแนวเพลงที่ครองชุดข้อมูลนี้ ได้แก่
afro dancehall,afropop, และnigerian popให้โฟกัสที่แนวเพลงเหล่านี้ และกรองชุดข้อมูลเพื่อเอาข้อมูลที่มีค่า popularity เป็น 0 ออก (ซึ่งหมายถึงไม่ได้ถูกจัดประเภทด้วยค่า popularity ในชุดข้อมูลนี้ และสามารถถือเป็นสัญญาณรบกวนสำหรับวัตถุประสงค์ของเรา):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') -
ทดสอบอย่างรวดเร็วเพื่อตรวจสอบว่าข้อมูลมีความสัมพันธ์ในรูปแบบที่แข็งแรงเป็นพิเศษหรือไม่:
corrmat = df.corr(numeric_only=True) f, ax = plt.subplots(figsize=(12, 9)) sns.heatmap(corrmat, vmax=.8, square=True)ความสัมพันธ์ที่แข็งแรงเพียงอย่างเดียวคือระหว่าง
energyและloudnessซึ่งไม่แปลกใจนัก เพราะเพลงที่เสียงดังมักจะมีพลังงานสูง นอกเหนือจากนี้ ความสัมพันธ์ค่อนข้างอ่อน มันจะน่าสนใจที่จะดูว่าสิ่งที่อัลกอริทึมการจัดกลุ่มสามารถทำได้กับข้อมูลนี้🎓 โปรดทราบว่าความสัมพันธ์ไม่ได้บ่งชี้ถึงสาเหตุ! เรามีหลักฐานความสัมพันธ์แต่ไม่มีหลักฐานว่าสาเหตุเป็นไปตามนั้น เว็บไซต์ ผลงานขำขัน แสดงภาพที่เน้นจุดนี้
ในชุดข้อมูลนี้ มีการบรรจบกันในเรื่องความนิยมและความสามารถในการเต้นของเพลงหรือไม่? FacetGrid แสดงให้เห็นว่ามีวงกลมรอบศูนย์กลางที่ตรงกันโดยไม่ขึ้นกับแนวเพลง อาจเป็นไปได้ว่าความชอบของชาวไนจีเรียบรรจบกันที่ระดับความสามารถในการเต้นระดับหนึ่งสำหรับแนวเพลงนี้หรือเปล่า?
✅ ทดลองจุดข้อมูลต่าง ๆ (energy, loudness, speechiness) และแนวเพลงที่มากกว่าหรือแตกต่างกัน คุณจะค้นพบอะไร? ดูตาราง df.describe() เพื่อดูการกระจายทั่วไปของจุดข้อมูล
แบบฝึกหัด - การกระจายของข้อมูล
แนวเพลงทั้งสามนี้แตกต่างกันอย่างมีนัยสำคัญในความรู้สึกเรื่องความสามารถในการเต้นหรือไม่ ขึ้นอยู่กับความนิยมของพวกเขา?
-
ตรวจสอบการกระจายข้อมูลของสามแนวเพลงท็อปในเรื่องของความนิยมและความสามารถในการเต้นตลอดแกนนอนและแกนตั้งที่กำหนด
sns.set_theme(style="ticks") g = sns.jointplot( data=df, x="popularity", y="danceability", hue="artist_top_genre", kind="kde", )คุณจะค้นพบวงกลมรอบศูนย์กลางที่แนวร่วมแสดงการกระจายของจุดข้อมูล
🎓 โปรดทราบว่านี่คือตัวอย่างที่ใช้กราฟ KDE (Kernel Density Estimate) ซึ่งเป็นกราฟความหนาแน่นของความน่าจะเป็นแบบต่อเนื่อง ซึ่งช่วยให้เราแปรผลข้อมูลเมื่อทำงานกับหลายการกระจาย
โดยทั่วไปทั้งสามแนวเพลงจัดกลุ่มได้อย่างไม่เข้มงวดในแง่ของความนิยมและความสามารถในการเต้น การกำหนดกลุ่มในข้อมูลที่จัดวางไม่เข้มงวดนี้จะเป็นความท้าทาย:
-
สร้างกราฟกระจาย:
sns.FacetGrid(df, hue="artist_top_genre", height=5) \ .map(plt.scatter, "popularity", "danceability") \ .add_legend()กราฟกระจายของแกนเดียวกันแสดงรูปแบบการบรรจบกันในลักษณะคล้ายกัน
โดยทั่วไป สำหรับการจัดกลุ่ม คุณสามารถใช้กราฟกระจายเพื่อแสดงกลุ่มข้อมูลได้ ดังนั้นการควบคุมการสร้างภาพประเภทนี้จึงมีประโยชน์มาก บทเรียนถัดไปเราจะใช้ข้อมูลที่กรองนี้และใช้การจัดกลุ่มแบบ k-means เพื่อค้นหากลุ่มในข้อมูลนี้ที่ดูเหมือนจะทับซ้อนกันในรูปแบบที่น่าสนใจ
🚀ความท้าทาย
เพื่อเตรียมพร้อมสำหรับบทเรียนถัดไป สร้างแผนภูมิอธิบายอัลกอริทึมการจัดกลุ่มต่าง ๆ ที่คุณอาจค้นพบและใช้ในสภาพแวดล้อมการผลิต อัลกอริทึมการจัดกลุ่มเหล่านี้พยายามแก้ปัญหาอะไร?
แบบทดสอบหลังบทเรียน
ทบทวน & ศึกษาด้วยตนเอง
ก่อนที่คุณจะประยุกต์ใช้อัลกอริทึมการจัดกลุ่ม อย่างที่เราได้เรียนรู้ เป็นความคิดที่ดีที่จะเข้าใจลักษณะของชุดข้อมูลของคุณ อ่านเพิ่มเติมในหัวข้อนี้ ที่นี่
บทความที่เป็นประโยชน์นี้ จะอธิบายวิธีการต่าง ๆ ที่อัลกอริทึมการจัดกลุ่มมีพฤติกรรมแตกต่างกัน ตามรูปร่างข้อมูลที่แตกต่างกัน
การบ้าน
ค้นคว้าการแสดงผลภาพเพิ่มเติมสำหรับการจัดกลุ่ม
ปฏิเสธความรับผิดชอบ: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator ขณะที่เราพยายามให้ความถูกต้อง โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาต้นทางควรถูกพิจารณาเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ แนะนำให้ใช้การแปลโดยมนุษย์มืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดที่เกิดขึ้นจากการใช้การแปลนี้









