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/th/5-Clustering/1-Visualize
localizeflow[bot] f273a10eeb
chore(i18n): sync translations with latest source changes (chunk 1/1, 9 changes)
3 months ago
..
solution chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 7 months ago
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 9 changes) 3 months ago
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 300 changes) 7 months ago
notebook.ipynb 🌐 Update translations via Co-op Translator 11 months ago

README.md

บทนำสู่การทำคลัสเตอร์

การทำคลัสเตอร์เป็นประเภทหนึ่งของ การเรียนรู้แบบไม่ต้องมีผู้สอน ที่สมมุติว่าชุดข้อมูลไม่มีป้ายกำกับ หรืออินพุตไม่มีการจับคู่กับผลลัพธ์ที่กำหนดไว้ล่วงหน้า ใช้อัลกอริธึมต่าง ๆ เพื่อจัดเรียงข้อมูลที่ไม่มีป้ายกำกับและจัดกลุ่มตามรูปแบบที่มันวิเคราะห์พบในข้อมูล

No One Like You by PSquare

🎥 คลิกที่รูปภาพด้านบนเพื่อดูวิดีโอ ขณะที่คุณกำลังเรียนรู้แมชชีนเลิร์นนิงด้วยการทำคลัสเตอร์ ขอให้สนุกกับเพลงแนวนิการ์เจียนแดนซ์ฮอลล์ - นี่เป็นเพลงอันดับสูงจากปี 2014 โดย PSquare

แบบทดสอบก่อนบรรยาย

บทนำ

การทำคลัสเตอร์ มีประโยชน์มากสำหรับการสำรวจข้อมูล ลองดูว่ามันช่วยค้นหาแนวโน้มหรือรูปแบบในการบริโภคเพลงของผู้ฟังชาวไนจีเรียได้หรือไม่

ใช้เวลาสักครู่คิดเกี่ยวกับการใช้การทำคลัสเตอร์ ในชีวิตจริงการทำคลัสเตอร์เกิดขึ้นเมื่อคุณมีกองผ้าสกปรกและต้องจัดแยกเสื้อผ้าของสมาชิกในครอบครัว 🧦👕👖🩲 ในวิทยาศาสตร์ข้อมูล การทำคลัสเตอร์เกิดขึ้นเมื่อพยายามวิเคราะห์ความชอบของผู้ใช้ หรือกำหนดลักษณะของชุดข้อมูลที่ไม่มีป้ายกำกับการทำคลัสเตอร์ในทางหนึ่งช่วยให้เข้าใจความยุ่งเหยิง เหมือนลิ้นชักใส่ถุงเท้า

Introduction to ML

🎥 คลิกที่รูปภาพด้านบนเพื่อดูวิดีโอ: 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)

'รูปร่างเรียบ' ในที่นี้หมายถึงเรขาคณิตยูคลิด (ซึ่งส่วนหนึ่งสอนเป็น 'เรขาคณิตระนาบ') และ 'รูปร่างไม่เรียบ' หมายถึงเรขาคณิตแบบไม่ใช่ยูคลิด แล้วเรขาคณิตเกี่ยวข้องกับแมชชีนเลิร์นนิงอย่างไร? เนื่องจากทั้งสองศาสตร์นี้มีรากฐานจากคณิตศาสตร์ จึงต้องมีวิธีวัดระยะห่างระหว่างจุดในคลัสเตอร์ที่เหมาะสม โดยวิธี 'เรียบ' หรือ 'ไม่เรียบ' ขึ้นอยู่กับลักษณะของข้อมูล ระยะห่างแบบยูคลิด วัดโดยความยาวเส้นตรงระหว่างจุดสองจุด ขณะที่ ระยะห่างแบบไม่ใช่ยูคลิด วัดบนเส้นโค้ง หากข้อมูลของคุณเมื่อแสดงภาพแล้วดูเหมือนไม่อยู่บนระนาบ อาจต้องใช้อัลกอริธึมเฉพาะมาแก้ไข

Flat vs Nonflat Geometry Infographic

แผนภูมิภาพโดย Dasani Madipalli

🎓 'ระยะห่าง'

