สไลด์บางส่วนจากการอบรม Practical Data Mining with RapidMiner Studio 7

ตัวอย่างสไลด์การอบรม Practical Data Mining with RapidMiner Studio 7 รุ่นที่ 17 ครับ ท่านใดสนใจดูรายละเอียดการอบรมรุ่นถัดไปได้ที่ http://dataminingtrend.com/2014/training/rapidminer-training-18/

การสร้างโมเดล Decision Tree สำหรับแอตทริบิวต์ที่เป็นตัวเลข

ในบทความเรื่อง “ขั้นตอนการสร้างโมเดล Decision Tree” ผมได้อธิบายถึงขั้นตอนพื้นฐานในการสร้างโมเดลและตัวอย่างที่ใช้แสดงเป็นข้อมูลประเภทนอมินอล (nominal) เท่านั้น ซึ่งในความเป็นจริงแล้ว ข้อมูลที่ใช้ในการสร้างโมเดลอาจจะเป็นประเภทตัวเลข (numeric) ก็ได้เช่นกัน หลักการของการสร้างโมเดลในกรณีที่แอตทริบิวต์เป็นตัวเลขจะมีขั้นตอนดังนี้

  • เรียงลำดับข้อมูลที่เป็นตัวเลขจากน้อยไปมาก
  • แบ่งข้อมูลออกเป็น 2 ส่วนโดยการหาจุดกึ่งกลางระหว่างค่าตัวเลข 2 ค่าที่แตกต่างกัน เช่น 70 และ 75 จะได้ค่าเป็น 72.5
  • คำนวณค่า Information Gain จากข้อมูล 2 ส่วนที่แบ่งได้ โดยส่วนที่น้อยกว่าเท่ากับจุดกึ่งกลางจะให้เป็นข้อมูลด้านซ้ายของโหนด (node) และข้อมูลส่วนที่เหลือจะให้เป็นข้อมูลด้านขวาของโหนด
  • หาจุดกึ่งกลางของค่าที่แตกต่างกันทุกๆ ค่าและเลือกจุดกึ่งกลางที่ให้ค่า Information Gain สูงที่สุดมาใช้งานต่อ

ดูรายละเอียดการทำงานได้จาก slide ด้านล่างนี้ครับ

ตัววัดประสิทธิภาพของโมเดล Classification

ในการสร้างโมเดลเพื่อจำแนกประเภทข้อมูล (classification) สามารถแบ่งข้อมูลเพื่อทำการทดสอบได้ 3 แบบใหญ่ ดังที่ได้อธิบายไว้ในหัวข้อ “การแบ่งข้อมูลเพื่อนำทดสอบประสิทธิภาพของโมเดล” สำหรับบทความนี้จะแสดงการวัดประสิทธิภาพของโมเดลด้วยตัววัด (metric) ต่างๆ ได้แก่

  • Confusion Matrix
  • Precision
  • Recall
  • F-measure
  • Accuracy
  • ROC Graph
  • AUC (Area Under ROC Curve)

ขั้นตอนการคำนวณต่างๆ สามารถดูได้จาก slide ด้านล่างนี้ครับ

หลักสูตรการวิเคราะห์ข้อมูลด้วยเทคนิค Data Mining โดยซอฟต์แวร์ RapidMiner Studio 7 (ขั้นพื้นฐานและปานกลาง) รุ่นที่ 20 (วันที่ 16-18 ตุลาคม 2560)

ภาพรวมของหลักสูตร

Screen Shot 2559-01-28 at 12.47.49 PM

โลกในยุคปัจจุบันได้ก้าวเข้าไปสู่ยุคที่เรียกว่า “Big Data” หรือ “ข้อมูลอภิมหาศาล” เนื่องจากในแต่ละวันมีข้อมูลเกิดขึ้นมากมาย อาทิเช่น ข้อมูลสมาชิกของ Facebook ข้อมูลการซื้อสินค้าจากในซุปเปอร์มาร์เกตต่างๆ และเพื่อให้เกิดประโยชน์มากที่สุดเราจำเป็นต้องนำข้อมูลอภิมหาศาลเหล่านี้มาทำการวิเคราะห์ (analyze) ซึ่งเทคนิคหนึ่งที่ได้รับการนิยมอย่างสูงในปัจจุบัน คือ เทคนิค Data Mining ซึ่งเป็นเทคนิคที่ค้นหาความสัมพันธ์ในข้อมูล เช่น ถ้าลูกค้าซื้อเบียร์แล้วลูกค้าจะซื้อผ้าอ้อมร่วมไปด้วย หรือถ้าเรากด Like หน้า Facebook page เราจะเห็นว่า Facebook มีระบบแนะนำ page อื่นๆ ที่เกี่ยวข้องมาให้ด้วย หรือ การสร้างโมเดลเพื่อทำนายสิ่งที่จะเกิดขึ้นในอนาคต เช่น ทำนายยอดขายในไตรมาสถัดไป หรือ การทำนายว่าพนักงานคนไหนที่จะลาออกจากบริษัทในช่วง 3 เดือนข้างหน้า ตัวอย่างเหล่านี้ล้วนเป็นผลมาจากการวิเคราะห์ข้อมูลทางด้าน Data Mining

