logistic regression

หลังจากที่เราได้รู้กันไปแล้วว่า การแบ่งข้อมูลแบบ classification คือการแบ่งข้อมูลโดยที่ผลลัพธ์(Y) ของเรานั้นจะเป็นในรูปแบบ decrete values หรือ category ต่อมาเราจะมาเจาะลึกลงไปในแต่ละ algorithm เลยว่าแต่ละแบบมีกระบวนการคำนวณยังไง และนำไปใช้ประโยชน์อะไรในชีวิตจริงได้บ้าง โดย algorithm แรกที่เราจะไปดูคือ logistic regression  โดยในบทนี้เราจะดูว่า

  1. Logistic regression คือ อะไร
  2. สมการ logistic regression
  3. การตีความโดยใช้ probability  
  4. Decision boundary 
  5. Cost function 
  6. Gradient descent
  7. multi-class classification
  8. วัดความแม่นยำของ model ด้วย confusion matrix

Logistic regression คืออะไร

logistic regression คือ การประมาณการข้อมูลโดยผลลัพธ์(Y) จะออกมาในรูปแบบของ “โอกาสที่จะเกิดเหตุการณ์ที่เราสนใจ” เช่น เราต้องการตรวจเนื้องอกของผู้ป่วยเราก็จะสนใจว่าเนื้องอกนี้มี “โอกาสที่จะเป็นมะเร็ง” เท่าไร เป็นต้น 

โดยหลักการคล้ายๆการวิเคราะห์แบบ linear regression คือนำข้อมูล x มาทำการประมาณการแล้วมันก็จะประมาณค่า Y ออกมา แต่ว่าค่า Y ของเราจะเป็นกลุ่ม (category) เหมาะกับการประมาณการข้อมูลที่เป็นเชิงคุณภาพ(Quality) การแบ่งผลลัพธ์แบบ logistic regression เราแบ่งออกเป็น 2 แบบ คือ 

  1. ผลลัพธ์แบ่งออกเป็น 2 กลุ่ม yes,no หรือ ดี,แย่ เราเรียกการแบ่งผลลัพธ์แบบนี้ว่า  binary logistic regression analysis 
  2. แบ่งผลลัพธ์ออกเป็น 3 กลุ่มขึ้นไป เราเรียกว่า multinomial logistic regression analysis 

เพื่อความง่ายเราจะเริ่มจากแบบ  binary logistic regression analysis ก่อนนะคะ

สมการ logistic regression

logistic regression

ต่อมาเราจะมาอธิบายที่มาของสมการ logistic regression function โดยเริ่มจาก

  1. ผลลัพธ์(Y) ที่เราต้องการนั้น แบ่งออกเป็น 2 กลุ่ม ดังนั้น y จึงเป็น subset 0และ1 เขียนแทนด้วย y = {0,1} นั้นหมายถึงว่า hypothesis ()หรือ สมการประมาณการของเราต้องมีค่าอยู่ระหว่าง 0 และ 1 
  2. จากสมการ linear regression 
  3. ต่อมาเราจะมา แปลงสมการ linear regression function ของเราให้เป็น logistic regression เพื่อให้ค่า y ออกมาเป็น 2 ค่า โดยใช้ link functionเขียนแทนด้วย g(z) (อธิบายเพิ่มเติม link function เป็นสมการแบบหนึ่งที่มันจะแปลงค่าที่ได้จากสมการ linear regression ให้อยู่ในรูปของ probability ซึ่งค่า probability จะมีค่าอยู่ระหว่าง 0-1 และ logit เป็น 1 ใน link function เลือกใช้เพราะ y ที่เราต้องการแบ่งออกเป็น 2 กลุ่มคือ 0,1 : สามารถอ่านเพิ่มเติมได้ที่นี่)  ขั้นตอนการแปลงสมการเป็นดังนี้
    1. กำหนดให้ multiple linear regression = g() และ Z =  เมื่อ Z คือ จำนวนจริง(real number)
    2. ต่อมาสมการ logistic regression function คือ g(z) = 1/1+e^(-z) จากนั้นนำสมการ logistic function นี้ ครอบลงไปบนสมการ linear regression ตามข้อกำหนดในข้อที่ 1 สุดท้ายเราก็จะได้สมการ logistic regression function หรืออีกชื่อคือ sigmoid function ดังสมการข้างล่างสุด ส่วนรูปทางด้านขวาเป็นการ plot กราฟระหว่าง g(z) function กับค่า z ซึ่ง logistic function นี้ จะให้ค่าอยู่ระหว่าง 0 และ 1 ซึ่งมันก็คือค่า probability นั่นเอง และไม่ว่าค่า x จะมากหรือน้อยมากแค่ไหนค่าค่า probability จะอยู่ในขอบเขต 0-1 เสมอ 