คลัสเตอร์ถูกกำหนดโดยเมทริกซ์ระยะห่าง เช่น ระยะห่างระหว่างจุด ซึ่งสามารถวัดได้หลากหลายวิธี คลัสเตอร์แบบยูคลิดกำหนดโดยค่าเฉลี่ยของค่าจุด และมี 'จุดศูนย์กลาง' หรือเซ็นทรอยด์ ระยะห่างจึงวัดจากจุดศูนย์กลางนี้ ส่วนระยะห่างแบบไม่ใช่ยูคลิดอ้างถึง 'คลัสโตรยด์' ซึ่งเป็นจุดที่ใกล้กับจุดอื่นมากที่สุด คลัสโตรยด์สามารถกำหนดได้หลายวิธี

🎓 'มีข้อจำกัด'

การทำคลัสเตอร์ที่มีข้อจำกัด คือการนำการเรียนรู้กึ่งมีผู้สอนมาใช้ในวิธีแบบไม่มีผู้สอน ความสัมพันธ์ระหว่างจุดถูกกำหนดว่า 'ไม่สามารถเชื่อมโยง' หรือ 'ต้องเชื่อมโยง' เพื่อบังคับกฎบางอย่างกับชุดข้อมูล

ตัวอย่าง: หากปล่อยให้อัลกอริธึมทำงานอย่างอิสระบนชุดข้อมูลที่ไม่มีป้ายหรือกึ่งมีป้าย คุณภาพคลัสเตอร์ที่ได้อาจต่ำ ได้คลัสเตอร์กลุ่ม 'สิ่งดนตรีทรงกลม' 'สิ่งดนตรีทรงสี่เหลี่ยม' 'สิ่งทรงสามเหลี่ยม' และ 'คุกกี้' หากมีข้อจำกัดหรือกฎ ("วัตถุต้องทำจากพลาสติก", "วัตถุต้องสามารถทำดนตรีได้") จะช่วยให้อัลกอริธึมเลือกทำงานได้ดีขึ้น

🎓 'ความหนาแน่น'

ข้อมูลที่ 'มีเสียงรบกวน' ถือว่ามีความหนาแน่น ระยะห่างระหว่างจุดในคลัสเตอร์อาจแตกต่างกันและต้องวิเคราะห์ด้วยวิธีการทำคลัสเตอร์ที่เหมาะสม บทความนี้ ชี้ให้เห็นความแตกต่างระหว่างการใช้ K-Means กับ HDBSCAN ในการสำรวจชุดข้อมูลที่มีเสียงรบกวนและความหนาแน่นในคลัสเตอร์ไม่เท่ากัน

อัลกอริธึมการทำคลัสเตอร์

มีอัลกอริธึมการทำคลัสเตอร์มากกว่า 100 แบบ และการใช้งานขึ้นอยู่กับลักษณะของข้อมูล ลองพูดถึงอัลกอริธึมหลักๆ บางตัว:

  • การทำคลัสเตอร์แบบลำดับชั้น (Hierarchical clustering) หากวัตถุถูกจัดกลุ่มโดยพิจารณาระยะห่างกับวัตถุใกล้เคียงแทนที่จะกับวัตถุที่อยู่ไกลกว่าสร้างคลัสเตอร์ขึ้นตามระยะห่างระหว่างสมาชิก Scikit-learn ใช้การทำคลัสเตอร์แบบ agglomerative ซึ่งเป็นแบบลำดับชั้น

    Hierarchical clustering Infographic

    แผนภูมิภาพโดย Dasani Madipalli

  • การทำคลัสเตอร์แบบเซ็นทรอยด์ (Centroid clustering) อัลกอริธึมยอดนิยมที่ต้องเลือก 'k' หรือจำนวนคลัสเตอร์ที่จะสร้าง หลังจากนั้นอัลกอริธึมจะกำหนดจุดศูนย์กลางของคลัสเตอร์และรวบรวมข้อมูลรอบๆ จุดนั้น K-means clustering เป็นเวอร์ชันยอดนิยมของการทำคลัสเตอร์แบบเซ็นทรอยด์ เซ็นทรอยด์ถูกกำหนดโดยค่าเฉลี่ยที่ใกล้ที่สุด ชื่อก็จึงมาจากตรงนี้ ระยะห่างกำหนดโดยระยะห่างยกกำลังสองจากคลัสเตอร์จะถูกลดให้น้อยที่สุด

    Centroid clustering Infographic

    แผนภูมิภาพโดย Dasani Madipalli

  • การทำคลัสเตอร์แบบฐานะการกระจายตัว (Distribution-based clustering) โดยอิงจากการจำลองทางสถิติ มุ่งเน้นการกำหนดความน่าจะเป็นที่จุดข้อมูลจะอยู่ในคลัสเตอร์ และกำหนดสมาชิกตามนั้น วิธี Gaussian mixture อยู่ในประเภทนี้

  • การทำคลัสเตอร์แบบฐานะความหนาแน่น (Density-based clustering) จุดข้อมูลถูกจัดกลุ่มตามความหนาแน่นหรือการรวมตัวกันของพวกมัน จุดที่อยู่ห่างจากกลุ่มถือเป็นค่าผิดปกติหรือเสียงรบกวน DBSCAN, Mean-shift และ OPTICS อยู่ในประเภทนี้

  • การทำคลัสเตอร์แบบตาราง (Grid-based clustering) สำหรับชุดข้อมูลหลายมิติ จะสร้างตาราง และแบ่งข้อมูลลงในเซลล์ของตารางเพื่อสร้างคลัสเตอร์

