BOTNOI classroom-Pokemon dataset (Clustering).

Pasuk Phonsuphee
botnoi-classroom
Published in
3 min readOct 20, 2019

สวัสดีครับ ตอนนี้ botnoi class ก็มาถึง week ที่ 2 ซึ่งวันนี้ใน class เรียนของเราจะมีการพูดถึง Kmeans, PCA และ dimentional reduction มันคืออะไร? ใช้ทำอะไร? ไปเริ่มกันดีกว่าครับ

เรามาเริ่มกันที่หัวข้อแรกคือ Kmeans.

Kmeans คือการนำข้อมูลทั้งหมดมาจำแนกเป็นรูปแบบของ clustering. Clustering เป็น Unsupervised classification ที่ถูกนำมาใช้กับการจับกลุ่มของลูกค้า หรือเรียกว่า Customer segmentation ลูกค้าที่มีความคล้ายคลึงกัน นั่นคือมี feature ที่คล้ายกันจะถูกจัดอยู่ด้วยกัน ซึ่งใน class จะใช้ dataset ของ pokemon ว่าข้อมูลแต่ละตัวมีความสัมพันธ์กันอย่างไรโดยดูจาก พวก HP, Attack , Defend เป็นต้น

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

ดเราจะ column”#” ว่า index ไม่ได้เริ่มจาก 0 ถ้าเราเอามาใส่อาจจะเกิดข้อผิดพลาดขึ้นได้เราจึงต้อง drop column นั้นทิ้งไป และใน column “Legendary” ว่ายังเป็น boolean อยู่ซึ่งเราจะใช่คำสั่ง astype(int) ในการเป็น True,False เป็น 1,0 ตามลำดับ

ซึ่งเราจะเก็บข้อมูลที่พร้อมแล้ว เอาไปใส่ในตัวแปรที่ชื่อ feat และนำไปทำ cluster ต่อ

n_clusters คือ จำนวนกลุ่มที่เราอยากจำแนก

random_state คือ จะเป็นการสร้างตัวเลขสุ่ม

kmean.fit() ทำให้ข้อมูล fit กัน

kmean.predict() ใช้ทำนาย cluster ของ data point แต่ละตัว

และนำข้อมูลที่ cluster แล้วไป groupby กับ feat โดยใช้ค่าเฉลี่ย

หลังจากได้แบบนี้แล้ว เราจะเลือกข้อมูลที่คิดว่า ไม่น่าจะเกี่ยวข้องกันมา plot คือ 0,3,5,6 ซึ่ง แกน x คือ HP, แกน y คือ Attack และ แกน z คือ Defend

แล้วไปลอง plot รูปแบบ 3D กันนนน

เป็นไงสวยไหมครับ ซึ่งการ plot แบบ 3D จะมีข้อดีคือ เราสามารถดูพวก outliner ได้ง่ายๆ

ต่อไปเราจะลอง normalize ด้วยสมการด้านล่าง

และลองมาดูข้อมูลที่ normalize แล้ว

จากนั้น groupby โดยใช้ค่า mean เหมือนตอนแรก

และเราลองมา plot กันอีกรอบ

จะได้แบบนี้นั้นเอง ซึ่งการที่ทำ normalize เพื่อที่จะทำให้ feature อยู่ใน scale เดียวกัน

และในหัวข้อต่อไปเราจะพูดถึง PCA. ในส่วนของ PCA ย่อมาจากคำว่า Principle Components Analysis ซึ่งเป็นวิธีการลด dimension ของ Feature ลง ช่วยลดทอนความซ้ำซ้อนของข้อมูลทำให้เรา train model ได้ง่ายขึ้นและประหยัดพื้นที่ อีกวัตถุประสงค์หนึ่งคือเพื่อลด Dimension ลงให้เหลือไม่เกิด 3 มิติ จะได้สามารถแสดงผล Datapoint ได้

อย่างแรก เราจะสร้าง PCA ขึ้นมาก่อน จากนั้น fit ข้อมูลที่ normalize แล้วและเปลี่ยนข้อมูลที่ normalize เป็น PCA ซึ่งเราจะเก็บอยู่ในตัวแปร feat_pca

พอเราทำเสร็จแล้ว แล้วมันเปลี่ยนแปลงยังไง? ซึ่งความแตกต่างที่เราสามารถเห็นได้ง่ายที่สุดคือเราจะดู matrix ของแต่ละตัวด้วยคำสั่ง shape แล้วลองเปรียบเทียบข้อมูลที่ทำ PCA และข้อมูลที่ไม่ได้ทำ PCA กัน

ซึ่งเราจะเห็นได้ว่ามิติของข้อมูลลดลงจาก 8 ลดลง มาเหลือ 3 นั่นเอง และหลังจากนั้น เราเอาข้อมูลที่ PCA แล้วมาทำ cluster ต่อแล้วมา plot ดูและลองเปรียบเทียบกับ ข้อมูลที่ normalize ธรรมดา

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

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

ทั้งหมดนี้จะเป็นทั้งหมดที่เราเรียนใน week ที่ 2 นะครับ ซึ่งใน class ต่อไปจะมีเรียนอะไรบ้าง เดี๋ยวจะมาอัปเดตเรื่อยๆ ครับ ซึ่งถ้าอ่านมาถึงตรงนี้ก็ ขอบคุณมากๆ เลยครับผมตื่นเต้นมากเพราะว่านี้เป็นการเขียนใน medium ครั้งแรกของผม ถ้าผิดพลาดประการใดก็สามารถ comment ไว้ได้ครับและผมจะเอาไปปรับปรุงและทำให้มันดียิ่งขึ้น

--

--