เพิ่มเติม 

จากรูปจะเห็นได้ว่า ไม่ว่าค่า x จะมีค่าเท่าไรเมื่อนำไปคำนวณในสมการค่า multiple linear regression ที่ออกมายังไงก็ไม่เกินขอบเขต 0 และ 1 

การตีความโดยใช้ probability

เนื่องจากค่าที่ได้จากสมการ logistic regression เป็นค่า probability ดังนั้นเราจะมาดูว่าเราจะนำค่า probability มาอธิบาย y = 0 และ y = 1 ได้อย่างไร โดยเริ่มจาก

  1. กำหนดผลลัพธ์ของ Yp หรือ y ก่อน 

ส่วนใหญ่แล้วเราจะกำหนดให้ y = 0 คือ negative class หรือก็คือ กลุ่มที่เราไม่ได้สนใจ และกำหนดให้ y = 1 คือ positive class คือ กลุ่มที่เราสนสนใจ ยกตัวอย่างเช่น Y= 1 คือ โอกาสที่จะเป็นมะเร็ง และ y = 0 คือ โอกาสที่จะไม่เป็นมะเร็ง เมื่อเราใส่ตัวแปร x ลงไป สมมติตัวแปร x คือ ขนาดของเนื้องอก 

   2. นำข้อมูลใน training set ไปคำนวณผ่านสมการ logistic function จะได้ค่าmultiple linear regressionความหมายของ hypothesis (multiple linear regression) คือ

 หรือพูดเป็นภาษาบ้านๆคือ โอกาสที่จะเป็นมะเร็งเมื่อขนาดของเนื้องอกมีขนาด X(i) นั่งเอง ต่อไปเป็นตัวอย่างเพื่อให้เห็นภาพมากขึ้นลองดูตัวอย่างด้านล่าง 
logistic regression

ความน่าจะเป็นที่จะเกิดเหตุณการนั้นอยู่ระหว่าง 0 และ 1 ถ้า ดังนั้นโอกาสที่เนื้องอกจะเป็นเนื้องอกดีและเนื้องอกที่เป็นมะเร็ง โอกาสที่จะเกิดรวมกันต้องไม่เกิน 1 จากตัวอย่าง มีโอกาส 70% ที่เนื้องอกจะเป็นมะเร็ง นั่นหมายความว่า มีโอกาส 30% ที่เนื้องอกนั้นจะไม่เป็นมะเร็ง

แต่หากเราต้องการที่จะแบ่งกลุ่มผลลัพธ์ คือ Y = 0 หรือ y = 1  อย่างชัดเจน เช่นบอกว่า ผ่านหรือไม่ผ่าน เราสามารถแบ่งได้ตามสมการข้างล่างเลย 

logistic regression

Decision boundary

แปลแบบบ้านๆก็คือ เส้นที่ใช้แบ่งกลุ่มของข้อมูล ว่าตรงไหนเป็ร y=1 และตรงไหนเป็น y=0 ซึ่งจะเป็นเส้นตรงหรือไม่ก็ได้ ทั้งนี้ขึ้นอยู่กับสมการของเรา เดี๋ยวเราจะยกตัวอย่างการหา decision boundary โดยเริ่มจาก 

logistic regression

1. สมมติเรามีข้อมูล training set ที่ข้างในมี features 2 ตัว คือ X(1) และ X(2) 

