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/README.md

43 KiB

บทนำเกี่ยวกับการจัดกลุ่มข้อมูล

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

No One Like You by PSquare

🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอ ขณะคุณกำลังศึกษาเรื่องการเรียนรู้ของเครื่องด้วยการจัดกลุ่มข้อมูล ลองฟังเพลงแนว Dance Hall ของไนจีเรีย - นี่คือเพลงที่ได้รับความนิยมสูงในปี 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 กลุ่มจำนวนมาก, ถูกจำกัด, ระยะทางแบบ 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 ถูกวัดตามเส้นโค้ง หากข้อมูลของคุณเมื่อแสดงภาพดูเหมือนจะไม่อยู่บนระนาบ คุณอาจต้องใช้อัลกอริทึมเฉพาะเพื่อจัดการกับมัน

Flat vs Nonflat Geometry Infographic

Infographic โดย Dasani Madipalli

🎓 'Distances'

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

🎓 'Constrained'

การจัดกลุ่มแบบมีข้อจำกัด แนะนำการเรียนรู้แบบ 'semi-supervised' ในวิธีการแบบไม่มีผู้สอน ความสัมพันธ์ระหว่างจุดถูกกำหนดเป็น 'cannot link' หรือ 'must-link' ดังนั้นจึงมีการบังคับใช้กฎบางอย่างในชุดข้อมูล

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

🎓 'Density'

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

อัลกอริทึมการจัดกลุ่มข้อมูล

มีอัลกอริทึมการจัดกลุ่มข้อมูลมากกว่า 100 แบบ และการใช้งานขึ้นอยู่กับลักษณะของข้อมูลที่มีอยู่ ลองมาพูดถึงบางอันที่สำคัญ:

  • การจัดกลุ่มแบบลำดับชั้น หากวัตถุถูกจัดประเภทโดยความใกล้ชิดกับวัตถุใกล้เคียงมากกว่ากับวัตถุที่อยู่ไกลออกไป กลุ่มจะถูกสร้างขึ้นตามระยะทางของสมาชิกไปยังวัตถุอื่น ๆ การจัดกลุ่มแบบ agglomerative ของ Scikit-learn เป็นแบบลำดับชั้น

    Hierarchical clustering Infographic

    Infographic โดย Dasani Madipalli

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

    Centroid clustering Infographic

    Infographic โดย Dasani Madipalli

  • การจัดกลุ่มแบบอิงการกระจาย อิงจากการสร้างแบบจำลองทางสถิติ การจัดกลุ่มแบบอิงการกระจายมุ่งเน้นไปที่การกำหนดความน่าจะเป็นที่จุดข้อมูลจะอยู่ในกลุ่ม และกำหนดให้ตามนั้น วิธี Gaussian mixture เป็นส่วนหนึ่งของประเภทนี้

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

  • การจัดกลุ่มแบบอิงกริด สำหรับชุดข้อมูลหลายมิติ จะมีการสร้างกริดและข้อมูลจะถูกแบ่งออกเป็นเซลล์ของกริดนั้น ซึ่งจะสร้างกลุ่มขึ้นมา

แบบฝึกหัด - จัดกลุ่มข้อมูลของคุณ

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

  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. เรียก 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
    
  5. ตรวจสอบค่า 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
    
  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

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

ดูค่าทั่วไปของข้อมูล สังเกตว่าความนิยมสามารถมีค่าเป็น '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 (หมายความว่าไม่ได้ถูกจัดประเภทด้วยความนิยมในชุดข้อมูลและสามารถถือว่าเป็นเสียงรบกวนสำหรับวัตถุประสงค์ของเรา):

    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. ตรวจสอบการกระจายข้อมูลของแนวเพลงสามอันดับแรกในเรื่องความนิยมและความสามารถในการเต้นตามแกน 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) ซึ่งแสดงข้อมูลโดยใช้เส้นโค้งความหนาแน่นความน่าจะเป็นแบบต่อเนื่อง สิ่งนี้ช่วยให้เราตีความข้อมูลเมื่อทำงานกับการกระจายหลายแบบ

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

    distribution

  2. สร้าง scatter plot:

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

    scatterplot ของแกนเดียวกันแสดงรูปแบบการรวมตัวที่คล้ายกัน

    Facetgrid

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


🚀ความท้าทาย

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

แบบทดสอบหลังการบรรยาย

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

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

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

งานที่ได้รับมอบหมาย

ค้นคว้าการแสดงภาพอื่นๆ สำหรับการจัดกลุ่ม


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