การวิเคราะห์ข้อมูลด้วย Data Mining นี้กำลังเป็นที่นิยมไปทั่วโลกด้วยแรงขับเคลื่อนอย่างหนึ่งคือ การมีซอฟต์แวร์ที่ช่วยให้ทำการวิเคราะห์ได้ง่ายขึ้น แต่ซอฟต์แวร์ส่วนใหญ่จะเป็นซอฟต์แวร์เชิงพาณิชย์ (commercial software) เช่น SAS Enterprise Miner หรือ IBM Intelligent Miner ทว่าการลงทุนซื้อซอฟต์แวร์เชิงธุรกิจเหล่านี้มาใช้งานอาจจะไม่คุ้มค่าในการลงทุนสำหรับผู้ประกอบการวิสาหกิจขนาดกลางและขนาดย่อม (SMEs) หรืออาจารย์ นักวิจัย และ นักศึกษาระดับปริญญาโทและเอก ในมหาวิทยาลัยต่างๆ ดังนั้นวิธีการหนึ่งที่จะทำให้เราสามารถวิเคราะห์ข้อมูลเหล่านี้ได้คือการใช้ open source software ที่สามารถดาวน์โหลดมาใช้งานได้โดยไม่เสียค่าใช้จ่าย (ฟรี !!!) เช่น ซอฟต์แวร์ Weka ผมคลุกคลีกับ Weka มาเป็นเวลาหลายปี เคยเขียนคู่มือการใช้งาน Weka Explorer ลงในนิตยสาร OpenSource2Day สร้างหลักสูตรการอบรมการใช้งาน Weka Explorer และอบรมการใช้งานซอฟต์แวร์ตัวนี้มาเป็นจำนวนเกือบยี่สิบรุ่น แม้ว่าซอฟต์แวร์นี้จะใช้งานได้ง่ายสำหรับผู้เริ่มต้นและสะดวกที่จะนำไปใช้ในการพัฒนา Web Application แต่ในหลายๆ ครั้งผมมักจะพบข้อจำกัดหรือความยากในการแสดงผลจากซอฟต์แวร์ตัวนี้ ดังนั้นผมจึงหันมาสนใจซอฟต์แวร์ตัวอื่นที่สามารถทดแทนหรือดีกว่าซอฟต์แวร์ Weka Explorer และผมก็พบกับซอฟต์แวร์ RapidMiner Studio 6 ซึ่งเป็นซอฟต์แวร์ทาง Data Mining ที่ได้รับการโหวตว่ามีผู้ใช้งานมากที่สุดจากเว็บไซต์ KDnuggets.com เมื่อปี 2013 ในหลักสูตรนี้ผมจะแนะนำให้คุณรู้จักการวิเคราะห์ข้อมูลด้วยเทคนิค Data Mining ตั้งแต่ระดับต้นจน (basic) จนถึงระดับกลาง (intermediate) ด้วยการใช้ซอฟต์แวร์ RapidMiner Studio 7 ซึ่งเป็นเวอร์ชันล่าสุด ถ้าคุณยังลังเลว่าคุณควรจะมาเข้าร่วมอบรมหลักสูตรนี้กับผมหรือไม่ ผมขอถาม 8 คำถามสั้นๆ ดังนี้ครับ

  • สนใจการวิเคราะห์ข้อมูลด้วย Data Mining แต่ไม่รู้จะเริ่มยังไงดี
  • อยากรู้ว่าลูกค้าซื้อสินค้าอะไรเป็นส่วนใหญ่
  • อยากเข้าใจพฤติกรรมการบริโภทของลูกค้า
  • อยากหยั่งรู้อนาคต (บางส่วน)
  • อยากทำงานวิจัยทางด้าน text mining
  • อยากทำงานวิจัยทางด้าน image processing
  • ไม่ชอบการเขียนโปรแกรมแต่อยากวิเคราะห์ข้อมูลที่ซับซ้อนได้
  • เคยเข้าร่วมการอบรมการใช้งาน Weka Explorer มาแล้วและอยาก update ความรู้ทาง Data Mining ใหม่ๆ ด้วยซอฟต์แวร์ใหม่ๆ

