<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Natnicha24</title>
    <description>The latest articles on DEV Community by Natnicha24 (@natnicha24).</description>
    <link>https://dev.to/natnicha24</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1060819%2F1baee72d-8cbd-4ea8-9796-d1cc257d7917.png</url>
      <title>DEV Community: Natnicha24</title>
      <link>https://dev.to/natnicha24</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/natnicha24"/>
    <language>en</language>
    <item>
      <title>Artificial Intelligence (AI) K-Means Clustering</title>
      <dc:creator>Natnicha24</dc:creator>
      <pubDate>Mon, 10 Apr 2023 07:31:56 +0000</pubDate>
      <link>https://dev.to/natnicha24/artificial-intelligence-ai-k-means-clustering-2img</link>
      <guid>https://dev.to/natnicha24/artificial-intelligence-ai-k-means-clustering-2img</guid>
      <description>&lt;p&gt;Clustering เป็นการจัดกลุ่มของปัญญาประดิษฐ์ โดยจะทำการนำข้อมูลที่มีความคล้ายกันจัดอยู่ในกลุ่มเดียวกัน การทำ Clustering เป็นการจัดกลุ่มแบบ &lt;strong&gt;"ไม่มีต้นแบบผลลัพธ์"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;การทำ Clustering มีประโยชน์อย่างมาก เช่น การเก็บข้อมูลเพื่อทำ image processing , การค้นหาข้อมูลความรู้ในแหล่งข้อมูลจำนวนมาก การ Clustering จะทำให้ข้อมูลเป็นหมวดหมู่และเป็นระเบียบ&lt;/p&gt;

&lt;p&gt;ในการทำ Clustering มี Algorithms ให้เลือกหลากหลายอย่าง เช่น K-Means Clustering , Density-Based Clustering , Mean-Shift Clustering , Hierarchical Clustering แต่ในบทความนี้เราจะมาดูตัวอย่างของ Algorithms ของ &lt;strong&gt;K-Means Clustering&lt;/strong&gt; กัน&lt;/p&gt;

&lt;p&gt;หลักการของการทำ K-Means Clustering นั้นคือการกำหนดจำนวนกลุ่มและหาจุด centroid ของแต่ละกลุ่มออกมา หลังจากนั้นเราจะเอาข้อมูลมาวางลงบนกราฟ หากข้อมูลใดใกล้กับจุด centroid ใด ก็จะถือว่าเป็นข้อมูลของกลุ่มนั้น แต่ยังไม่จบเพียงแค่นั้นหลังจากที่มีการจัดข้อมูลแล้ว ก็จะมีการย้ายจุด centroid และทำการจัดกลุ่มใหม่ การย้ายจุด centroid จะทำให้เกิดการย้ายกลุ่มของข้อมูล ซึ่งกระบวนการเหล่านี้จะเกิดซ้ำไปเรื่อยๆจนกว่าข้อมูลทั้งหมดนั้นจะไม่เกิดการย้ายกลุ่ม&lt;/p&gt;




&lt;p&gt;หลังจากทำความเข้าใจในเรื่องของหลักการกันไปแล้วเราลองมาลงมือทำ K-Means Clustering กันดีกว่า&lt;/p&gt;

&lt;p&gt;สำหรับข้อมูลที่จะนำมาใช้ในครั้งนี้ เป็นข้อมูลการคาดเดา final grade ของนักเรียนที่ศึกษาอยู่ในโรงเรียนมัธยมในประเทศโปรตุเกส ซึ่งเป็นข้อมูลที่มาจาก  UCL Machine Learning Repository และทุกคนสามารถดาวน์โหลดข้อมูลนี้มาใช้ได้ทางลิงค์ที่แนบไว้ด้านล่าง&lt;/p&gt;

