logistic regression

Logistic regression คือ (Ep.2)

ในบทนี้เราจะมาต่อจาก “logistic regression คือ” ที่ได้พูดถึงที่มาและหลักการการประมาณการข้อมูลแบบ Logistic regression และได้พูดถึง cost function ซึ่งเป็นสมการผลรวมของ error โดยในบทนี้เราจะพูดถึงหัวข้อที่ 6 – 10 ประกอบไปด้วย

    6. Gradient descent
    7. multi-class classification
    8. วัดความแม่นยำของ model ด้วย confusion matrix
    9. Overfitting คือ อะไร
   10. แนวทางการแก้ไขปัญหา overfitting

6. Gradient descent

gradient descent เป็น algorithm ที่ครอบลงบนสมการ cost function อีกทีหนึ่ง ซึ่ง gradient descent คือการดิ๊ฟสมการ cost function ไปเรื่อย ๆจนกว่าเราจะได้ค่า cost function ต่ำที่สุด ซึ่งเมื่อถึงจุดที่ค่า cost function ต่ำที่สุดนั่นคือจุด optimal minimum ซึ่งจุดนี้เองมันจะให้ค่า θ ที่ดีที่สุด

cost function

เราสามารถรวมสมการ cost function ให้อยู่ใน 1 สมการได้ดังภาพด้านบน เพื่อที่เราจะได้นำสมการ cost function ไปทำ gradient descent อีกที (รูปแบบของสมการเขียนขึ้นมาตาม คำนิยามเรื่อง cost function ที่ถ้า y = 1 เมื่อแทนค่า y ลงไปในสมการ cost function จะทำให้เหลือแค่พจน์หน้าซึ่ง y=1 ทำให้ค่า cost function มีค่าต่ำสุด)


โดยสมการ gradient descent โดยทั่วไปจะมีฟอร์มแบบด้านบน นั่นคือเราจะทำการดิ๊ฟสมการ cost function จะได้

logistic regression

เมื่อเราเข้าใจ concept การหาค่า θ ด้วย gradient descent แล้ว ต่อมาตรงข้อ 3 คือเราจะมาแปลงสมการทางคณิตศาสตร์ ให้อยู่ในรูปของ vector เพื่อที่เมื่อเรานำไปเขียน code จะได้ให้คอมพิวเตอร์มันคำนวณข้อมูลของเราออกมาได้ตามสูตร

การหาค่า θ อีกวิธีที่เป็นที่นิยมคือ maximum likelihood estimation

7. Multi-class classification

จากที่เราได้เรียนไปด้านบนเป็นการแบ่ง y ออกเป็น 2 กลุ่มเเรก เรียกว่า binary classification ซึ่งการแบ่งกลุ่มของ y นั้นสามารถแบ่งได้มากกว่า 2 เราเรียกว่า multi-class classification ยกตัวอย่างเช่น เราต้องการแบ่งกลุ่ม email ออกเป็น 4 กลุ่ม เช่น email ที่เกี่ยวกับงาน work family hobby เป็นต้น และมีการกำหนดด้วยว่าถ้า y=1 ให้จัดในหมวด work ตามภาพด้านล่าง

logistic reression

ซึ่งวิธีที่เราใช้ในการแบ่งข้อมูลออกเป็นหลายๆกลุ่มเราเรียกว่า One vs all classification วิธีการตามรูปด้านล่าง

logistic regression

อธิบาย one vs all classification

  1. สมมติเรามีข้อมูล (x_1) และ x_2) แต่เราต้องการแบ่งกลุ่มข้อมูลออกเป็น 4 กลุ่ม
  2. เราก็จะสอนคอมพิวเตอร์เราโดยใช้การวิเคราะห์แบบ logistic regression โดยเรากำหนดให้กลุ่มที่ 1 คือกลุ่มที่เราสนใจ ให้ y = 1 จากนั้นก็ให้ข้อมูลกลุ่มที่เหลือเป็นสิ่งที่เราไม่ต้องการนั่นคือ y = 0
  3. เมื่อแบ่งกลุ่มแรกเสร็จ ต่อไปเราก็จะทำเหมือนขั้นตอนที่ 2 อีกรอบ แต่รอบนี้เรากำหนดกลุ่มที่เราต้องการแบ่งคือกลุ่มที่ 2 ให้เป็น y=2 และกลุ่มที่เหลือเราไม่ต้องการให้เป็น y=0 ทำแบบนี้ไปเรื่อย ๆ จนกว่าจะครบกลุ่มที่เราต้องการ

