ขั้นตอนการหากฏความสัมพันธ์ (Association Rules)

บทความที่ผ่านมาได้พูดถึงวิธีการสร้างโมเดล classification แบบต่าง เช่น Neural Network, Support Vector Machine, Decision Tree และ Naive Bayes ในบทความนี้จะพูดถึงการหากฏความสัมพันธ์ หรือ association rules

ในการหากฏความสัมพันธ์นี้มีอยู่หลายวิธี แต่สำหรับบทความนี้จะแสดงการหากฏความสัมพันธ์ด้วยวิธี Apriori ซึ่งจะมีอยู่ 2 ขั้นตอนใหญ่ๆ คือ

  1. การหา frequent itemset เป็นการหารูปแบบของข้อมูลที่เกิดขึ้นร่วมกันบ่อยๆ ในฐานข้อมูล  หรือ มากกว่าค่า minimum support ที่ผู้ใช้กำหนด ในขั้นตอนนี้จะแบ่งได้อีกเป็น 2 ขั้นตอนย่อย คือ
    • การสร้างรูปแบบของ itemset  (join) จะใช้รูปแบบของ itemset ที่มีค่ามากกว่า minimum support มาทำการสร้างรูปแบบของ itemset ที่มีขนาดยาวมากขึ้นทีละหนึ่งขั้นไปเรื่อยๆ
    • การนับค่า support (count) หลังจากที่สร้างรูปแบบของ itemset ได้แล้ว ขั้นถัดมาจะทำการคำนวณค่า support ที่เกิดขึ้น โดยที่ support คือจำนวนเปอร์เซ็นต์ที่พบ itemset ในฐานข้อมูล
  2. การสร้าง association rule หลังจากที่หา frequent itemset ได้แล้วจะนำรูปแบบที่หาได้มาสร้างเป็นกฏความสัมพันธ์โดย เช่น Apple => Cereal หมายความว่าเมื่อลูกค้าซื้อ Apple แล้วลูกค่าจะซื้อ Cereal ร่วมไปด้วย

ในบทความนี้จะใช้ตัวอย่างข้อมูลที่แสดงในรูปที่ 1 ซึ่งเรียกว่า transaction database ในฐานข้อมูลนี้จะประกอบด้วย 4 transaction และมีสินค้าที่ลูกค้าซื้อทั้งหมด 5 ประเภทคือ Apple, Beer, Cereal, Diapers และ Eggs

transaction_database

รูปที่ 1 แสดง transaction database ที่จะใช้หากฏความสัมพันธ์

ในบทความนี้จะแสดงตัวอย่างการหากฏความสัมพันธ์โดยกำหนดค่า minimum support ไว้ที่ 50% นั่นคือ สินค้าที่มีการซื้อมากกว่าหรือเท่ากับ 50% จะถือว่าเป็น frequent itemset ขั้นตอนการทำงานมีดังต่อไปนี้
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

ดาวน์โหลดฟรี An Introduction to Statistical Learning with Applications in R

ISLR Coverผมเคยได้รับคำแนะนำให้อ่านหนังสือ The Elements of Statistical Learning ที่เขียนโดย Hastie, Tibshirani และ Friedman ซึ่งเป็นหนังสือในตำนานที่เยี่ยมยอดเล่มหนึ่งเลยทีเดียว แต่ว่าหนังสือเล่มนี้ก็อ่านค่อนข้างยากเพราะมีการใช้สมการทางคณิตศาสตร์ในการอธิบาย ถ้าใครเคยติดปัญหาเหมือนผมหรือติดใจหนังสือ ESL วันนี้ผมแนะนำหนังสือเรื่อง An Introduction to Statistical Learning with Applications in R ซึ่งเขียนโดยทีมเดิมแต่ปรับเนื้อหาให้อ่านได้ง่ายขึ้น มีคำอธิบายมากขึ้นและมีวิธีการใช้งานจริงด้วยภาษา R

 