&lt;p&gt;-&amp;gt;&lt;a href="https://www.kaggle.com/datasets/dipam7/student-grade-prediction?resource=download"&gt;DATASET LINK&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;โดยข้อมูลที่นำมาใช้งานจะประกอบไปด้วย&lt;br&gt;
1.จำนวนแถว 396 แถว หมายถึง จำนวนนักเรียน 396 คน&lt;br&gt;
2.จำนวนคอลัมน์ 33 คอลัมน์ โดยมีคำอธิบายแต่ละคอลัมน์ดังนี้&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;school - student's school (binary: 'GP' - Gabriel Pereira or 'MS' - Mousinho da Silveira)&lt;/li&gt;
&lt;li&gt;sex - student's sex (binary: 'F' - female or 'M' - male)&lt;/li&gt;
&lt;li&gt;age - student's age (numeric: from 15 to 22)&lt;/li&gt;
&lt;li&gt;address - student's home address type (binary: 'U' - urban or 'R' - rural)&lt;/li&gt;
&lt;li&gt;famsize - family size (binary: 'LE3' - less or equal to 3 or 'GT3' - greater than 3)&lt;/li&gt;
&lt;li&gt;Pstatus - parent's cohabitation status (binary: 'T' - living together or 'A' - apart)&lt;/li&gt;
&lt;li&gt;Medu - mother's education (numeric: 0 - none, 1 - primary education (4th grade), 2 â€“ 5th to 9th grade, 3 â€“ secondary education or 4 â€“ higher education)&lt;/li&gt;
&lt;li&gt;Fedu - father's education (numeric: 0 - none, 1 - primary education (4th grade), 2 â€“ 5th to 9th grade, 3 â€“ secondary education or 4 â€“ higher education)&lt;/li&gt;
&lt;li&gt;Mjob - mother's job (nominal: 'teacher', 'health' care related, civil 'services' (e.g. administrative or police), 'at_home' or 'other')&lt;/li&gt;
&lt;li&gt;Fjob - father's job (nominal: 'teacher', 'health' care related, civil 'services' (e.g. administrative or police), 'at_home' or 'other')&lt;/li&gt;
&lt;li&gt;reason - reason to choose this school (nominal: close to 'home', school 'reputation', 'course' preference or 'other')&lt;/li&gt;
&lt;li&gt;guardian - student's guardian (nominal: 'mother', 'father' or 'other')&lt;/li&gt;
&lt;li&gt;traveltime - home to school travel time (numeric: 1 - &amp;lt;15 min., 2 - 15 to 30 min., 3 - 30 min. to 1 hour, or 4 - &amp;gt;1 hour)&lt;/li&gt;
&lt;li&gt;studytime - weekly study time (numeric: 1 - &amp;lt;2 hours, 2 - 2 to 5 hours, 3 - 5 to 10 hours, or 4 - &amp;gt;10 hours)&lt;/li&gt;
&lt;li&gt;failures - number of past class failures (numeric: n if 1&amp;lt;=n&amp;lt;3, else 4)&lt;/li&gt;
&lt;li&gt;schoolsup - extra educational support (binary: yes or no)&lt;/li&gt;
&lt;li&gt;famsup - family educational support (binary: yes or no)&lt;/li&gt;
&lt;li&gt;paid - extra paid classes within the course subject (Math or Portuguese) (binary: yes or no)&lt;/li&gt;
&lt;li&gt;activities - extra-curricular activities (binary: yes or no)&lt;/li&gt;
&lt;li&gt;nursery - attended nursery school (binary: yes or no)&lt;/li&gt;
&lt;li&gt;higher - wants to take higher education (binary: yes or no)&lt;/li&gt;
&lt;li&gt;internet - Internet access at home (binary: yes or no)&lt;/li&gt;
&lt;li&gt;romantic - with a romantic relationship (binary: yes or no)&lt;/li&gt;
&lt;li&gt;famrel - quality of family relationships (numeric: from 1 - very bad to 5 - excellent)&lt;/li&gt;
&lt;li&gt;freetime - free time after school (numeric: from 1 - very low to 5 - very high)&lt;/li&gt;
&lt;li&gt;goout - going out with friends (numeric: from 1 - very low to 5 - very high)&lt;/li&gt;
&lt;li&gt;Dalc - workday alcohol consumption (numeric: from 1 - very low to 5 - very high)&lt;/li&gt;
&lt;li&gt;Walc - weekend alcohol consumption (numeric: from 1 - very low to 5 - very high)&lt;/li&gt;
&lt;li&gt;health - current health status (numeric: from 1 - very bad to 5 - very good)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;absences - number of school absences (numeric: from 0 to 93)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;G1 - first period grade (numeric: from 0 to 20)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;G2 - second period grade (numeric: from 0 to 20)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;G3 - final grade (numeric: from 0 to 20, output target)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ถ้าทุกคนเข้าใจในข้อมูลแล้วเราจะเริ่มการทำ Clustering ให้ข้อมูลนี้กัน :)&lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ขั้นที่1 : ดาวน์โหลดข้อมูล&lt;/strong&gt;&lt;br&gt;
-ก่อนที่ทุกคนจะเริ่มทำการ Clustering ได้จะต้องโหลดข้อมูลมาก่อน ซึ่งสามารถเขียนโค้ดได้ตามนี้เลย หรือทุกคนจะเปลี่ยน url เป็นลิงค์ที่อยู่ข้อมูลใน github ของทุกคนเองก็ได้&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import pandas as pd
url = 'https://raw.githubusercontent.com/Natnicha24/grade-ai/master/student-mat.csv'
studentData = pd.read_csv(url, sep = ',')
studentData.head()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;-ซึ่งเมื่อทุกคนกดรันแล้วจะได้ผลเหมือนตัวอย่างดังนี้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0EDAXohj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bxu2s1jl06zf0pdqpydd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0EDAXohj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bxu2s1jl06zf0pdqpydd.jpg" alt="Image description" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ขั้นที่2 : การจัดการข้อมูล&lt;/strong&gt;&lt;br&gt;
-เนื่องจากที่อธิบายไปข้างต้นว่าข้อมูลที่เรานำมาใช้กันในครั้งนี้มีจำนวนคอลัมน์ค่อนข้างมาก เราสามารถเลือกเฉพาะข้อมูลที่เกี่ยวข้องเพื่อให้ดูข้อมูลได้ง่ายขึ้น&lt;br&gt;
-ตามตัวอย่างโค้ดด้านล่างคือการเลือกคอลัมน์ทั้งหมด 8 คอลัมน์ ได้แก่ school,sex,age,failures,absences,G1,G2,G3&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;studentData =studentData[['school' , 'sex' , 'age' , 'failures' , 'absences' , 'G1' , 'G2' , 'G3',
      ]]