2. กำหนดค่า  ตามภาพ (ตอนนี้เราจะกำหนดขึ้นมาก่อน เดี๋ยวหลังจากนี้เราจะใช้ gradient descent หาค่า ที่ดีที่สุดอีกที

3. hypothesis ของเรารอบนี้คือ สมการที่เป็น logistic function (g(z)) ได้สมการดังรูป

  • จากความหมายของ hypothesis ที่เราได้อธิบายไปก่อนหน้านั้น ถ้า มากกว่าหรือเท่ากับ 0 >>> y = 1 
  • ดังนั้น เราจะสามารถหา decision  boundary ได้โดยการแก้สมการเพื่อหาจุดตัดแกนทั้งสอง features สุดท้ายเราก็จะได้เส้น decision  boundary 

ต่อมาเราจะมาลองยกตัวอย่าง โดยลองแทนค่า X(1),X(2) แล้วดูว่ามันจะ predict y=0 หรือ y=1 และจากนั้นก็จะดูว่ามันให้ค่า probability เท่าไร 

logistic regression

และในความเป็นจริง เส้น decision boundary ไม่ได้เป็นแค่เส้นตรง อาจจะเป็นเส้นโค้ง พาราโบลาก็ได้ ทั้งนี้ขึ้นอยู่กับ features ของเรา ยิ่งเรามี features ที่เป็น polynomial มาก เส้น decision boundary ก็จะยิ่งโค้งมาก ลองดูตัวอย่างด้านล่าง

logistic regression

จะเห็นได้ว่า เส้น decision boundary ขึ้นอยู่กับ 2 ตัวแปร คือ features และ  ซึ่ง features เราไม่สามารถกำหนดได้ ขึ้นอยู้กับกับข้อมูลของเรา แต่ คือตัวที่กำหนดว่า slope และ จุด intercept ของเส้น decision boundary ดังนั้นการที่เราจะแบ่งข้อมูลออกมาได้แม่นยำที่สุดก็ขึ้นอยู่กับค่า  ต่อไปเราจะไปดูกันว่าเราจะหาค่า  ที่ดีที่สุดได้อย่างไร

Cost function

logistic regression

ก่อนที่เราจะไปดูวิธีการหาค่า  เราจะมาดูสมการ cost function โดยสมการ cost function คือ ผลรวมค่า error (error = ค่า Yจริง – Yp)^2 สามารถอ่านนิยามเพิ่ม เติมได้ที่นี่ 

หากค่า cost function มีค่า = 0 (error = 0) นั่นหมายความว่า ค่า Y ที่ได้จากการประมาณการ = ค่า Yจริง แสดงว่าการประมาณการของเราแม่นยำ 100% แต่ในความเป็นจริงนั้นอาจจะเป็นไปได้ยาก ดังนั้นยิ่งค่า cost function มีค่าต่ำมากๆ แสดงว่า model ที่เราเลือกใช้ก็มีวามแม่นยำกับข้อมูลมาก เราเรียกจุดที่มีค่า cost function มีค่าต่ำที่สุดนี้ว่าจุด optimal minimum นี่เป็น concept cost function ของ linear regression 

logistic regression

จากรูป สมการ linear cost function เมื่อแทนสมการ logistic function ลงไปในสมการ และคำนวณค่า cost function ออกมา เมื่อนำมาพล็อตกราฟจะทำให้กราฟที่ได้เป็น non convex ซึ่งกราฟลักษณะนี้ไม่เหมาะกับการหาจุด optimal minimum เนื่องจากว่า เราไม่รู้ว่าจุดที่เป็นแอ่งกระทะนั้นเป็นจุดที่ optimal ที่สุดหรือไม่  

ดังนั้นเราต้องหาสมการ cost function ที่เป็น convex ซึ่งมันจะเป็นกราฟเราสามารถหาจุด optimal minimum 

logistic regression

ดังนั้น cost function ที่เราได้ก็จะเป็นดังสมการด้านบน 

logistic regression

จากรูปด้านบนเป็นสมการ logistic cost function ที่คำนวณออกมาจามสูตรแล้ว เมื่อคำค่า cost function ไปพล็อตกราฟจะได้เส้นที่เป็น convex ซึ่งเราสามารถหาจุด optimal minimum จากสมการนี้ได้ (เราจะไม่กล่าวถึงที่มาของสมการในบทนี้เนื่องจากมันลึกและซับซ้อน ต้องใช้เวลามาก)

ซึ่งสมการที่ได้มานั้น เราจะลองยกตัวอย่าง สมมติคำนวณ logistic regression ออกมาแล้วได้ว่า Y=1 สมการ cost function ที่ใช้ก็คือ -log(multiple linear regression) เมื่อพล็อตกราฟก็จะได้รูปเหมือนด้านบนขวามือ ซึ่งจากกราฟจะเห็นได้ว่า 

  • ถ้า multiple linear regression= 1 >>> cost function = 0
  • ถ้าmultiple linear regressionมีค่าเข้าใกล้ 0 >>> cost function มีค่าเข้าใกล้ infinity

เมื่อเราเข้าใจ concept และ ความหมายของตัวสมการ cost function แล้ว ต่อไปก็จะถึงขั้นตอนสุดท้ายแล้วนั่นก็คือการหาค่า  ด้วย Gradient descent 

Gradient descent

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

logistic regression

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

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

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

การหาค่า  อีกวิธีที่เป็นที่นิยมคือ maximum lilelihood estimation สามารถเข้าไปดูวิธีการคำนวณได้ที่นี่ 

Multi-class classification

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

logistic regression

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

logistic regression

อธิบาย one vs all classification

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

Confusion matrix

ต่อมา เมื่อเราทำการประมาณการข้อมูลออกมาแล้ว เราจะมาตรวจสอบกันว่า model ที่เราใช้นั้นทำนายผลได้แม่นยำหรือไม่ โดยเราจะใช้ข้อมูลที่อยู่ในตาราง confusion matrix มาคำนวณอีกที

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

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

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

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

ในการจะวัดความแม่นยำของ 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