8. วัดความแม่นยำของ model ด้วย Confusion Matrix

ต่อมา เมื่อเราทำการประมาณการข้อมูลออกมาแล้ว เราจะมาตรวจสอบกันว่า model ที่เราใช้นั้นทำนายผลได้แม่นยำหรือไม่ โดยเราจะใช้ข้อมูลที่อยู่ในตาราง confusion matrix มาคำนวณอีกที
โดย confusion matrix จะถูกแสดงออกมาในรูปของตาราง matrix ซึ่งมีมิติตั้งแต่ 2*2 ขึ้นไป ขึ้นอยู่กับว่าเราแบ่งกลุ่ม y ออกเป็นกี่กลุ่ม ในที่นี่เราจะยกตัวอย่างง่ายๆ คือเราแบ่ง y เป็น 2 กลุ่ม ดังนั้นจะได้ confusion matrix เป็น matrix มิติ 2*2 ดังรูปด้านล่าง

จากรูปฝั่งซ้าย predicted values คือ ค่า y_p ที่เราประมาณการออกมาได้ ซึ่งทีนี้เราเดาออกมา 2 ค่าคือ positive class (1) และ negative class (0) ส่วนด้านบนคือ Actual values คือค่า Yจริงที่มี 2 ค่า เหมือนกันคือ แต่จะต่างกันที่จะเป็น true(เดาถูก) และ false(เดาผิด) จากนั้นเราก็จะจับคู่ค่าต่าง ๆที่กล่าวมา และแบ่งออกเป็น 4 ช่อง เดี๋ยวเราจะลองยกตัวอย่างเพื่อให้เข้าใจง่าย

โดยกำหนดให้ ผู้ชาย : y_p = 1 (positive class) และ ผู้หญิง: y_p = 0 (Negative class)

  • True positive คือ เราเดาว่ามันเป็น positive class (y_p = 1) และตรงกับค่า y_จริง (True) เช่น เดาว่าเข้าเป็นผู้ชายและเขาก็เป็นผู้ชายจริง
  • False positive คือ เราเดาว่ามันเป็น positive class (y_p = 1) แต่ไม่ตรงกับค่า y_จริง (false) เช่น เดาว่าเข้าเป็นผู้ชายแต่เขาเป็นผู้หญิง
  • True negative คือ เราเดาว่ามันเป็น negative class ( y_p = 0) และตรงกับค่า y_จริง (True) เช่นเดาว่าเขาเป็นผู้หญิงและเขาเป็นผู้หญิงจริง
  • False negative คือ เราเดาว่ามันเป็น Negative class (y_p=0) แต่มันไม่ตรงกับค่า y_จริง (False) เช่น เราเดาว่าเขาเป็นผู้หญิงแต่เขาเป็นผู้ชาย
confusion matrix

ในการจะวัดความแม่นยำของ model เราจะดู 4 อย่างหลักๆคือ

  • Recall คือ จาก y_จริง ที่เป็น positive class เราเดาถูกเป็น positive class เท่าไร
    • เช่น y_จริง ที่เป็น positive class ทั้งหมดนั้นมี 50 ค่า (มีผู้ชาย 50 คน) แล้วเราเดาถูกว่าเป็น positive class ได้ 45 คิดเป็น 90%
  • Precision คือ ความแม่นยำในการเดาว่าเป็น positive ต่อการเดาทั้งหมดของเรา (บางค่าเป็น positive แต่เราไปเดาเป็น negative)
    • เราจากการเดาทั้งหมดของเราเป็น positive 46 ค่า (45+1) แต่ในความเป็นจริงแล้ว แต่เมื่อนำไปเทียบกับค่า y_จริง เราเดาผิดไป 1 อัน
  • Accuracy คือ เราเดาถูกมากน้อยแค่ไหน (คือเดาถูกว่าเป็น positive และเดาถูกว่าเป็น negativeด้วย)
    • เช่นเดาถูกว่าเป็น positive ได้ 45 + เดาถูกว่าเป็น negative 49 จำนวนข้อมูลใน training set ทั้งหมด 100 จากผลเราเดาถูก 94 ค่า
  • F-measure คือการวัดความแม่นยำของ model ทั้งหมด ซึ่งค่า F-measure ได้มาจากการเฉลี่ยค่า precision และ recall ซึ่งในนี้เราได้ 0.937

