การจำแนกประเภทผลไม้ที่ความคล้ายคลึงกันมาก [ส้ม, มะนาว, ส้มจีน, แอปเปิ้ล] โดยใช้ SkLearn

ในโลกของ Data analytics สิ่งแรกที่ต้องทำคือหา ชุดข้อมูล หรือ datasets ที่เชื่อถือได้ ในวันนี้ จะขอนำเสนอ การจำแนกประเภทผลไม้ 4 ชนิด ซึ่งมีความคล้ายคลึงกันมากโดยใช้ Machine Learning ต้องขอขอบคุณ จากงานอดิเรก สะสมข้อมูล ของ Dr. Iain Murray from University of Edinburgh ประเทศอังกฤษ โดยสามารถ หาดาว์นโหลดได้จาก

https://github.com/susanli2016/Machine-Learning-with-Python/blob/master/fruit_data_with_colors.txt

ซึ่งรวบรม คุณลักษณะของ ผลไม้ 4 ประเภท คือ ส้ม(orange) แอปเปิ้ล(Apple) มะนาว(Lemon) และ ส้มแมนดาริน (Mandarin) ดังรูปที่ 2

รูปที่ 1: ตารางข้อมูล ที่อ่านจากไฟล์ fruit_data_with_colors.txt

รูปที่ 1 แสดงชุดข้อมูลของ ผลไม้ทั้งสี่ จำแนก ตาม น้ำหนัก (mass) ความสูง (height) ความกว้าง (width) และ ระดับสี (color_score)

รูปที่ 2: จำแนกชนิดของผลไม้ ทั้ง 4 ชนิด

1. ความแตกต่างระหว่าง Orange กับ Mandarin

ส้ม (orange) เป็นที่ชื่นชอบในสหรัฐอเมริกาและบราซิลเนื่องจากผู้คนรับประทานดิบและบริโภคในรูปแบบน้ำผลไม้

ส้มแมนดาริน(Madarin) นิยมปลูกในประเทศจีนในช่วง 3000 ปีที่ผ่านมา โดย Orange กับ Mandarin ต่างกันอย่างไร? 1)ส้มมีรูปร่างกลมกว่าในขณะที่แมนดารินจะแบนกว่าที่ปลาย 2) แมนดารินปอกง่ายกว่าส้ม

รูปที่ 3: ความแตกต่างระหว่าง Orange กับ Mandarin

2. การกระจายตัวข้อมูล(Visualization)

นำเสนอการกระจายตัวข้อมูล ด้วย Boxplotและ histogram เพื่อดูการแจกแจงปกติ

รูปที่ 4: histogram เพื่อดูการแจกแจงปกติ หรือไม่

3) ตรวจจับค่าผิดปกติ

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

รูปที่ 5: ตรวจสอบค่าผิดปกติ

ลองตรวจดูว่า มี outliner หรือไม่ ดังรูปที่ 6 ก็ไม่พบค่าผิดปกติ

รูปที่ 6: ตรวจหา Outliner

ถึงตรงนี้ เราสามารถเริ่มการวิเคราะห์ได้อย่างสบายใจ แล้วครับ

3. การจำแนกประเภทผลไม้

ขั้นตอนที่ 1 เริ่มโดย ทำการแบ่งข้อมูล ด้วย Train_test_split

บรรทัด 1 : ประกาศขอใช้ไลบรารี่ matplotlib

บรรทัด 2 : ประกาศ ตัวแปร feature_name ของ ชื่อคอลัมน์ที่ใช้ในการจำแนกประเภท

บรรทัด 3 : สร้างตัวแปรอิสระ X ได้แก่ ‘mass’, ‘width’, ‘height’, ‘color_score’

บรรทัด 4 : ขอใช้คำสั่ง train_test_split จากไลบรารี่ scikit-learn

บรรทัด 5 : สร้างตัวแปร X_train, X_test , y_train และ y_test ด้วยฟังก์ชั่น train_test_split() กำหนด test_size 30% (0.3) และกำหนด random_state ถ้าไม่กำหนดจะสุ่มข้อมูลใหม่ทุกครั้งทีรันใหม่

ขั้นตอนที่ 2: MinMaxScaler เป็นการ Scale ให้ข้อมูลมีค่าระหว่างค่าต่ำสุดและสูงสุด เหมาะกับข้อมูลที่มี Standard deviation น้อยมากๆ

บรรทัด 1 : ประกาศขอใช้ไลบรารี่ MinMaxScaler

บรรทัด 2 : ประกาศตัวแปร scaler

บรรทัด 3 : ทำการแปลงค่าข้อมูล ด้วยการ train ข้อมูล ด้วย fit function

บรรทัด 4 : ทำการแปลงข้อมูล ใช้ Transformer API คำนวน Mean และ Standard deviation ก่อน

ขั้นตอนที่ 3: สร้างโมเดลด้วย Decision Trees

บรรทัด 1 : ประกาศขอใช้ไลบรารี่ Decision tree classifier

บรรทัด 2 : Decision tree จะมีสิ่งที่จะต้องปรับหลักๆคือ max_depth จำนวนชั้นของต้นไม้ ถ้า max_depth เป็น 5 ชั้นความลึกของต้นไม้เราจะไม่เกิน 5

บรรทัด 3 : ทำการ train ข้อมูลทดสอบ ทั้ง X_train และ y_train

ขั้นตอนที่ 4: สร้าง แผนภูมิต้นไม้การตัดสินใจ

บรรทัด 1 : ประกาศขอใช้ไลบรารี่ graphviz

บรรทัด 2 : สร้างตัวแปรอิสระ fn เป็น ตัวแบ่ง

บรรทัด 3 : สร้างตัวแปรคลาสที่ต้องการทำนายผล ว่าเป็นผลไม่ใด

บรรทัด 4 : แผนภูมิต้นไม้การตัดสินใจ

บรรทัด 5 : ประกาศประเภทของไฟล์แบบ png

บรรทัด 6 : สร้างไฟล์ชื่อว่า orange_apple_classification_graphivz_April22 บน ไดเรกทรอรี่ ที่ประจำอยู่ เช่น ในกรณีของเราคือ Home directory

บรรทัด 7 : แสดงผลกราฟ

รูปที่ 7: แผนภูมิต้นไม้การตัดสินใจ

--

--

รศ. ดร. เชฏฐเนติ ศรีสอ้าน
รศ. ดร. เชฏฐเนติ ศรีสอ้าน

Written by รศ. ดร. เชฏฐเนติ ศรีสอ้าน

รองอธิการบดีฝ่ายเทคโนโลยี มหาวิทยาลัยรังสิต

No responses yet