ถ้าคุณตอบว่า “ใช่” ในคำถามข้อใดข้อหนึ่ง ผมขอแนะนำว่าคุณควรจะมาเข้าร่วมอบรมกับผมครับ และคุณจะรู้ว่าทำไมผมถึงเปลี่ยนใจจาก Weka Explorer มาตกหลุมรักซอฟต์แวร์ที่ชื่อว่า RapidMiner Studio 7 ครับ ^^

อ่านรายละเอียดหลักสูตรได้ที่ http://dataminingtrend.com/2014/training/rapidminer-training-20

หนังสือ Introduction to Data Mining Techniques (ภาษาไทย)

IMG_20150524_095848

ย้อนหลังไปเมื่อ 12 ปีก่อน การวิเคราะห์ข้อมูลด้วยเทคนิค ดาต้า ไมน์นิง (data mining) ยังรู้จักกันในวงแคบส่วนใหญ่จะเป็นนักศึกษาปริญญาโทและเอกที่สนใจทำงานวิจัยทางด้านนี้ ผมเองเริ่มต้นรู้จักกับดาต้า ไมน์นิงเมื่อประมาณ 12 ปีก่อนเช่นกัน ในสมัยที่เป็นนักศึกษาปริญญาตรีตัวเล็กๆ ในห้องปฏิบัติการวิจัยการค้นหาความรู้จากฐานข้อมูลขนาดใหญ่ (Knowledge Discovery Laboratory) ในภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเกษตรศาสตร์ ในช่วงเวลาที่ผ่านมาผมได้เห็นการเปลี่ยนแปลงเกี่ยวกับความสนใจของผู้คนต่างๆ ในเรื่องดาต้า ไมน์นิงอย่างมากมาย ตั้งแต่ตอนแรกที่ความสนใจจะอยู่ในวงแคบดังที่ได้กล่าวมาแล้วจนมาถึงปัจจุบันที่มีผู้สนใจเพิ่มขึ้นเป็นวงกว้าง เช่น บริษัทเอกชนหรือธนาคารต่างๆ เริ่มให้ความสนใจนำการวิเคราะห์ข้อมูลด้วยเทคนิคดาต้า ไมน์นิงไปใช้งานกันมากขึ้นหรือมหาวิทยาลัยบางแห่งเริ่มจัดให้การเรียนการสอนเกี่ยวกับเรื่องนี้ในระดับชั้นปริญญาตรี จากความนิยมที่เพิ่มขึ้นและการเก็บเกี่ยวประสบการณ์ต่างๆ ในการวิเคราะห์ข้อมูลทางด้านดาต้า ไมน์นิงทำให้ผมคิดอยากจะเขียนหนังสือสักเล่มที่เกี่ยวกับการแนะนำเทคนิคการวิเคราะห์ข้อมูลทางดาต้า ไมน์นิงเบื้องต้นสำหรับนักศึกษาและผู้สนใจขึ้นมาและนั่นเองคือที่มาของหนังสือเล่มนี้ที่ชื่อว่า An Introduction to Data Mining Techniques ซึ่งในหนังสือเล่มนี้ผมจะแสดงหลักการทำงานของวิธีการต่างๆ ทางด้านดาต้า ไมน์นิงไม่ว่าจะเป็น การหากฏความสัมพันธ์ (association rules discovery) การแบ่งกลุ่มข้อมูล (clustering) และ การจำแนกประเภทข้อมูล (classification) พร้อมทั้งตัวอย่างการทำงานของวิธีการเหล่านี้เพื่อให้ผู้อ่านเข้าใจได้ง่ายโดยที่ไม่ต้องมีความรู้พื้นฐานทางด้านคณิตศาสตร์ขั้นสูง

หนังสือเล่มนี้คงไม่สามารถเกิดขึ้นได้ถ้าผมไม่ได้เรียนรู้ Data Mining จาก

  • รศ.ดร. กฤษณะ ไวยมัย มหาวิทยาลัยเกษตรศาสตร์
  • ดร. สุภาวดี อิงศรีสว่าง ศูนย์พันธุวิศวกรรมและเทคโนโลยีชีวภาพ
  • ศ. ดร. ธนารักษ์ ธีระมั่นคง สถาบันเทคโนโลยีนานาชาติสิรินธร (SIIT) มหาวิทยาลัยธรรมศาสตร์
  • ศ. ดร. นิค เซอร์โคน (Nick Cercone) มหาวิทยาลัย ยอร์ค (York University) ประเทศแคนาดา