9. Overfitting คือ อะไร

logistic regression

overfitting คือ การที่เราใส่ features มากเกินไป จนทำให้ model นั้น ๆ fit กับ ข้อมูล training set ของเรามาก คือมันดีกับข้อมูล training set แหละ แต่ว่า modelนี้ไม่สามารถนำไปใช้กับข้อมูลอื่นได้ (overfitting เกิดได้กับทุก algorithm เพื่อให้ง่าย เรายกตัวอย่าง linear regression ก่อน) จากรูปจะเห็นได้ว่า

  • รูป A นั้นเป็นการประมาณการที่ underfit หรือ high bias คืออาจจะขาดบางตัวแปร (features) ที่สำคัญ ตัวแปรน้อยเกินไป หรือ สมการที่เราใช้ง่ายเกินไปเป็นต้น
  • ส่วนรูป B เป็นการประมาณการที่เราลองเพิ่มตัวแปรที่เป็นเลขยกกำลังอีก 1 ตัวแปร ก็ทำให้สมการของเรา fit กับข้อมูลมากขึ้น (เราเรียกสมการลักษณะนี้ว่า Quadratic function)
  • ส่วนรูป C เป็นการประมาณการที่เราเพิ่ม features มาก ๆ ซึ่งการใส่ features ลักษณะนี้(high polynomial)จะทำให้ model ของเรานั้น fit กับข้อมูลมาก ๆ แต่ว่ามันไม่สามารถนำไปใช้กับข้อมูลใหม่ๆได้ (low accuracy) ซึ่งอาจจะเกิดมาจากสมการที่ซับซ้อนและตัวสมการนี้จะสร้างเส้นโค้งและมุมที่ไม่สัมพันธ์กับข้อมูล

ซึ่งปัญหานี้ไม่ได้เกิดกับแค่ linear regression แต่ยังเกิดกับ logistic regression ด้วย (อย่าลืมว่า logistic regression ใส้ในของมันก็มาจาก linear regression นั่นเอง)

logistic regression

10. แนวทางการแก้ไขปัญหา

แนวทางการแก้ปัญหา จะแบ่งออกเป็น 2 ทางหลักๆ คือ

  1. การลดตัวแปร (features)
  2. การทำ Regularization

10.1. การลดตัวแปร (features)

เราสามารถลดตัวแปรได้ด้วยตังเอง คือเราตัดสินใจเองเลยว่าตัวแปรไหนสำคัญต้องเก็บไว้ ตัวแปรไหนควรตัดออก หรืออีกวิธีคือการใช้ model selection algorithm คือมันจะมีบาง model มันจะเลือกให้เองอัตโนมัติ ว่าตัวแปรไหนมีความสำคัญ ตัวแปรไหนควรตัดออก

10.2. การทำ Regularization

การทำ regularization มีข้อดีคือ เพื่อนๆสามารถใส่ features ได้มากเหมือนเดิมและยังแก้ปัญหา overfitting ได้ด้วย วิธีการของมันคือการลด magnitude หรือ ค่าของ parameters (θ_j) ลงให้เข้าใกล้ 0 ให้มากที่สุด ซึ่งเราจะลดค่า θ_jโดยการ modify สมการ cost function ใหม่
ซึ่ง concept คร่าวๆของการทำ Regularization ตามภาพด้านล่างเลย