แบบฝึกหัด - ทำคลัสเตอร์ข้อมูลของคุณ

การทำคลัสเตอร์ในฐานะเทคนิคได้รับการช่วยเหลืออย่างมากจากการแสดงผลภาพ ดังนั้นเรามาเริ่มต้นด้วยการแสดงผลข้อมูลเพลงของเรา แบบฝึกหัดนี้จะช่วยเราเลือกวิธีการทำคลัสเตอร์ที่เหมาะสมกับลักษณะข้อมูลนี้มากที่สุด

  1. เปิดไฟล์ notebook.ipynb ในโฟลเดอร์นี้

  2. นำเข้าแพ็กเกจ Seaborn เพื่อการแสดงผลข้อมูลที่ดี

    !pip install seaborn
    
  3. เพิ่มข้อมูลเพลงจาก 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
  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
    
  5. ตรวจสอบค่าที่หายไปอีกครั้งด้วยการเรียกใช้ 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
    
  6. อธิบายข้อมูล:

    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' ซึ่งแสดงถึงเพลงที่ยังไม่มีการจัดอันดับ เราจะลบข้อมูลเหล่านี้ในไม่ช้า

  1. ใช้กราฟแท่ง (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')
    

    most popular

หากคุณต้องการดูค่าท็อปมากกว่านี้ ให้เปลี่ยน [:5] เป็นค่ามากขึ้น หรือจะลบออกเพื่อดูทั้งหมด

โปรดทราบว่าเมื่อแนวเพลงท็อปถูกระบุว่าเป็น 'Missing' หมายความว่า Spotify ไม่ได้จัดประเภทให้ ดังนั้นเราจะลบออก

  1. ลบข้อมูลที่หายไปโดยการกรองออก

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

    ตอนนี้ตรวจสอบแนวเพลงอีกครั้ง:

    most popular

  2. โดยรวมแล้ว สามแนวเพลงที่ครองชุดข้อมูลนี้ ได้แก่ 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')
    
  3. ทดสอบอย่างรวดเร็วเพื่อตรวจสอบว่าข้อมูลมีความสัมพันธ์ในรูปแบบที่แข็งแรงเป็นพิเศษหรือไม่:

    corrmat = df.corr(numeric_only=True)
    f, ax = plt.subplots(figsize=(12, 9))
    sns.heatmap(corrmat, vmax=.8, square=True)
    

    correlations

    ความสัมพันธ์ที่แข็งแรงเพียงอย่างเดียวคือระหว่าง energy และ loudness ซึ่งไม่แปลกใจนัก เพราะเพลงที่เสียงดังมักจะมีพลังงานสูง นอกเหนือจากนี้ ความสัมพันธ์ค่อนข้างอ่อน มันจะน่าสนใจที่จะดูว่าสิ่งที่อัลกอริทึมการจัดกลุ่มสามารถทำได้กับข้อมูลนี้

    🎓 โปรดทราบว่าความสัมพันธ์ไม่ได้บ่งชี้ถึงสาเหตุ! เรามีหลักฐานความสัมพันธ์แต่ไม่มีหลักฐานว่าสาเหตุเป็นไปตามนั้น เว็บไซต์ ผลงานขำขัน แสดงภาพที่เน้นจุดนี้

ในชุดข้อมูลนี้ มีการบรรจบกันในเรื่องความนิยมและความสามารถในการเต้นของเพลงหรือไม่? FacetGrid แสดงให้เห็นว่ามีวงกลมรอบศูนย์กลางที่ตรงกันโดยไม่ขึ้นกับแนวเพลง อาจเป็นไปได้ว่าความชอบของชาวไนจีเรียบรรจบกันที่ระดับความสามารถในการเต้นระดับหนึ่งสำหรับแนวเพลงนี้หรือเปล่า?

ทดลองจุดข้อมูลต่าง ๆ (energy, loudness, speechiness) และแนวเพลงที่มากกว่าหรือแตกต่างกัน คุณจะค้นพบอะไร? ดูตาราง df.describe() เพื่อดูการกระจายทั่วไปของจุดข้อมูล

แบบฝึกหัด - การกระจายของข้อมูล

แนวเพลงทั้งสามนี้แตกต่างกันอย่างมีนัยสำคัญในความรู้สึกเรื่องความสามารถในการเต้นหรือไม่ ขึ้นอยู่กับความนิยมของพวกเขา?

  1. ตรวจสอบการกระจายข้อมูลของสามแนวเพลงท็อปในเรื่องของความนิยมและความสามารถในการเต้นตลอดแกนนอนและแกนตั้งที่กำหนด

    sns.set_theme(style="ticks")
    
    g = sns.jointplot(
        data=df,
        x="popularity", y="danceability", hue="artist_top_genre",
        kind="kde",
    )
    

    คุณจะค้นพบวงกลมรอบศูนย์กลางที่แนวร่วมแสดงการกระจายของจุดข้อมูล

    🎓 โปรดทราบว่านี่คือตัวอย่างที่ใช้กราฟ KDE (Kernel Density Estimate) ซึ่งเป็นกราฟความหนาแน่นของความน่าจะเป็นแบบต่อเนื่อง ซึ่งช่วยให้เราแปรผลข้อมูลเมื่อทำงานกับหลายการกระจาย

    โดยทั่วไปทั้งสามแนวเพลงจัดกลุ่มได้อย่างไม่เข้มงวดในแง่ของความนิยมและความสามารถในการเต้น การกำหนดกลุ่มในข้อมูลที่จัดวางไม่เข้มงวดนี้จะเป็นความท้าทาย:

    distribution

  2. สร้างกราฟกระจาย:

    sns.FacetGrid(df, hue="artist_top_genre", height=5) \
       .map(plt.scatter, "popularity", "danceability") \
       .add_legend()
    

    กราฟกระจายของแกนเดียวกันแสดงรูปแบบการบรรจบกันในลักษณะคล้ายกัน

    Facetgrid

โดยทั่วไป สำหรับการจัดกลุ่ม คุณสามารถใช้กราฟกระจายเพื่อแสดงกลุ่มข้อมูลได้ ดังนั้นการควบคุมการสร้างภาพประเภทนี้จึงมีประโยชน์มาก บทเรียนถัดไปเราจะใช้ข้อมูลที่กรองนี้และใช้การจัดกลุ่มแบบ k-means เพื่อค้นหากลุ่มในข้อมูลนี้ที่ดูเหมือนจะทับซ้อนกันในรูปแบบที่น่าสนใจ


🚀ความท้าทาย

เพื่อเตรียมพร้อมสำหรับบทเรียนถัดไป สร้างแผนภูมิอธิบายอัลกอริทึมการจัดกลุ่มต่าง ๆ ที่คุณอาจค้นพบและใช้ในสภาพแวดล้อมการผลิต อัลกอริทึมการจัดกลุ่มเหล่านี้พยายามแก้ปัญหาอะไร?

แบบทดสอบหลังบทเรียน

ทบทวน & ศึกษาด้วยตนเอง

ก่อนที่คุณจะประยุกต์ใช้อัลกอริทึมการจัดกลุ่ม อย่างที่เราได้เรียนรู้ เป็นความคิดที่ดีที่จะเข้าใจลักษณะของชุดข้อมูลของคุณ อ่านเพิ่มเติมในหัวข้อนี้ ที่นี่

บทความที่เป็นประโยชน์นี้ จะอธิบายวิธีการต่าง ๆ ที่อัลกอริทึมการจัดกลุ่มมีพฤติกรรมแตกต่างกัน ตามรูปร่างข้อมูลที่แตกต่างกัน

การบ้าน

ค้นคว้าการแสดงผลภาพเพิ่มเติมสำหรับการจัดกลุ่ม


ปฏิเสธความรับผิดชอบ: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator ขณะที่เราพยายามให้ความถูกต้อง โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาต้นทางควรถูกพิจารณาเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ แนะนำให้ใช้การแปลโดยมนุษย์มืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดที่เกิดขึ้นจากการใช้การแปลนี้