ดูตัวอย่างหนังสือได้จากที่นี่ครับ หนังสือราคาเล่มละ 400 บาทรวมค่าจัดส่งแล้วครับ ^^

Continue reading

โมเดล Naive Bayes และการแปลความหมาย

หลังจากบทความที่แล้วผมได้อธิบายการสร้างโมเดล Decision Tree ไปแล้ว ในวันนี้ขออธิบายวิธีการทำ classification อีกเทคนิคหนึ่งที่ได้รับความนิยมก็คือวิธี Naive Bayes หลักการของวิธีการนี้จะใช้การคำนวณความน่าจะเป็น ก่อนอื่นขอทบทวนความน่าจะเป็นที่เรียกว่า conditional proabability เสียก่อน ดังแสดงในสมการด้านล่าง

Screen Shot 2557-03-18 at 9.21.18 AM

  • P(A|B) คือ ค่า conditional probability หรือค่าความน่าจะเป็นที่เกิดเหตุการณ์ B ขึ้นก่อนและจะมีเหตุการณ์ A ตามมา
  • P(AB) คือ ค่า joint probability หรือค่าความน่าจะเป็นที่เหตุการณ์ A และเหตุการณ์ B เกิดขึ้นร่วมกัน
  • P(B) คือ ค่าความน่าจะเป็นที่เหตุการณ์ B เกิดขึ้น

ในลักษณะเดียวกันเราจะเขียน P(B|A) หรือค่าความน่าจะเป็นที่เหตุการณ์ A เกิดขึ้นก่อนและเหตุการณ์ B เกิดขึ้นตามมาทีหลังได้เป็น

Screen Shot 2557-03-18 at 9.25.42 AM

Continue reading

ขั้นตอนการสร้างโมเดล Decision Tree