เริ่มจาก

  • สมมติเรามี hypothesis (สมการประมาณการ) ที่มี features อยู่ 4 ตัว ซึ่ง features ทั้ง 4 สำคัญทั้งหมด ตัดออกไม่ได้ แต่พอเราทำการประมาณการแล้ว ได้กราฟตามด้านขวามือ คือมันประมาณการดีมาก ๆ แต่ model นี้ กับเอาไปใช้กับข้อมูลใหม่ไม่ได้ แต่สิ่งที่เราต้องการคือ สมการประมาณการที่ใส่ features ครบและยังได้ model ที่สามารถนำไปใช้กับข้อมูลอื่น ซึ่งเราจะทำได้โดยการ modify สมการ cost function ใหม่
  • ในการ minimize cost function เราได้เพิ่มพจน์ 2000 * θ_3 และ 3000 * θ_4 เข้าไป เนื่องจากเราต้องการใส่ features x_3 และ x_4 อยู่ แต่ไม่ต้องการให้มันมีอิทธิพลกับ hypothesis (hypothesis ของเรายังเหมือนเดิมในขั้นตอนนี้ )
  • แต่ทีนี้เราต้องทำให้ค่า θ_3 และ θ_4 มีค่าใกล้ 0 ที่สุด เพื่อให้ cost function ของเรามีค่าเข้าใกล้ 0 ด้วย 
  • ซึ่งการทำแบบนี้มันจะส่งผลให้ 2000 * θ_3 และ 3000 * θ_4 ใน hypothesis ของเราเปลี่ยนไปเป็น จากสมการที่เป็น polynomial function มีลักษณะสมการคล้าย quadratic function ที่ fit กับข้อมูลของเรามากขึ้น
  • จาก concept ด้านบน สามารถที่จะเขียนสูตรได้ดังข้างล่างนี้
cost function

จากรูปด้านบนเป็นสมการ cost function ที่ผ่านการ modify

  • โดยส่วนแรก คือรูปของสมการ cost function ทั่วไปเป็นรูปสมการที่ต้องการหาค่า parameters ที่ทำให้ cost function มีค่าต่ำที่สุดเพื่อที่เราจะได้ model ที่ดีที่สุดมา
  • ส่วนที่ 2 เพิ่มเข้ามา นี้เป็นส่วนที่ทำให้ค่า θ_j (θ_jจะไม่รวม θ_0) ลดลง เพื่อที่จะทำให้เราได้ model ที่ดี โดยที่เรายังมีการใส่ features มาก ๆได้โดยไม่เกิด overfitting และตัว Lambda คือ regularization parameter เป็นตัว trade off ระหว่าง ส่วนที่ 1 และส่วนที่ 2 คือ ถ้าเราใส่ค่า Lambda มาก ๆ นั่นคือเราให้ความสำคัญกับการเกิด overfitting (คือเราไม่อยากให้มันเกิด overfitting นั่นเอง) แต่นั่นก็จะทำให้เกิดการ underfitting เช่นกัน ซึ่งมันจะส่งผลต่อการทำ gradient descent คือมันจะไม่ convert เข้าสู่จุด optimal minimum ดังนั้นควรเลือก Lambda ที่เหมาะสม ซึ่งในปัจจุบันมี algorithm หลายอันที่มันจะเลือกค่า lambda ที่เหมาะสมให้เรา แต่เราจะยังไม่พูดถึงในบทนี้

Regularization with Logistic regression

Recap :

เรารู้แล้ว่า regularization คือขั้นตอนที่เราเปลี่ยนแปลงสมการ cost function เพื่อที่ลดขนาดของ θ_j เพื่อทำให้สมการประมาณการที่มี features เยอะๆ ยังสามารถ fit กับข้อมูลเราแล้วยังนำไปใช้กับข้อมูลอื่นได้ด้วย ซึ่ง regularization นี้ สามารถใช้ได้ทั้งกับ linear regression และ logistic regression ต่อมา เมื่อเราได้ cost function อันใหม่นี้มาแล้ว เราจะ minimize cost function ด้วย Gradient descent (ในนี้เราจะยกตัวอย่างการทำ gradient descent ของ logistic regression )

 

ซึ่งรูปแบบการทำ gradient descent นั้น form อาจจะคล้ายกับ linear regression แต่เพื่อนๆอย่าลืมว่า ไส้ในของ hypothesis ของเรานั้นมันคือ logistic regression
ซึ่งเราก็จะหาค่า theta_0 สูตรที่ 1 และหาค่า theta_1,2,3…ด้วยสูตรที่ 2 จากนั้นเราก็จะได้ค่า θ_0 และθ_j ที่ทำให้ cost function มีค่าต่ำที่สุด นั้นคือจุด optimal minimum ซึ่ง ณ จุดนี้จะทำให้เราได้สมการประมาณการที่แม่นยำที่สุด

ก็จบไปแล้วสำหรับ 10 หัวข้อที่เกี่ยวกับ Logistic regression ในบทต่อไป เราจะพูดถึงการประมารการด้วย Decision tree ซึ่งเป็น algorithm ที่ง่ายและเป็นที่นิยม