studentData.head()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;-เมื่อรันแล้วจะได้ตัวอย่างดังภาพ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kt-P8SWX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zdo1ux8oepldx2lkxfeo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kt-P8SWX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zdo1ux8oepldx2lkxfeo.jpg" alt="Image description" width="516" height="237"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ขั้นที่3 : หาค่า k&lt;/strong&gt;&lt;br&gt;
-ขั้นตอนนี้ถือว่าเราจะเริ่มการทำ k-means clustering กันแล้ว ซึ่งการทำ k-means clustering นั้นจำเป็นจะต้องรู้จำนวนของกลุ่ม(k) โดยเราสามารถกำหนดจำนวนกลุ่มด้วยตัวเองแบบสุ่มก็ได้หรือจะทำการหาจำนวนกลุ่มที่สมควรจะแบ่งโดยเขียนตามโค้ดได้ ดังต่อไปนี้&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;เลือกข้อมูลทั้งหมด2ตัวเป็นข้อมูลที่เราจะใช้เป็น แกน x และ y ในที่นี้เราจะลองเลือกเป็นคอลัมน์ absences(การขาดเรียน) และ G3(คะแนนเกรดปลายภาค)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;studentData.columns
data = studentData[['absences','G3']]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;ต่อมาเรายังคงอยู่ในขั้นตอนของการหาจำนวนกลุ่ม(k) โดยต่อไปเราจะทำการกำหนด range ของข้อมูลที่เราต้องการทำ k-means clustering โดยในบทความนี้เราจะลองกำหนด range เป็น 1-20 และนำไปหาค่า sum of square distances ซึ่งสามารถเขียนได้ตามโค้ดด้านล่าง
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from sklearn.cluster import KMeans
w = []
K = range(1,20)