หนังสือทั้งสองเล่มนี้สามารถดาวน์โหลดได้ฟรีตาม link ด้านล่างนี้ครับ

สำหรับท่านที่สนใจหนังสือทาง data mining เล่มอื่นๆ ลองดูที่ Our Experience ครับ ผม list หนังสือที่เคยอ่านและอยากแนะนำไว้แล้วครับ ^^

เทคนิค 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) ครับ

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

ช่วงที่ผ่านมาผมได้รับคำถามที่น่าสนใจจากหลายๆ ท่านทำให้ผมต้องไปค้นคว้าหาข้อมูลเพื่อมาตอบคำถาม และทำให้เข้าใจมากขึ้น วันนี้ผมขอนำสิ่งที่ผมไปค้นหาเกี่ยวกับการแปลความหมายในโมเดลของ Neural Network มาเล่าสู่กันฟัง (share) ครับ ^^

    1. ก่อนที่เราจะสร้างโมเดล Neural Network หรือใน Weka จะเรียกว่า Multi Layer Perceptron (MLP) ได้นั้นเราต้องมีข้อมูลเสียก่อน ในตอนนี้ผมจะใช้ข้อมูลสมมุติเกี่ยวกับราคาขายบ้านในประเทศสหรัฐอเมริกา ซึ่งมีทั้งหมด 6 แอตทริบิวต์ โดยมีค่าข้อมูลต่างๆ ดังแสดงในตารางที่ 1 และไฟล์ ARFF แสดงในรูปที่ 1ตารางที่ 1

       แสดงข้อมูลรายละเอียดของบ้านพร้อมทั้งราคา

      houseSizelotSizebedroomsgranitebathroomsellingPrice
      35299191600205000
      324710061511224900
      403210150501197900
      239714156410189900
      22009600401195000
      353619994611325000
      29839365501230000
      @RELATION house@ATTRIBUTE houseSize NUMERIC
      @ATTRIBUTE lotSize NUMERIC
      @ATTRIBUTE bedrooms NUMERIC
      @ATTRIBUTE granite NUMERIC
      @ATTRIBUTE bathroom NUMERIC
      @ATTRIBUTE sellingPrice NUMERIC@DATA
      3529,9191,6,0,0,205000
      3247,10061,5,1,1,224900
      4032,10150,5,0,1,197900
      2397,14156,4,1,0,189900
      2200,9600,4,0,1,195000
      3536,19994,6,1,1,325000
      2983,9365,5,0,1,230000รูปที่ 1

      แสดงข้อมูลในไฟล์ ARFF

    2. หลังจากที่เราได้เตรียมข้อมูลเรียบร้อยแล้ว เราก็จะโหลดข้อมูลเข้าไปใช้งานใน Weka กันครับ ขั้นแรกให้เราเลือกที่เมนู Open File ในแท็บ Preprocess และเลือกไฟล์ house.arff รายละเอียดของแอตทริบิวต์ต่างๆ จะแสดงในรูปที่ 2
      Screen Shot 2557-03-11 at 6.21.05 AM
      รูปที่ 2 แสดงข้อมูลที่โหลดเข้ามาใน Weka Explorer

 

    1. ถัดจากนั้นคลิกที่แท็บ Classify เพื่อเตรียมตัวสร้างโมเดล Neural Network โดยคลิกที่ปุ่ม Choose เลือกคลิกที่กลุ่ม functions และเลือก MultiLayerPerceptron และกดปุ่ม Start โมเดลของ Neural Network จะแสดงในส่วนของ Classifier Output  ดังในรูปที่ 3
      Screen Shot 2557-03-11 at 7.16.05 AM
      รูปที่ 3 แสดงโมเดลของ Neural Network ที่หาได้ในส่วนของ Classifier Output

 

  1. โมเดลที่แสดงออกมานี้เป็นค่าน้ำหนัก (weight) ของเส้นที่เชื่อมระหว่างแต่ละโหนดใน Neural Network เพื่อให้เข้าใจมากขึ้นขออธิบายโครงสร้างของ Neural Network คร่าวๆ ดังในรูปที่ 4 และ 5 ครับScreen Shot 2557-03-11 at 8.13.41 AM
    รูปที่ 4 แสดงโครงสร้าง Neural Network ของไฟล์ที่โหลดเข้าไป
    node in nuron network
    รูปที่ 5 แสดงการคำนวณภายในแต่ละโหนดของ Neural Network

    จากรูปที่ 4 ซึ่งแสดงโครงสร้างของ Neural Network ซึ่งประกอบด้วยโหนด (รูปวงกลมสีเขียว สีแดง และสีเหลือง) และเส้นเชื่อมโยงแต่ละโหนด เมื่อเราพิจารณาการวางตัวของโหนดแล้วจะแบ่งออกได้เป็น 3 ชั้น (layer) คือ

      • ชั้นที่ 1 จะเรียกว่า Input layer ประกอบด้วยโหนดสีเขียวซึ่งแสดงแอตทริบิวต์ต่างๆ ในไฟล์ที่เราโหลดเข้าไป (ถ้าจะพูดให้ง่ายๆ จำนวนโหนดในชั้นนี้จะเท่ากับจำนวนแอตทริบิวต์ซึ่งก็คือ 5 แอตทริบิวต์นั่นเอง)
      • ชั้นที่ 2 จะเรียกว่า Hidden layer ประกอบด้วยโหนดสีแดง ซึ่งจำนวนของโหนดในชั้นนี้นั้นโดยปกติ (default) จะเท่ากับจำนวนแอตทริบิวต์ทั้งหมด (5 แอตทริบิวต์ทั่วไปและ 1 คลาส) หารด้วย 2 ดังนั้นจึงได้เป็น 3 โหนด
      • ชั้นที่ 3 จะเรียกว่า Output layer ประกอบด้วยโหนดสีเหลือง

    ในแต่ละโหนดที่อยู่ในชั้น Hidden และ Output จะมีการคำนวณดังในรูปที่ 5 โดยจะแบ่งเป็น 2 ขั้นตอนย่อย คือ

      • การคำนวณค่าผลรวม (Sum) ในขั้นนี้จะนำค่าของโหนดต่างๆ คูณกับค่าน้ำหนักในแต่ละเส้นเชื่อมแล้วจึงนำมารวมกันเป็นค่าสุดท้าย
      • การคำนวณค่าที่ส่งออกโดยผ่านฟังก์ชัน activate (activate function) ฟังก์ชันส่วนใหญ่ที่ใช้ คือ sigmoid funcion ซึ่งมีลักษณะเป็นเหมือนรูปอักษร S โดยมีฟังก์ชันคือ 1/(1+e-x)

    ผมจะแสดงตัวอย่างการคำนวณให้ดูในขั้นถัดไป

  2. จากโมเดลของ Neural Network ที่สร้างได้เราสามารถนำมาสร้างเป็นตารางได้ดังตารางที่ 2 ซึ่งแสดงค่าน้ำหนักระหว่าง Input node และ Hidden node (เพื่อให้ดูได้ง่ายขึ้นจะแสดงเพียงแค่ทศนิยม 2 หลักเท่านั้น) ส่วนตารางที่ 3 แสดงค่าน้ำหนักระหว่าง Hidden node ไปยัง Output node

    ตารางที่ 2 แสดงข้อมูลน้ำหนักระหว่าง 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
    ตารางที่ 3 แสดงข้อมูลน้ำหนักระหว่าง Hidden node และ Output node
    List of Hidden nodeOutput
    Node 1-1.40
    Node 2-1.04
    Node 3-1.08
    Threshold1.16

ถึงขั้นนี้คงจะพอเข้าใจความหมายของโมเดล Neural Network ใน Weka กันบ้างแล้วนะครับ ในวันถัดไปผมจะแสดงการทำนายโดยเอาข้อมูลใส่ในโมเดลของ Neural Network นี้ครับ

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