43 KiB
บทนำเกี่ยวกับการจัดกลุ่มข้อมูล
การจัดกลุ่มข้อมูล (Clustering) เป็นรูปแบบหนึ่งของ การเรียนรู้แบบไม่มีผู้สอน ซึ่งสมมติว่าชุดข้อมูลไม่มีการติดป้ายกำกับ หรือข้อมูลนำเข้าไม่ได้จับคู่กับผลลัพธ์ที่กำหนดไว้ล่วงหน้า โดยใช้หลากหลายอัลกอริทึมเพื่อจัดเรียงข้อมูลที่ไม่มีการติดป้ายกำกับ และสร้างกลุ่มตามรูปแบบที่พบในข้อมูล
🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอ ขณะคุณกำลังศึกษาเรื่องการเรียนรู้ของเครื่องด้วยการจัดกลุ่มข้อมูล ลองฟังเพลงแนว Dance Hall ของไนจีเรีย - นี่คือเพลงที่ได้รับความนิยมสูงในปี 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 | กลุ่มจำนวนมาก, ถูกจำกัด, ระยะทางแบบ non-Euclidean, แบบ transductive |
DBSCAN | รูปทรงเรขาคณิตแบบ non-flat, กลุ่มไม่เท่ากัน, แบบ transductive |
OPTICS | รูปทรงเรขาคณิตแบบ non-flat, กลุ่มไม่เท่ากันที่มีความหนาแน่นแปรผัน, แบบ transductive |
Gaussian mixtures | รูปทรงเรขาคณิตแบบ flat, แบบ inductive |
BIRCH | ชุดข้อมูลขนาดใหญ่ที่มีค่าผิดปกติ, แบบ inductive |
🎓 วิธีที่เราสร้างกลุ่มข้อมูลมีความเกี่ยวข้องกับวิธีที่เรารวบรวมจุดข้อมูลเข้าด้วยกัน ลองมาทำความเข้าใจคำศัพท์บางคำ:
🎓 'Transductive' vs. 'inductive'
การอนุมานแบบ transductive มาจากกรณีการฝึกอบรมที่สังเกตได้ซึ่งจับคู่กับกรณีทดสอบเฉพาะ การอนุมานแบบ inductive มาจากกรณีการฝึกอบรมที่จับคู่กับกฎทั่วไปซึ่งจะถูกนำไปใช้กับกรณีทดสอบในภายหลัง
ตัวอย่าง: สมมติว่าคุณมีชุดข้อมูลที่มีการติดป้ายกำกับบางส่วน บางรายการเป็น 'records', บางรายการเป็น 'cds', และบางรายการไม่มีป้ายกำกับ งานของคุณคือการให้ป้ายกำกับกับข้อมูลที่ไม่มีป้ายกำกับ หากคุณเลือกวิธี inductive คุณจะฝึกโมเดลเพื่อค้นหา 'records' และ 'cds' และนำป้ายกำกับเหล่านั้นไปใช้กับข้อมูลที่ไม่มีป้ายกำกับ วิธีนี้อาจมีปัญหาในการจัดประเภทสิ่งที่เป็น 'cassettes' ในทางกลับกัน วิธี transductive จะจัดการกับข้อมูลที่ไม่รู้จักได้อย่างมีประสิทธิภาพมากกว่า โดยทำงานเพื่อจัดกลุ่มสิ่งที่คล้ายกันเข้าด้วยกันแล้วนำป้ายกำกับไปใช้กับกลุ่ม ในกรณีนี้ กลุ่มอาจสะท้อนถึง 'สิ่งดนตรีทรงกลม' และ 'สิ่งดนตรีทรงสี่เหลี่ยม'
🎓 'Non-flat' vs. 'flat' geometry
มาจากคำศัพท์ทางคณิตศาสตร์ 'non-flat' vs. 'flat' geometry หมายถึงการวัดระยะทางระหว่างจุดโดยใช้วิธีการเรขาคณิตแบบ 'flat' (Euclidean) หรือ 'non-flat' (non-Euclidean)
'Flat' ในบริบทนี้หมายถึงเรขาคณิตแบบ Euclidean (บางส่วนของมันถูกสอนเป็นเรขาคณิต 'plane') และ non-flat หมายถึงเรขาคณิตแบบ non-Euclidean เรขาคณิตเกี่ยวข้องกับการเรียนรู้ของเครื่องอย่างไร? เนื่องจากทั้งสองสาขามีรากฐานมาจากคณิตศาสตร์ จึงต้องมีวิธีการทั่วไปในการวัดระยะทางระหว่างจุดในกลุ่ม ซึ่งสามารถทำได้ในแบบ 'flat' หรือ 'non-flat' ขึ้นอยู่กับลักษณะของข้อมูล ระยะทางแบบ Euclidean ถูกวัดเป็นความยาวของเส้นตรงระหว่างสองจุด ระยะทางแบบ non-Euclidean ถูกวัดตามเส้นโค้ง หากข้อมูลของคุณเมื่อแสดงภาพดูเหมือนจะไม่อยู่บนระนาบ คุณอาจต้องใช้อัลกอริทึมเฉพาะเพื่อจัดการกับมัน
Infographic โดย Dasani Madipalli
กลุ่มข้อมูลถูกกำหนดโดยเมทริกซ์ระยะทาง เช่น ระยะทางระหว่างจุดต่าง ๆ ระยะทางนี้สามารถวัดได้หลายวิธี กลุ่มแบบ Euclidean ถูกกำหนดโดยค่าเฉลี่ยของค่าจุด และมี 'centroid' หรือจุดศูนย์กลาง ระยะทางจึงถูกวัดโดยระยะทางไปยังจุดศูนย์กลางนั้น ระยะทางแบบ non-Euclidean หมายถึง 'clustroids' ซึ่งเป็นจุดที่ใกล้ที่สุดกับจุดอื่น ๆ Clustroids สามารถกำหนดได้หลายวิธี
การจัดกลุ่มแบบมีข้อจำกัด แนะนำการเรียนรู้แบบ 'semi-supervised' ในวิธีการแบบไม่มีผู้สอน ความสัมพันธ์ระหว่างจุดถูกกำหนดเป็น 'cannot link' หรือ 'must-link' ดังนั้นจึงมีการบังคับใช้กฎบางอย่างในชุดข้อมูล
ตัวอย่าง: หากอัลกอริทึมถูกปล่อยให้ทำงานกับชุดข้อมูลที่ไม่มีการติดป้ายกำกับหรือมีการติดป้ายกำกับบางส่วน กลุ่มที่มันสร้างขึ้นอาจมีคุณภาพต่ำ ในตัวอย่างข้างต้น กลุ่มอาจจัดกลุ่ม 'สิ่งดนตรีทรงกลม' และ 'สิ่งดนตรีทรงสี่เหลี่ยม' และ 'สิ่งทรงสามเหลี่ยม' และ 'คุกกี้' หากมีการให้ข้อจำกัด หรือกฎบางอย่าง ("สิ่งนั้นต้องทำจากพลาสติก", "สิ่งนั้นต้องสามารถผลิตเสียงดนตรีได้") สิ่งนี้สามารถช่วย 'จำกัด' อัลกอริทึมให้เลือกได้ดีขึ้น
🎓 'Density'
ข้อมูลที่ 'มีเสียงรบกวน' ถือว่าเป็นข้อมูลที่ 'หนาแน่น' ระยะทางระหว่างจุดในแต่ละกลุ่มของมันอาจพิสูจน์ได้ว่ามีความหนาแน่นมากหรือน้อย และข้อมูลนี้จำเป็นต้องได้รับการวิเคราะห์ด้วยวิธีการจัดกลุ่มที่เหมาะสม บทความนี้ แสดงให้เห็นถึงความแตกต่างระหว่างการใช้ K-Means clustering กับ HDBSCAN เพื่อสำรวจชุดข้อมูลที่มีเสียงรบกวนและความหนาแน่นของกลุ่มที่ไม่เท่ากัน
อัลกอริทึมการจัดกลุ่มข้อมูล
มีอัลกอริทึมการจัดกลุ่มข้อมูลมากกว่า 100 แบบ และการใช้งานขึ้นอยู่กับลักษณะของข้อมูลที่มีอยู่ ลองมาพูดถึงบางอันที่สำคัญ:
-
การจัดกลุ่มแบบลำดับชั้น หากวัตถุถูกจัดประเภทโดยความใกล้ชิดกับวัตถุใกล้เคียงมากกว่ากับวัตถุที่อยู่ไกลออกไป กลุ่มจะถูกสร้างขึ้นตามระยะทางของสมาชิกไปยังวัตถุอื่น ๆ การจัดกลุ่มแบบ agglomerative ของ Scikit-learn เป็นแบบลำดับชั้น
Infographic โดย Dasani Madipalli
-
การจัดกลุ่มแบบจุดศูนย์กลาง อัลกอริทึมยอดนิยมนี้ต้องการการเลือก 'k' หรือจำนวนกลุ่มที่จะสร้าง หลังจากนั้นอัลกอริทึมจะกำหนดจุดศูนย์กลางของกลุ่มและรวบรวมข้อมูลรอบจุดนั้น K-means clustering เป็นรูปแบบยอดนิยมของการจัดกลุ่มแบบจุดศูนย์กลาง จุดศูนย์กลางถูกกำหนดโดยค่าเฉลี่ยที่ใกล้ที่สุด จึงเป็นที่มาของชื่อ ระยะทางที่กำลังวัดจากกลุ่มจะถูกลดลง
Infographic โดย Dasani Madipalli
-
การจัดกลุ่มแบบอิงการกระจาย อิงจากการสร้างแบบจำลองทางสถิติ การจัดกลุ่มแบบอิงการกระจายมุ่งเน้นไปที่การกำหนดความน่าจะเป็นที่จุดข้อมูลจะอยู่ในกลุ่ม และกำหนดให้ตามนั้น วิธี Gaussian mixture เป็นส่วนหนึ่งของประเภทนี้
-
การจัดกลุ่มแบบอิงความหนาแน่น จุดข้อมูลจะถูกกำหนดให้กับกลุ่มตามความหนาแน่น หรือการรวมตัวกันรอบ ๆ กัน จุดข้อมูลที่อยู่ไกลจากกลุ่มจะถือว่าเป็นค่าผิดปกติหรือเสียงรบกวน DBSCAN, Mean-shift และ OPTICS เป็นส่วนหนึ่งของประเภทนี้
-
การจัดกลุ่มแบบอิงกริด สำหรับชุดข้อมูลหลายมิติ จะมีการสร้างกริดและข้อมูลจะถูกแบ่งออกเป็นเซลล์ของกริดนั้น ซึ่งจะสร้างกลุ่มขึ้นมา
แบบฝึกหัด - จัดกลุ่มข้อมูลของคุณ
การจัดกลุ่มข้อมูลเป็นเทคนิคที่ได้รับการสนับสนุนอย่างมากจากการแสดงภาพที่เหมาะสม ดังนั้นเรามาเริ่มต้นด้วยการแสดงภาพข้อมูลเพลงของเรา แบบฝึกหัดนี้จะช่วยให้เราตัดสินใจได้ว่าวิธีการจัดกลุ่มข้อมูลแบบใดที่ควรใช้ให้เหมาะสมที่สุดกับลักษณะของข้อมูลนี้
-
เปิดไฟล์ 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 -
เรียก
info()
เพื่อดูข้อมูลเกี่ยวกับ dataframe: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
-
ตรวจสอบค่า null โดยเรียก
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
🤔 หากเรากำลังทำงานกับการจัดกลุ่ม ซึ่งเป็นวิธีการแบบไม่มีการกำกับดูแลที่ไม่ต้องใช้ข้อมูลที่มีการติดป้ายกำกับ ทำไมเราถึงแสดงข้อมูลนี้พร้อมป้ายกำกับ? ในขั้นตอนการสำรวจข้อมูล ป้ายกำกับมีประโยชน์ แต่ไม่ได้จำเป็นสำหรับการทำงานของอัลกอริทึมการจัดกลุ่ม คุณสามารถลบหัวคอลัมน์ออกและอ้างอิงข้อมูลโดยหมายเลขคอลัมน์แทนได้
ดูค่าทั่วไปของข้อมูล สังเกตว่าความนิยมสามารถมีค่าเป็น '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 (หมายความว่าไม่ได้ถูกจัดประเภทด้วยความนิยมในชุดข้อมูลและสามารถถือว่าเป็นเสียงรบกวนสำหรับวัตถุประสงค์ของเรา):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()
เพื่อดูการกระจายทั่วไปของจุดข้อมูล
แบบฝึกหัด - การกระจายข้อมูล
แนวเพลงทั้งสามนี้แตกต่างกันอย่างมีนัยสำคัญในเรื่องการรับรู้ความสามารถในการเต้นของเพลงตามความนิยมของพวกเขาหรือไม่?
-
ตรวจสอบการกระจายข้อมูลของแนวเพลงสามอันดับแรกในเรื่องความนิยมและความสามารถในการเต้นตามแกน x และ y ที่กำหนด
sns.set_theme(style="ticks") g = sns.jointplot( data=df, x="popularity", y="danceability", hue="artist_top_genre", kind="kde", )
คุณสามารถค้นพบวงกลมที่รวมตัวกันรอบจุดรวมทั่วไป ซึ่งแสดงการกระจายของจุดข้อมูล
🎓 โปรดทราบว่าตัวอย่างนี้ใช้กราฟ KDE (Kernel Density Estimate) ซึ่งแสดงข้อมูลโดยใช้เส้นโค้งความหนาแน่นความน่าจะเป็นแบบต่อเนื่อง สิ่งนี้ช่วยให้เราตีความข้อมูลเมื่อทำงานกับการกระจายหลายแบบ
โดยทั่วไป แนวเพลงทั้งสามมีการจัดเรียงที่หลวมๆ ในเรื่องความนิยมและความสามารถในการเต้น การกำหนดกลุ่มในข้อมูลที่จัดเรียงหลวมๆ นี้จะเป็นความท้าทาย:
-
สร้าง scatter plot:
sns.FacetGrid(df, hue="artist_top_genre", height=5) \ .map(plt.scatter, "popularity", "danceability") \ .add_legend()
scatterplot ของแกนเดียวกันแสดงรูปแบบการรวมตัวที่คล้ายกัน
โดยทั่วไป สำหรับการจัดกลุ่ม คุณสามารถใช้ scatterplot เพื่อแสดงกลุ่มของข้อมูล ดังนั้นการเชี่ยวชาญการแสดงภาพประเภทนี้จึงมีประโยชน์มาก ในบทเรียนถัดไป เราจะนำข้อมูลที่กรองแล้วนี้ไปใช้กับการจัดกลุ่มแบบ k-means เพื่อค้นหากลุ่มในข้อมูลนี้ที่ดูเหมือนจะทับซ้อนกันในลักษณะที่น่าสนใจ
🚀ความท้าทาย
เพื่อเตรียมพร้อมสำหรับบทเรียนถัดไป สร้างแผนภูมิเกี่ยวกับอัลกอริทึมการจัดกลุ่มต่างๆ ที่คุณอาจค้นพบและใช้ในสภาพแวดล้อมการผลิต อัลกอริทึมการจัดกลุ่มพยายามแก้ปัญหาแบบใด?
แบบทดสอบหลังการบรรยาย
ทบทวนและศึกษาด้วยตนเอง
ก่อนที่คุณจะใช้อัลกอริทึมการจัดกลุ่ม ตามที่เราได้เรียนรู้ เป็นความคิดที่ดีที่จะเข้าใจลักษณะของชุดข้อมูลของคุณ อ่านเพิ่มเติมเกี่ยวกับหัวข้อนี้ ที่นี่
บทความที่มีประโยชน์นี้ จะพาคุณผ่านวิธีการต่างๆ ที่อัลกอริทึมการจัดกลุ่มต่างๆ ทำงาน โดยพิจารณาจากรูปร่างของข้อมูลที่แตกต่างกัน
งานที่ได้รับมอบหมาย
ค้นคว้าการแสดงภาพอื่นๆ สำหรับการจัดกลุ่ม
ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำ เอกสารต้นฉบับในภาษาต้นทางควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษาจากผู้เชี่ยวชาญ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้