for k in K: #range(1,20):
    cls = KMeans(n_clusters=k,n_init='auto')
    cls.fit(data)
    w.append(cls.inertia_)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;ซึ่งเราสามารถดูค่า sum of square distances โดยเขียนโค้ดตามด้านล่างนี้
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cls.inertia_
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;เมื่อรันแล้วจะได้ค่า sum of square distances ออกมาดังภาพ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--19YTN73g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/omvumswubnvlblit9grj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--19YTN73g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/omvumswubnvlblit9grj.jpg" alt="Image description" width="267" height="36"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;ต่อมา เรามาถึงขั้นตอนสุดท้ายในการหาจำนวนกลุ่ม(k)กันแล้ว นั่นคือการนำค่าที่เราได้นั้นมาพล๊อตเป็นกราฟ ทุกคนอาจจะเกิดคำถามว่าค่า k จะอยู่ส่วนไหนของกราฟกันล่ะ?? คำตอบก็คือ จุดที่มีการหักของกราฟซึ่งแสดงให้เห็นถึงการลดลงของข้อมูลอย่างรวดเร็วนั่นเอง&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;โดยทุกคนสามารถพล๊อตกราฟโดยเขียนโค้ดดังนี้&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import matplotlib.pyplot as plt
plt.plot(K,w)
plt.ylabel('inertia')
plt.xlabel('number of cluster')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;จะได้กราฟดังนี้&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uRotXedC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mn47vsg7e5ev5x57otb9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uRotXedC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mn47vsg7e5ev5x57otb9.jpg" alt="Image description" width="793" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ตามรูปเราสามารถประมาณค่าได้ว่าจุดที่แกน x เท่ากับ 4 เป็นจุดที่แสดงถึงการลดลงของข้อมูลอย่างรวดเร็ว&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ขั้นที่4&lt;/strong&gt; : ทำการ Clustering&lt;br&gt;
-เรามาถึงขั้นตอนของการทำ Clustering กันแล้วโดยในขั้นตอนนี้ผลสุดท้ายเราจะได้กราฟที่จัดกลุ่มข้อมูลของเราให้เรียบร้อย&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;อย่างแรกที่เราต้องทำคือการนำค่า k หรือจำนวนกลุ่มที่เราได้ในขั้นตอนที่ผ่านมา มาใช้งาน โดยการเขียนโค้ดดังนี้
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cls = KMeans(n_clusters=4,n_init='auto')
cls.fit(data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;เมื่อรันจะได้ดังนี้&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--efvIQAMt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fwrgn9f6pfy69wc3gzir.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--efvIQAMt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fwrgn9f6pfy69wc3gzir.jpg" alt="Image description" width="396" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ต่อมาเป็นอีกหนึ่งขั้นตอนสำคัญคือการหาจุด centroid หรือจุดที่เป็นค่าเฉลี่ยของแต่ละกลุ่ม ซึ่งทุกคนอาจจะพอเข้าใจแล้วว่าทำไมสิ่งที่เรากำลังทำอยู่นี้ถึงเรียกว่า K-means clustering นั่นเพราะเรามีการนำค่าเฉลี่ยมาใช้นั่นเอง โดยทุกคนสามารถหาจุด centroid ได้ตามโค้ดด้านล่างนี้เลย
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;centroid = pd.DataFrame(cls.cluster_centers_,
                        columns=data.columns)
centroid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;โดยจะได้ค่าดังนี้เมื่อรันออกมา&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fujC_iEV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sw8gd1itz422hl0jsrbk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fujC_iEV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sw8gd1itz422hl0jsrbk.jpg" alt="Image description" width="233" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;ขั้นตอนถัดไปเป็นขั้นตอนที่สามารถอธิบายวิธีการทำงานของการจัดกลุ่มโดย k-means clustering ได้ดีมาก ในขั้นตอนนี้ที่เราเขียนโค้ดขึ้นมา จะเป็นการนำข้อมูลมาวางแล้วหาว่าใกล้กับจุด centroid ใดมากที่สุด หากใกล้จุด centroid ใดมากที่สุดก็จะเป็นข้อมูลของกลุ่มนั้นนั่นเอง&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;โดยเขียนโค้ดดังนี้&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import numpy as np
x = data
k = [data,centroid]
x = pd.concat(k)
x['cluster'] = np.concatenate((cls.predict(data),[20,20,20,20]))
x.head()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;จะได้ผลดังนี้&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HQYK241c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mkn2octoa8pd4oig7bv6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HQYK241c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mkn2octoa8pd4oig7bv6.jpg" alt="Image description" width="257" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ขั้นตอนสุดท้าย เราจะมาพล๊อตกราฟเพื่อดูการจัดกลุ่มข้อมูลกัน โดยเขียนโค้ดตามนี้
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import seaborn as sns

s = sns.pairplot(x_vars='absences',y_vars='G3',hue='cluster',plot_kws={"s": 80},
                 data=x,palette='deep' )
new_labels = ['0','1','2','3','centroid']
for t, l in zip(s._legend.texts, new_labels): t.set_text(l)
s._legend.set_bbox_to_anchor((1.2, 0.5))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;และจะได้ผลตามนี้&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AT7KHJg8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6hs9hanlqrcfo16zv4x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AT7KHJg8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6hs9hanlqrcfo16zv4x.jpg" alt="Image description" width="537" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;และภาพนี้ก็เป็นผลสรุปของการทำ K-Means Clustering ที่พวกเราทดลองทำกัน โดยแบ่งข้อมูลเป็น 4 กลุ่มด้วยกัน โดยจุดสีม่วงจะเป็นจุด centroid แล้วข้อมูลจะถูกแบ่งเป็นสีต่างๆ&lt;br&gt;
หากทุกคนอยากเห็นการแบ่งกลุ่มที่มากกว่า4กลุ่มก็สามารถเปลี่ยนจำนวนของกลุ่มได้ก่อนการทำ clustering ทุกคนก็จะเห็นการแบ่งกลุ่มแบบใหม่ที่เกิดขึ้นกับข้อมูล&lt;/p&gt;

&lt;p&gt;ขอบคุณทุกคนที่อ่านบทความนี้จนจบนะคะ หวังว่าจะสามารถเป็นประโยชน์ต่อใครได้บ้าง :)&lt;br&gt;
หากผิดพลาดประการใดขออภัยมา ณ ที่นี้ด้วยค่ะ&lt;/p&gt;




&lt;p&gt;&lt;u&gt;References&lt;/u&gt;&lt;br&gt;
ขอบคุณ DATASET จาก:&lt;br&gt;
&lt;a href="https://www.kaggle.com/datasets/dipam7/student-grade-prediction?resource=download"&gt;https://www.kaggle.com/datasets/dipam7/student-grade-prediction?resource=download&lt;/a&gt;&lt;br&gt;
โค้ดตัวอย่างก่อนนำมาดัดแปลง :&lt;br&gt;
&lt;a href="https://colab.research.google.com/drive/12MEZXoT5nJrEjew3t6ULcdHGgz0fn_lb"&gt;https://colab.research.google.com/drive/12MEZXoT5nJrEjew3t6ULcdHGgz0fn_lb&lt;/a&gt;&lt;/p&gt;

</description>
      <category>clustering</category>
      <category>kmean</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