[บทความนี้เป็นเนื้อหาบางส่วนจากหนังสือ An Introduction to Data Mining Techniques (ฉบับภาษาไทย]
เทคนิค Decision Tree เป็นเทคนิคหนึ่งที่ได้รับความนิยมในการนำมาประยุกต์ใชัในงานด้าน data mining วันนี้ผมจะแนะนำการสร้างโมเดล decision tree แบบง่ายๆ ก่อนอื่นเราจะใช้ข้อมูลในตารางที่ 1 ซึ่งเป็นข้อมูลที่เก็บสภาพภูมิอากาศ 14 วันย้อนหลังเพื่อดูว่าจะมีการจัดแข่งขันกีฬาหรือไม่

ตารางที่ 1 แสดงข้อมูล weather

Nooutlooktemperaturehumiditywindyplay
1sunnyhothighFALSEno
2sunnyhothighTRUEno
3overcasthothighFALSEyes
4rainymildhighFALSEyes
5rainycoolnormalFALSEyes
6rainycoolnormalTRUEno
7overcastcoolnormalTRUEyes
8sunnymildhighFALSEno
9sunnymildnormalFALSEyes
10rainymildnormalFALSEyes
11sunnymildnormalTRUEyes
12overcastmildhighTRUEyes
13overcasthotnormalFALSEyes
14rainymildhighTRUEno

จากข้อมูลในตารางที่ 1 ประกอบด้วย 5 แอตทริบิวต์ คือ

  • outlook แสดงสภาพภูมิอากาศ ประกอบด้วย 3 ค่า คือ sunny, overcast, rainny
  • temperature แสดงอุณหภูมิ ประกอบด้วย 3 ค่า คือ hot, mild, cool
  • humidity แสดงค่าความชื้นในอากาศ ประกอบด้วย 2 ค่า คือ high, normal
  • windy แสดงว่าเป็นวันที่ลมแรงหรือไม่ ประกอบด้วย 2 ค่า คือ TRUE, FALSE
  • play แสดงการจัดแข่งขันกีฬา ซึ่งเป็นคลาส ประกอบด้วย 2 ค่า คือ yes, no

การสร้างโมเดล decision tree จะทำการคัดเลือกแอตทริบิวต์ที่มีความสัมพันธ์กับคลาสมากที่สุดขึ้นมาเป็นโหนดบนสุดของ tree (root node) หลังจากนั้นก็จะหาแอตทริบิวต์ถัดไปเรื่อยๆ ในการหาความสัมพันธ์ของแอตทริบิวต์นี้จะใช้ตัววัด ที่เรียกว่า Information Gain (IG) ค่านี้คำนวณได้จากสมการดังนี้

IG (parent, child) =  entropy(parent) – [p(c1) × entropy(c1) + p(c2) × entropy(c2) + …]

โดยที่ entropy(c1) = -p(c1) log p(c1) และ p(c1) คือ ค่าความน่าจะเป็นของ c1

ต่อไปเราจะลองคำนวณค่าแต่ละแอตทริบิวต์เทียบกับคลาสเพื่อหาแอตทริบิวต์ที่มีค่า IG มากที่สุดมาเป็น root ของ decision tree ดังนี้ครับ

1. คำนวณค่า IG ของแอตทริบิวต์ outlook เพื่อให้ดูง่ายขึ้นผมจะแสดงให้เป็นภาพดังในรูปที่ 1

Screen Shot 2557-03-17 at 7.10.21 AM

รูปที่ 1 แสดงค่าความน่าจะเป็นเมื่อใช้แอตทริบิวต์ outlook

จากรูปที่ 1 สามารถคำนวณค่า IG ได้ดังนี้
entropy (parent) = -p() × logp() – p() × logp()
= -[0.64 × log2(0.64) + 0.36 × log2(0.36)]
= -[0.64 × -0.64 + 0.36 × -1.47]
= 0.94
Continue reading

เทคนิค Support Vector Machine (SVM) และซอฟต์แวร์ HR-SVM

หลังจากบทความที่แล้วผมได้พูดถึงการแปลความหมายของโมเดล Neural Network ใน Weka กันไปแล้ว วันนี้จะแนะนำให้รู้จักเทคนิค Support Vector Machine หรือเรียกสั้นๆ ว่า SVM ซึ่งเป็นโมเดลที่ใช้การคำนวณทางคณิตศาสตร์ซึ่งจัดอยู่ในกลุ่มเดียวกับ Neural Network แต่ SVM มีข้อดีกว่าตรงที่ไม่ค่อยเกิดปัญหา overfitting มากเหมือนกับ Neural Network

Note Overfitting คือการที่โมเดลจดจำรูปแบบของข้อมูล training มากเกินไปจนไม่สามารถทำนายข้อมูล unseen data ได้เพื่อให้เข้าใจง่ายขึ้นลองคิดตามสถานการณ์นี้ครับ สมมุติว่านิสิตคนหนึ่งเตรียมตัวที่จะสอบวิชาภาษาอังกฤษซึ่งโดยปกติแล้วการสอบในแต่ละปีจะมีคำถามที่คล้ายๆ เดิมดังนั้นนิสิตคนนี้จึงได้นำข้อสอบในปีก่อนหน้ามาอ่านเพื่อจดจำคำถามและคำตอบและเนื่องจากนิสิตคนนี้ความจำดีเลิศสามารถจดจำคำถามและจำตอบได้หมดทุกข้อ แต่เมื่อถึงเวลาไปสอบจริงๆ แล้วอาจารย์เปลี่ยนคำถามในข้อสอบใหม่หมดจนไม่มีข้อใดเหมือนเดิมเลย ทำให้นิสิตคนนี้ทำข้อสอบได้คะแนนที่ตำ่มากเพราะพยามแต่จะจำคำถามและคำตอบของข้อสอบปีก่อนๆ ลักษณะแบบนี้เป็นตัวอย่างของ overfitting ครับ ^^

แต่ว่าการทำงานทางทฤษฎีของ SVM ค่อนข้างเข้าใจยากพอสมควร ดังนั้นวันนี้ผมขออธิบาย concept คร่าวๆ ของ SVM ให้ดูครับ สมมุติว่าข้อมูล training ของเราแสดงความสัมพันธ์ระหว่างอายุและรายได้ และมีคลาสเป็น 2 คลาสคือ คลาส A และ คลาส B เมื่อเราเอาข้อมูลมาทำการ plot ลงไปในกราฟ 2 มิติ ดังแสดงในรูปที่ 1 ซึ่งแกน x แสดงค่ารายได้ และแกน y แสดงค่าอายุ และสีแสดงค่าคลาส

scatter_plot
รูปที่ 1 แสดงการกระจายข้อมูล

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

linear model รูปที่ 2 แสดง linear model ต่างๆ ที่สามารถแบ่งข้อมูลออกเป็น 2 กลุ่มได้

คำถามก็คือแล้วเราจะเลือกโมเดลไหนดี ? คำตอบคือเราควรจะเลือกโมเดลที่ไม่ overfitting หรือโมเดลที่ไม่จำรูปแบบของข้อมูล training มากเกินไป จากตัวอย่างจะเห็นว่าโมเดลที่ 1 และโมเดลที่ 3 จะมีจุดหนึ่งที่ linear model อยู่ใกล้กับข้อมูลแต่ละคลาสมากเกินไป นั่นคือ ถ้ามีข้อมูลใหม่ที่อยู่ห่างออกไปสักเล็กน้อยก็จะทำนายผิดไปพลาดไป ดังนั้นในตัวอย่างนี้จึงควรจะเลือกโมเดลที่ 2  (เส้นสีแดง) และนั่นคือหลักการของ SVM ที่เลือก linear model ที่มีระยะห่างระหว่าง 2 คลาสห่างกันมากที่สุด ดังแสดงในรูปที่ 3

Screen Shot 2557-03-13 at 10.43.44 AM                 รูปที่ 3 แสดงโมเดล SVM ที่แบ่งข้อมูลออกเป็น 2 กลุ่มได้

ข้อดีอีกอย่างของวิธีการ SVM คือการมี kernel function ที่สามารถเปลี่ยนข้อมูลที่มีมิติ (dimension) ที่ต่ำกว่าให้มีมีติสูงขึ้นเพื่อให้การแบ่งข้อมูลแบบ linear model ได้ ดังแสดงตัวอย่างในรูปที่ 4

kernel svm
รูปที่ 4 แสดงการแปลงข้อมูลด้วย Kernel function

จากข้อมูลในรูปที่ 4 (a) จะเห็นว่ามีข้อมูลอยู่ 2 คลาส คือ คลาส A และ B ซึ่งมีเพียง 1 มิติ เราสามารถสร้างโมเดลที่เป็นรูปแบบของกฏเพื่อแบ่งแยกข้อมูลออกเป็น 2 คลาสได้ เช่น

  • ถ้าค่า X < 0.5 หรือ X > 2.5 แล้วจะทำนายว่าเป็นคลาส B
  • ถ้าค่า X อยู่ในช่วง [0.5-2.5] แล้วจะทำนายว่าเป็นคลาส A

ที่เป็นเช่นนี้เนื่องจากข้อมูลใน training ของเราแสดงแค่นั้น แต่เหมือนเดิมครับโมเดลที่สร้างนี้อาจจะ overfit ได้ถ้าจริงๆ แล้วข้อมูลที่มีค่า X = -1 ก็เป็นคลาส A แต่โมเดลเราจะทำนายผิดทันที

ดังนั้นถ้าเราใช้ kernel function เพื่อเพิ่มแอตทริบิวต์ขึ้นมาเป็น X2 = X2 ซึ่งแสดงการกระจายตัวของข้อมูลในรูปที่ 4 (b) และมีโมเดล SVM ทำการแบ่งข้อมูลออกเป็น 2 คลาสโดยการใช้เส้นตรงเพียงเส้นเดียว

ทั้งหมดนี้คือ concept ของ SVM ซึ่งอย่างที่ผมบอกตั้งแต่ตอนแรกว่าทฤษฏีในการสร้างโมเดลนั้นยุ่งยากมากทีเดียว จึงได้มีผู้พัฒนาซอฟต์แวร์ที่ช่วยให้สามารถสร้างโมเดล SVM ได้อย่างง่ายๆ ขึ้นมา เช่น SVMlight หรือ libsvm ซึ่งทำงานได้ดี แต่ในวันนี้ผมขอแนะนำซอฟต์แวร์อีกตัวหนึ่งชื่อว่า HR-SVM ซึ่งพัฒนาโดยทีมงานคนไทยนำทีมโดย ดร. พีรพล เวทีกูล อาจารย์จากคณะวิศวกรรมศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย ซอฟต์แวร์ตัวนี้สามารถทำงานได้ทั้งในระบบปฏิบัติการ Windows, Linux และ Mac OS X โดยซอฟต์แวร์นี้สามารถสร้างโมเดล SVM

  • สำหรับ classify ข้อมูล 2 คลาสหรือมากกว่า (multiclass)
  • สำหรับ classify ข้อมูลประเภท multi-label หรือการที่ข้อมูล 1 ตัวมีได้มากกว่า 1 คลาสคำตอบ เช่น ข่าวหนึ่งอาจจะเป็นข่าวกีฬาและบันเทิงไปพร้อมกัน
  • สำหรับ classify ข้อมูลประเภท hierarchical multi-label คือ ข้อมูลที่มีหลายลาเบล และมีการเรียงตัวเป็นชั้น

ข้อแตกต่างระหว่างซอฟต์แวร์ HR-SVM และซอฟต์แวร์อื่นๆ แสดงดังในตารางที่ 1

ตารางที่ 1 เปรียบเทียบ feature ของซอฟต์แวร์ที่ใช้สร้างโมเดล SVM

FunctionalitySVMlightSVMTorchLIBSVMHR-SVM
Binary ClassificationXXXX
Multiclass Classification-XXX
Feature Selection--XX
Multi-Label Classification--XX
Imbalanced Data Handling---X
Hierarchical Multi-Label Classification---X
Propagated Error Handling---X

สำหรับท่านที่สนใจการใช้งานติดตาม VDO การใช้งานได้ที่ เว็บไซต์ https://sites.google.com/site/hrsvmproject/

สำหรับท่านที่สนใจการใช้งาน SVM ใน RapidMiner Studio 6 สามารถดูได้จากบทความ “การหา optimize parameter สำหรับ libsvm ด้วย RapidMiner Studio 6” ครับ

เอกสารอ้างอิง

การแปลความโมเดล Neural Network (ตอนที่ 2)

ในบทความที่ผ่านมาเราได้สร้างโมเดล Neural Network ด้วย Weka กันไปแล้วนะครับ และเราได้โมเดลดังแสดงในตารางที่ 1 และ 2 ดังนี้

ตารางที่ 1 แสดงข้อมูลน้ำหนักระหว่าง Input node และ Hidden node

List of input nodeNode 1Node 2Node 3
houseSize0.470.640.65
lotSize-1.26-0.97-1.02
bedrooms-1.54-0.80-0.84
granite0.34-0.21-0.20
bathroom-0.94-0.26-0.32
Threshold-0.34-0.78-0.79

ตารางที่ 2 แสดงข้อมูลน้ำหนักระหว่าง Hidden node และ Output node

List of Hidden nodeOutput
Node 1-1.40
Node 2-1.04
Node 3-1.08
Threshold1.16

แม้ว่าก่อนหน้านี้ผมเคยเขียนบทความการนำโมเดลที่ได้จาก Weka ไปใช้งานแล้ว แต่บางท่านอาจจะอยากเข้าใจการทำงานของโมเดล Neural Network นี้หรือนำไปเขียนในระบบของตนเองที่จะพัฒนาขึ้นมาใช้งาน ดังนั้นในบทความนี้ผมจะแสดงตัวอย่างการนำโมเดลที่ได้ไปใช้ในการคำนวณเพื่อหาราคาบ้าน โดยผมจะขอใช้ข้อมูลอินแสตนซ์แรกจากในไฟล์ training ดังแสดงในตารางที่ 3

ตารางที่ 3 แสดงข้อมูลรายละเอียดของบ้านที่จะใช้ในการทดสอบโมเดล

houseSizelotSizeBedroomsgranitebathroomsellingprice
35299191600205000

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

  1. ข้อมูลในตารางที่ 3 จะต้องทำการแปลงค่าให้อยู่ในช่วง -1 ถึง 1 เสียก่อนโดยใช้สมการดังนี้
    • range = (max-min)/2 โดยที่ค่า max คือค่าที่มากที่สุด และ min คือค่าที่น้อยสุดของแต่ละแอตทริบิวต์
    • base = (max+min)/2
    • norm_attribute = (attribute-base)/range
  2. ทำการแปลงค่าในแอตทริบิวต์ houseSize (ขอเขียนย่อเป็น a1) ได้เป็น
    • range = (4032-2200)/2 = 916
    • base   = (4032+2200)/2 = 3116
    • norm_a1 = (3529-3116)/916 = 0.45
  3. ทำการแปลงค่าในแอตทริบิวต์ lotSize (ขอเขียนย่อเป็น a2) ได้เป็น
    • range = (19994-9191)/2 = 5401.5
    • base   = (19994+9191)/2 = 14592.5
    • norm_a2 = (9191-14592.5)/5401.5 = -1
  4. ทำการแปลงค่าในแอตทริบิวต์ bedrooms (ขอเขียนย่อเป็น a3) ได้เป็น
    • range = (6-4)/2 = 1
    • base   = (6+4)/2 = 5
    • norm_a3 = (6-5)/1 = 1
  5. ทำการแปลงค่าในแอตทริบิวต์ granite (ขอเขียนย่อเป็น a4) ได้เป็น
    • range = (1-0)/2 = 0.5
    • base   = (1+0)/2 = 0.5
    • norm_a4 = (0-0.5)/0.5 = -1
  6. ทำการแปลงค่าในแอตทริบิวต์ bathroom (ขอเขียนย่อเป็น a5) ได้เป็น
    • range = (1-0)/2 = 0.5
    • base   = (1+0)/2 = 0.5
    • norm_a5 = (0-0.5)/0.5 = -1
  7. หลังจากนั้นเราจะนำค่าแอตทริบิวต์ต่างๆ ที่แปลงแล้วมาใส่ในสมการเพื่อส่งไปยัง activate function ต่อไปดังในรูปที่ 1 ซึ่งเป็นโหนดใน hidden layer
    Screen Shot 2557-03-12 at 9.48.17 AM
    รูปที่ 1 แสดงการคำนวณค่าในโหนดที่ 1 ใน Hidden layer ของโมเดล Neural Network

    • x1 = (0.45*0.47) + (-1*-1.26) * (1*-1.54) + (-1*0.34) + (-1*-0.94) -0.34
      x1 = 0.19
    • f(x1) = 1/1+e-x = 1/1+e-0.19 = 0.55
  8. คำนวณค่า f(x) ของโหนดที่ 2 ในโมเดล
    • x2 = (0.45*0.64) + (-1*-0.97) * (1*-0.80) + (-1*-0.21) + (-1*-0.26) -0.78
      x2 = 0.15
    • f(x2) = 1/1+e-x = 1/1+e-0.15 = 0.54
  9. คำนวณค่า f(x) ของโหนดที่ 3 ในโมเดล
    • x3 = (0.45*0.65) + (-1*-1.02) * (1*-0.84) + (-1*-0.20) + (-1*-0.32) -0.79
      x3 = 0.20
    • f(x3) = 1/1+e-x = 1/1+e-0.20 = 0.55
  10. แสดงการคำนวณค่าในโหนด Output  ดังแสดงในรูปที่ 2
    Screen Shot 2557-03-12 at 9.54.07 AM
    รูปที่ 2 แสดงการคำนวณค่าในโหนดที่ 0 ใน Output layer ของโมเดล Neural Network

    • x0 = (0.55*-1.40)+(0.54*-1.04)+(0.55*-1.08)+1.16
      x0 = -0.77
    • f(x0) = -0.77
  11. ค่าคำตอบที่ได้คือ -0.77 เอ๊ะราคาบ้านคือ -0.77 หรอ จริงๆ ไม่ใช่นะครับ เราต้องทำการแปลงค่ากลับให้ไปอยู่ในช่วงของข้อมูลของแอตทริบิวต์ใน training ก่อนครับ โดยมีวิธีการทำดังนี้
    • range = (325000-189900)/2 = 67550
    • base   = (325000+189900)/2 = 257450
    • sellingPrice = -0.77*67550 + 257450 = 205436.5

สรุปแล้วค่าที่โมเดล Neural Network ทำนายออกมาได้คือ 205436.5 ซึ่งมีค่า error เกิดขึ้น 436.5 US dollar ครับ ^^ หวังว่าบทความนี้จะช่วยให้เข้าใจการใช้งานโมเดล Neural Network ได้มากขึ้นครับ ในครั้งถัดไปผมจะพูดถึงเทคนิคยอดฮิตของการทำ classification นั่นคือ Support Vector Machines (SVM) ครับ

Screen Shot 2557-03-08 at 1.53.22 AM

หลักสูตร Data Science จากมหาวิทยาลัย Harvard

สำหรับท่านที่สนใจหลักสูตร Data Science ผมขอแนะนำหลักสูตรนี้ครับ เป็นหลักสูตรที่เปิดสอนในมหาวิทยาลัย Harvard ซึ่งได้ผ่านไปแล้ว แต่เราสามารถดู VDO การสอนย้อนหลังได้จากเว็บ http://cm.dce.harvard.edu/2014/01/14328/publicationListing.shtml โดยมีทั้งหมด 22 vdo ดังนี้ครับ

  1. Introduction to Data Science
  2. Process, Data, and Visual Attributes
  3. Statisical Graphs
  4. Data Munging
  5. Statistical Models
  6. Bias and Sampling
  7. Regression
  8. High-dimensional data
  9. Classification and Clustering
  10. How to Think Like a Bayesian
  11. Bias, Variance and Cross Validation
  12. Bayesian computation continued, Monte Carlo methods
  13. Basic machine learning
  14. Amazon EC2, AWS Datastore, MapReduce, MRJob
  15. Guest Lecture: Katie Harris, Fathom
  16. Trees, Networks and Databases
  17. Guest Lecture: Margo Seltzer, Databases
  18. Network Visualization. Node-Link Graphs. Matrix Views. Gephi
  19. Network Models II
  20. Visual Story Telling. Messaging. Effective Presentations.
  21. Wrap-up & Outlook
  22. Guest Lecture: Yair Livne, Data Science at Quora