การแปลความโมเดล 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) ครับ

Posted in data mining, machine learning, weka and tagged , , , , .

7 Comments

  1. อาจารย์พอมีบทความ ของ Adaboost ที่เขียนเป็น ภาษาไทยบ้างมั้ยครับ ผมหาอ่านจากเว็บไซต์ต่างประเทศ​แล้วไม่เข้าใจเลยครับ ขอบคุณครับ

    • ขอโทษที่ตอบล่าช้าและขอบคุณที่สนใจเนื้อหาของเราครับ ตอนนี้ยังไม่มีเนื้อหา AdaBoost ภาษาไทยเลยครับ เดี๋ยวผมจะเขียนเพิ่มให้นะครับ ขอเวลาสัพกพักนะครับ

      • ขอบคุณมากเลยครับอาจารย์ จะติดตามอ่านต่อไปครับ

  2. อาจารย์ครับ Input เราสามารถเป็นตัวอักษรหรือเป็น String ได้ไหมครับ ถ้าเป็นได้แล้ว จะคิดInput มาคูณกับค่า Weight อย่างไรครับ

    • คิดว่าน่าจะเรียกว่าเป็นประเภท categorical นะครับ สามารถทำได้โดยการแปลงให้เป็นตัวเลขครับ เช่น มีค่า gender เป็น female, male ก็จะถูกแปลงเป็น input node 2 โหนดครับ และถ้าค่าในแต่ละตัวอย่างเป็นอะไรก็จะใส่ค่า 1 ในโหนดนั้นครับ เช่น ตัวอย่าง (example) ที่ 1 มีค่า gender = male ก็จะได้ว่า node gender=female มีค่าเป็น 0 ครับ และ node gender=male มีค่าเป็น 1 ครับ ^^

  3. Weight นี่มีวิธีหามากี่วิธีบ้างครับ ต้อง Learn ก่อนมั้ยครับกว่าจะได้ค่า Weight มา เคยอ่านในเปเปอร์ แต่วิชาคณิตศาสตร์อ่อนด้อยนักครับ เลยไม่รอด เหอๆ T_T

    • ใช่ครับเราต้องหา weight ก่อนครับ ด้วยวิธีการที่เรียกว่า Backpropagation ครับ

Leave a Reply

Your email address will not be published. Required fields are marked *