โมเดล 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 นี้ครับ

ตัวอย่างหนังสือ RapidMiner: Data Mining Use Cases and Business Analytics Applications

9781482205497ตัวอย่างบางบทจากในหนังสือ RapidMiner: Data Mining Use Cases and Business Analytics Applications ครับ เล่มนี้เป็นหนังสืออีกเล่มที่น่าสนใจสำหรับผู้สนใจอยากใช้ RapidMiner ดูรายละเอียดเพิ่มเติมได้ที่ หลักสูตรการวิเคราะห์ข้อมูลด้วยเทคนิค Data Mining โดยซอฟต์แวร์ RapidMiner Studio 6 (ขั้นพื้นฐานและปานกลาง) ครับ ^^

บทที่ 1 What This Book is About and What It is Not
บทที่ 2 Getting Used to RapidMiner
บทที่ 6 Naive Bayes Classificaton II
บทที่ 14 Robust Language Identification with RapidMiner: A Text Mining Use Case

การหา optimize parameter สำหรับ libsvm ด้วย RapidMiner Studio 6

ในปัจจุบันนี้เทคนิคการทำ classification ที่นิยมและให้ผลที่ดีก็คือ Support Vector Machine หรือ SVM แต่ไอเดียการทำงานของ SVM ค่อนข้างจะยุ่งยากในการจะนำมา implement เอง จึงได้มีอาจารย์จากมหาวิทยาลัยที่ประเทศไต้หวันได้พัฒนาโปรแกรมที่ชื่อว่า libsvm ขึ้นมาด้วยภาษา C/C++ และแจกจ่ายให้ผู้สนใจไปใช้งานได้ฟรี จนเป็นที่นิยมอย่างแพร่หลายในการทำงานวิจัย แต่การใช้ libsvm จำเป็นต้องทำการกำหนดค่า parameter ของ SVM ให้เหมาะสมถึงจะทำงานได้อย่างมีประสิทธิภาพ เพื่อให้การหา parameter นี้ได้ง่ายขึ้นในชุดของ libsvm จึงมีโปรแกรมที่ชื่อว่า grid.py ที่เป็นภาษา Python เตรียมไว้ให้ โปรแกรมนี้จะทำการเลือก parameter ที่เหมาะสมให้แต่ต้องรันบนระบบปฏิบัติการ Linux หรือต้องติดตั้งซอฟต์แวร์ cygwin สำหรับ Windows เสียก่อน ซึ่งก็ยุ่งยากพอควร

ในบทความนี้ผมจะแนะนำการหา parameter ที่เหมาะสมของ SVM โดยใช้ RapidMiner Studio 6 (ดังในรูปที่ 1)

optimize libsvm process

รูปที่ 1 process แสดงการหาพารามิเตอร์ที่เหมาะสมสำหรับ libsvm

ซึ่งข้อดีอย่างหนึ่งของ RapidMiner Studio 6 คือเราสามารถดาวน์โหลด process ที่เตรียมไว้ให้แล้วไปเปลี่ยนเฉพาะข้อมูลที่เราจะนำมาใช้ก็พอ ซึ่งผมจะแสดงตัวอย่างการใช้งาน process ดังกล่าวให้ดูในบทความนี้ครับ (ดาวน์โหลด process และข้อมูลไฟล์ Excel ได้จากที่นี่ครับ) สำหรับการใช้งาน RapidMiner Studio 6 เบื้องต้นติดตามได้ที่นี่
Continue reading

ดาวน์โหลดฟรี หนังสือ Practical Machine Learning

สำนักพิมพ์ O’REILLY ได้แจกหนังสือเรื่อง Practical Machine Learning: Innovation in Recommendations ฟรี ผู้สนใจสามารถดาวน์โหลดได้ที่
http://www.mapr.com/practical-machine-learning?imm_mid=0b7b85&cmp=em-strata-na-na-newsltr_free_report_20140219_elist

practical-machine-learning-cover

แนะนำ conference เกี่ยวกับ Big Data

วันนี้ผมขอแนะนำ 2 conference ที่เกี่ยวกับ Big Data

  1. 2014 IEEE International Conference on Big Data (IEEE BigData 2014)
    มีรายละเอียดดังนี้
    In recent years, “Big Data” has become a new ubiquitous term. Big Data is transforming science, engineering, medicine, healthcare, finance, business, and ultimately society itself. The IEEE International Conference on Big Data 2014 (IEEE BigData 2014) provides a leading forum for disseminating the latest research in Big Data Research, Development, and Applications.We solicit high-quality original research papers (including significant work-in-progress) in any aspect of Big Data with emphasis on 5Vs (Volume, Velocity, Variety, Value and Veracity) relevant to variety of data (scientific and engineering, social, sensor/IoT/IoE, and multimedia-audio, video, image, etc) that contribute to the Big Data challenges. This includes but is not limited to the following:

    1. Big Data Science and Foundations
    2. Big Data Infrastructure
    3. Big Data Management
    4. Big Data Search and Mining
    5. Big Data Security & Privacy
    6. Big Data Applications

    วันสุดท้ายของการส่ง paper (submission deadline): 6 กรกฏาคม 2557 (July 6, 2014)
    รายละเอียดเพิ่มเติมติดตามได้ที่ http://cci.drexel.edu/bigdata/bigdata2014/

  2. The 3rd IEEE International Conference on Big Data Science and Engineering (BDSE 2014) มีรายละเอียดดังนี้
    Big data is an emerging paradigm applied to datasets whose size is beyond the ability of commonly used software tools to capture, manage, and process the data within a tolerable elapsed time. Such datasets are often from various sources (Variety) yet unstructured such as social media, sensors, scientific applications, surveillance, video and image archives, Internet texts and documents, Internet search indexing, medical records, business transactions and web logs; and are of large size (Volume) with fast data in/out (Velocity). More importantly, big data has to be of high value (Value) and establish trust in it for business decision making (Veracity). Various technologies are being discussed to support the handling of big data such as massively parallel processing databases, scalable storage systems, cloud computing platforms, and MapReduce. Big data is more than simply a matter of size; it is an opportunity to find insights in new and emerging types of data and content, to make business more agile, and to answer questions that were previously considered beyond our reach. Distributed systems is a classical research discipline investigating various distributed computing technologies and applications such as cloud computing and MapReduce. With new paradigms and technologies, distributed systems research keeps going with new innovative outcomes from both industry and academia. For example, wide deployment of MapReduce is a distributed programming paradigm and an associated implementation to support distributed computing over large big datasets on cloud.BDSE (Big Data Science and Engineering) is created to provide a prime international forum for both researchers, industry practitioners and environment experts to exchange the latest fundamental advances in the state of the art and practice of Big Data and broadly related areas.

    BDSE 2014 is the next event in a series of highly successful International Conferences, previously held as BDSE2013 (Sydney Australia), BigDataMR-12 (Xiangtan, China November 2012), AHPCN-12 (Bradford, UK, June 2012), AHPCN-11 (Banff, Canada, September 2011), AHPCN-10 (Melbourne, Australia, September 2010), AHPCN-09 (Seoul, Korea, June 2009), AHPCN-08 (Dalian, China, September 2008).

    วันสุดท้ายของการส่ง paper (submission deadline): 5 พฤษภาคม 2557 (May 5, 2014)
    รายละเอียดเพิ่มเติมติดตามได้ที่ http://www.swinflow.org/confs/bdse2014/index.htm