วันอาทิตย์ที่ 22 กันยายน พ.ศ. 2562

Simple Linear Regression


สวัสดีครับวันนี้จะมาแชร์เรื่อง Simple Linear Regression โดยการนำ Machine learning มาคำนวณเพื่อให้เห็นภาพและเข้าใจได้ง่ายถึงหลักการทำงานของ ML ที่เป็นรูปแบบของ Supervised Learning ครับ (Supervised Leaning คือการให้โปรแกรมเรียนรู้จากข้อมูลที่รู้ผลแน่ชัดอยู่แล้ว ถ้าให้เปรียบเทียบกับคนก็เหมือนกับให้โปรแกรมอ่านหนังสือก่อนที่จะนำเอาความรู้จากหนังสือที่ได้ไปประยุกต์ใช้งานนั้นเองครับ หรือหากอยากศึกษาเพิ่มเติมสามารถศึกษาได้ที่ นี่ ครับ)

แล้ว Simple Linear Regression คืออะไร

Linear Regression คือ การหาสมการเชิงเส้นเพื่ออธิบายข้อมูล ยกตัวอย่างเช่น เรามีข้อมูลราคาการเช่าหอแต่ละเดือนในกรุงเทพเมื่อเทียบกับพื้นที่ห้องดังนี้


พื้นที่ (m2)
ค่าเช่าหอต่อเดือน (บาท)
22.5
2100
24
2800
26
3250
26.5
3600
30
3800
32
4300
34.5
4600
36.5
5000
38
5800
42
7000



หากเรานำข้อมูลมาวาดเป็นกราฟจะได้ข้อมูลดังนี้ครับ



แล้วถ้าเราอยากจะรู้ว่าถ้าหอในกรุงเทพที่มีขนาดห้อง 40 ตารางเมตรจะมีราคาประมาณเท่าไร เราสามารถคาดคะเนได้โดยการเอาเส้นแนวโน้มมาวาดบนกราฟดังนี้ครับ

หลังจากเราวาดเส้นลงเราก็สามารถคาดคะเนได้ว่าถ้ามีขนาดห้อง 40 ตารางเมตร จะมีราคาประมาณ 6000 กว่าบาท


จะเห็นว่าที่เราวาดเส้นแนวโน้มของข้อมูลนั้นเราจะเรียกว่าเป็น Simple Linear Regression 



แล้วเราจะนำ Machine learning มาใช้งานร่วมกับ Simple Linear Regression อย่างไร

เราจะเอา Machine learning มาใช้ร่วมกับ Simple Linear Regression โดยให้ Machine learning มาทำการหาเส้นแนวโน้มในกราฟดังกล่าว แล้วนำไปใช้งานดังนี้


จากรูปด้านบนจะมีลำดับการนำไปใช้งานคือ
นำข้อมูลที่ต้องการประมวลผล (feature) มาเข้า Model แล้วทำนายออกมาว่าผล (Label) ที่ได้เป็นอย่างไร
ถ้าให้เปรียบเทียบการนำ ML ไปใช้ กับการคาดคะเนราคาห้องเช่าจะเป็นดังนี้
  • Feature คือข้อมูลที่ต้องการไปประมวลผล ในที่นี้จะหมายถึง ขนาดห้อง
  • Model คือสมการหนึ่งที่สามารถใช้ในการคาดคะเนว่าผลที่ได้จะเป็นอย่างไร ในที่นี้จะหมายถึง เส้นแนวโน้ม หรือสมการเส้นตรงของเส้นแนวโน้มนั่นเอง
  • Label คือผลที่ต้องการทำนาย ในที่นี้จะหมายถึงราคาห้อง

ซึ่งในการหา Model นั้นเราจะใช้ Machine Learning มาหาครับโดยมีหลักการทำงานที่จะได้ Model มาเป็นดังนี้


  • จากรูปหลักการทำงานด้านบนเราจะนำข้อมูลที่เรามีอยู่แล้ว(Feature)และรู้ผลัพธ์อยู่แล้ว(Label)ให้ Machine learning ทำการเรียนรู้
  • โดยในการเรียนรู้นั้นตอนแรก ML จะสร้าง Model ขึ้นมาก่อนซึ่ง Model ดังกล่าวยังไม่สามารถทำนายข้อมูลได้ถูกต้อง
  • จึงต้องเข้าสู่กระบวนการ Train ข้อมูลเพื่อทำการปรับ Model ให้ถูกต้องมากที่สุดโดยกระบวนการ Train จะทำงานโดยการนำ Model มาทำนายผลจากข้อมูล(Feature)
  • ซึ่งก็จะมีทั้งการทำนายที่คลาดเคลื่อนกับความเป็นจริงไปมาก หรือใกล้ความเป็นจริง (ในการดูข้อมูลว่าผลทำนายที่ได้คลาดเคลื่อนไปมากหรือใกล้ความเป็นจริงเราใช้ Cost Function ในการดู)
  • ก็นำเอาค่าความเคลื่อนที่ได้ ไปปรับ Model เข้าหาผลลัพธ์ที่ถูกต้อง
  • หลังจากนั้นจะทำการ Train ไปเรื่อยๆและปรับค่า Model ไปเรื่อยๆ
  • จนใกล้เคียงข้อมูลจริงมากที่สุด


เพื่อให้เข้าใจได้มากขึ้นหากลองการทำงานของ ML มาใช้ในการหากราฟแนวโน้มเชิงเส้นสำหรับเปรียบเทียบข้อมูลราคาเช่าห้องกับขนาดห้องสามารถทำได้ดังนี้ครับ


  • นำข้อมูลที่เรามีอยู่แล้ว(Feature ในที่นี้ของเราคือขนาดห้อง)และรู้ผลัพธ์อยู่แล้ว(Label ในที่นี้ของเราคือ ราคาห้อง)ให้ Machine learning ทำการเรียนรู้ ซึ่งจะได้เป็นกราฟด้านล่าง

  • โดยในการเรียนรู้นั้นตอนแรก ML จะสร้าง Model(ในที่นี้คือเส้นแนวโน้ม) ขึ้นมาก่อนซึ่ง Model ดังกล่าวยังไม่สามารถทำนายข้อมูลได้ถูกต้อง (ในที่นี้คือเส้นแนวโน้มที่ได้ไม่สอกคล้องกับข้อมูล) ซึ่งอาจจะได้เป็นกราฟด้านล่าง

  • จึงต้องเข้าสู่กระบวนการ Train ข้อมูลเพื่อทำการปรับ Model (ในที่นี้คือเส้นแนวโน้ม) ให้ถูกต้องมากที่สุดโดยกระบวนการ Train จะทำงานโดยการนำ Model มาทำนายผลจากข้อมูล(Feature)(จากรูปด้านล่างจะเห็นว่าเราต้องการทำนายราคาห้องที่มีพื้นที่ขนาด 43 ตารางเมตร ผลที่ได้ปรากฎว่า Model ทำนายราคาได้ประมาณเกือบ 3000 บาท)

  • ซึ่งก็จะมีทั้งการทำนายที่คลาดเคลื่อนกับความเป็นจริงไปมาก หรือใกล้ความเป็นจริง (ในการดูข้อมูลว่าผลทำนายที่ได้คลาดเคลื่อนไปมากหรือใกล้ความเป็นจริงเราใช้ Cost Function ในการดู)(จากรูปด้านล่างจะเห็นว่าเราต้องการทำนายราคาห้องที่มีพื้นที่ขนาด 43 ตารางเมตร ผลที่ได้ปรากฎว่า Model ทำนายราคาได้ประมาณเกือบ 3000 บาทแต่ราคาจริงอยู่ที่ 7000 บาทซึ่งมีความคลาดเคลื่อนกับความเป็นจริงมาก)

  • ก็นำเอาค่าความเคลื่อนที่ได้ ไปปรับ Model เข้าหาผลลัพธ์ที่ถูกต้อง

  • หลังจากนั้นจะทำการ Train ไปเรื่อยๆและปรับค่า Model ไปเรื่อยๆ

  • จนใกล้เคียงข้อมูลจริงมากที่สุด


สุดท้ายนี้หวังว่าโพสน์นี้จะมีประโยชน์สำหรับแนวทางในการเริ่มต้นศึกษา Machine learning ครับ






References






วันเสาร์ที่ 14 กันยายน พ.ศ. 2562

ระบบแนะนำ (Recommender Systems) โดยใช้ Cosine similarity


" ระบบแนะนำ(Recommender Systems) คืออะไร ? " 
ระบบแนะนำ (Recommender Systems) คือระบบที่ใช้แนะนำ บริการสินค้า 
ยกตัวอย่างเช่น เราดูหนังใน Netflix เดือนนึงหลายเรื่อง ซึ่งหนังที่เราดูส่วนมากคือหนัง Action และทุกครั้งที่เข้าไปในเว็บ Netflix สิ่งที่ทางเว็บแนะนำหนังกับเรา ส่วนมากก็เป็นแนว Action สะด้วย ซึ่งเว็บไซต์จะรู้เองว่าเราชอบหนังแนว Action แล้วแนะนำหนังมาให้เรา 
จากตัวอย่างแสดงว่าเว็บไซต์ Netflix มีระบบแนะนำ(Recommender System)
 " แล้วระบบรู้ได้ไงว่าต้องแนะนำอะไร ? "  
ระบบแนะนำส่วนมากจะแบ่งเป็น 2 แบบคือ “Content-Base” และ “Collaborative Filtering (CF)”
    • Collaborative Filtering (CF) คือ การหาความเหมือนกันของกลุ่มคนที มีความชอบหรือไม่ชอบหนังชนิดเดียวกัน ยกตัวอย่างเช่น
      นาย ก ชอบ Spider man, Superman ,Iron man
      นาย ข ชอบ Spider man, Superman
      จะเห็นว่า นาย ก กับนาย ข ชอบดูหนังคล้ายๆกัน เราจึงขอสรุปว่า หาก นาย ก ชอบดู Iron man นาย ข อาจจะชอบด้วยเช่นกันเราจึงแนะนำหนัง Iron man ให้นาย ข
    • Content-Base คือ การหาความเหมือนของสินค้า ยกตัวอย่างเช่น
      นาย ก ชอบ Spider man, Superman , Iron man
      จะเห็นว่า นาย ก ชอบหนังที่มีเนื้อหาเป็น แนวฮีโร่ แสดงว่า นาย ก อาจจะชอบดูหนังเรื่อง Ant man ด้วยเช่นกันเนื่องจาก Ant man เป็นหนังแนวฮีโร่เหมือนกัน

Collaborative Filtering (CF) ในโพสน์นี้เราจะพูดถึงระบบ Recommender System ในแบบ Collaborative Filtering (CF) กันเนื่องจากง่ายต่อการเข้าใจและใช้กันอย่างหลากหลาย โดยโพสน์นี้เราจะใช้สมการที่ชื่อว่า cosine similarity ในการคำนวณความเหมือนกัน

การคำนวณ Cosine similarity Cosine similarity คือการหาความเหมือนกันของข้อมูลซึ่งสูตรจะเป็นดังนี้

จากสมการดังรูปค่า cosine ที่ได้จะมีค่าอยู่ระหว่าง 0 ถึง 1 โดยค่า
1 จะหมายถึงข้อมูล A และข้อมูล B มีความเหมือนกัน
ส่วนค่า 0 จะหมายถึงข้อมูล A และข้อมูล B ไม่มีความเหมือนกันเลย
(สามารถทำความเข้าใจเพิ่มเติมได้ที่ http://9golfy.com/2016/12/12/คำนวณลักษณะนิสัยใจตรงก-2/)

หลักการทำงานของ ระบบแนะนำ (Recommender System) เพื่อให้เห็นภาพมากขึ้นจึงได้ยกตัวอย่างการทำงานของ ระบบแนะนำหนัง โดยสมมุติเก็บข้อมูลดังนี้

จากตารางจะมีการเก็บการให้คะแนนความชอบของหนังแต่ละคน ซึ่งค่าของคะแนนนั้นมีตั้งแต่ 1 – 5 (ค่า 0 หมายถึงคนนั้นยังไม่เคยดูหนังเรื่องนี้มาก่อน) ทำการปรับโครงสร้างตารางเป็นดังนี้
หลังจากปรับโครงสร้างตารางแล้วต่อไปเราจะหาความเหมือนกัน โดยการคำนวณ Cosine ของแต่ละคนเช่น ถ้าเราอยากหาความเหมือนกันของ นาย ก กับ นาย ข เราสามารถทำได้โดยใช้สูตร Cosine ดังนี้
สมมุติให้ นาย ก คือ A
สมมุติให้ นาย ข คือ B
จากการคำนวณค่า Cosine Similarity ระหว่าง นาย ก และ นาย ข แสดงให้เห็นว่ามีความเหมือนกันอยู่ 0.682793 หรือ 68.2793 เปอร์เซ็นต์
หลังจากนั้นก็วนหา Cosine ระหว่าง นาย ก กับ นาย ค , นาย ก กับ นาย ง, นาย ข กับ นาย ค, นาย ข กับ นาย ง, นาย ค กับ นาย ง จนครบทุกคนก็จะได้ข้อมูลมาเป็นตารางดังนี้
จากตารางแสดงให้เห็นว่า
นาย ก เหมือนกับ นาย ก เปะ เพราะค่าเป็น 1 หรือเหมือน 100 เปอร์เซ็นต์
นาย ก เหมือนกับ นาย ข ประมาณ 68.2793 เปอร์เซ็นต์
นาย ก เหมือนกับ นาย ค ประมาณ 42.4264 เปอร์เซ็นต์
นาย ก เหมือนกับ นาย ง ประมาณ 82.2192 เปอร์เซ็นต์
แสดงให้เห็นว่ารสนิยมในการดูหนังของ นาย ก คล้ายกับ นาย ง มากที่สุด ดังนั้นหาก นาย ง ชอบดูหนังเรื่องใหนก็เป็นไปได้ว่า นาย ก ชอบดูหนังเรื่องนั้นด้วยเช่นกัน

วันเสาร์ที่ 7 กันยายน พ.ศ. 2562

Mail Spam Detection


      สวัสดีครับหลังจากบทความที่ผ่านมาได้อธิบายเรื่องของหลักการทำงาน Naive Bayes Classification (http://cakeknowledgeblogs.blogspot.com/2019/08/naive-bayes-classification-1.html) วันนี้จะนำความรู้ที่ได้ศึกษามาลองสร้างโปรแกรมสำหรับทำการตรวจสอบเมลล์ที่เป็น Spam กันครับ

"แล้วเมลล์ที่เป็น Spam คืออะไร"
เมลล์ที่เป็น spam (Spam mail) คือ เมลล์ที่ไม่พึงประสงค์อย่างหนึ่ง ซึ่งวัตถุประสงค์ที่ส่งอีเมลล์ลักษณะนี้เพื่อเป็น  การก่อกวน, หรือแม่กระทั้งเป็นการโจมตี โดยการแนบไวรัสมาจากเมลล์ ซึ่งอาจทำให้เกิดความเสียหายแก้ข้อมูลต่อคนที่ไปเปิดอีเมลล์

"แล้วเราจะรู้ได้ไงว่า mail นั้นเป็น spam"
ในการหา mail ใหนว่าเป็น Spam เราสามารถหาได้โดยการนำเอาข้อความทั้งหมดในเมลล์ มาทำการตรวจสอบว่าเป็น spam หรือไม่โดยวิธีในการตรวจสอบนั้นเราจะใช้ Naive Bayes Classification มาช่วยนั่นเอง

โดยสมการ Naive Bayes นั้นจะเป็นดังนี้ครับ


สามารถแปลงเป็นสมการสำหรับตรวจสอบ เมลล์ spam ได้ดังนี้


จากสมการจะเห็นว่าจะเป็นการคูณกันระหว่างความน่าจะเป็นซึ่งหากความน่าจะเป็นมีหลายค่าจะทำให้ผลคูณมีค่าใกล้ศูนย์ จนอาจทำให้คอมพิวเตอร์ปัดเศษกลายเป็น 0 ดังนั้นในการป้องกันเหตุการณ์ดังกล่าวเราจึงใส่ Log ไปในสมการ


 จากคุณสมบัติของผลคูณ Log เท่ากับ ผลรวมของ Log คือ LogMN = LogM + LogN เราจึงสามารถแปลงสมการได้ดังนี้

โดยเราจะเอาข้อมูล email จริงๆมาจากบริษัท Enron Corporation มา Train กัน ตามลิงค์นี้ http://www2.aueb.gr/users/ion/data/enron-spam/  ซึ่งเราจะโหลดไฟล์ Enron1,Enron2,...,Enron6 แล้วแตกไฟล์ออกมาเก็บไว้ใน Folder ที่ชื่อว่า Enron ดังนี้ครับ

- ทำการ Download Enron File




 - นำไฟล์ที่โหลดได้มาแตกไฟล์และเก็บลงใน Folder ที่ชื่อว่า Enron



"มาเริ่มเขียนโคดกัน"
เราจะมาเขียนโคดกันด้วยภาษา C# โดยใช้ Naive Bayes Classification มาแยกว่า ข้อความในเมล์ใหนน่าจะเป็น Spam หรือ ไม่เป็น Spam กันครับ ซึ่งสามารถศึกษาและโหลดโคดเต็มได้ที่ https://github.com/CakeNuthep/EmailSpamDetectionWithNaiveBayes

reference

วันอาทิตย์ที่ 18 สิงหาคม พ.ศ. 2562

Naive Bayes classification #2


   สวัสดีครับหลังจากบทความที่แล้ว(https://cakeknowledgeblogs.blogspot.com/2019/08/naive-bayes-classification-1.html) ได้แชร์ พื้นฐานความน่าจะเป็นและทฤษฎี Bayes กันไปแล้ววันนี้จะมาเข้าหัวข้อเรื่อง Naive Bayes classification กัน

" Naive Bayes Classification ทำงานยังไง? "
Naive Bayes Classsification นั้นจะใช้ทฤษฎีของ Bayes มาคำนวณโดยมีเงื่อนไขว่าข้อมูลที่ใช้ในการคำนวณนั้นต้องเป็นแบบ Independence จึงได้รูปแบบสมการใหม่ด้านล่างดังนี้

สม Bayes' theorem

เนืองจาก Naive Bayes Classsification มีเงื่อนไขว่าข้อมูลที่มาคำนวณต้องเป็น Independence ต่อกัน
จากสมการ Independence

p(A and B) = p(A,B) = p(A)p(B)

เราจึงแปลงสมการ Bayes ได้ดังนี้ครับ


ในการหาค่า y ที่ต่างกันใช้ค่า p(x1,x2,x3,...,xn) เหมือนกันเราจึงสามารถตัดออกไปได้เนื่องจากเป็นค่าที่ไม่เปลี่ยนแปลงอะไร


จัดรูปแบบสมการ

จากสมการด้านบนเราสามารถหาความน่าจะเป็นของสิ่งที่เราสนใจได้
ยกตัวอย่างเช่น
หาความน่าจะเป็นว่าคนไข้นั้นเป็นโรคภูมิแพ้ หรือไม่เป็นโรคภูมิแพ้(หากเปรียบเทียบในสมการคือตัวแปร y) จากข้อมูลอาการที่รับเข้ามา(หากเปรียบเทียบในสมการคือตัวแปร x) สมมุติหลังจากคำนวณแล้วได้ความน่าจะเป็นว่าจะเป็นภูมิแพ้อยู่ 70% ไม่เป็นภูมิแพ้อยู่ 30%
จะเห็นว่าความน่าจะเป็นว่าเป็นภูมิแพ้มีค่าสูงกว่าความน่าจะเป็นว่าไม่เป็นภูมิแพ้ เราจึงตอบไปว่าคนไข้ดังกล่าวเป็นภูมิแพ้
สามารถอธิบายเป็นสมการคณิตศาสตร์ได้เป็น

เพื่อความเข้าใจมากขึ้นเราจะลองมาคำนวณจริงกันครับ
โดยเราจะมีข้อมูลดังนี้ครับ

ข้อมูลดังตารางด้านบนเป็นการบอกว่าสภาพแวดล้อมข้างนอกนั้นเหมาะแก่การเล่นกอร์ฟหรือไม่โดยสภาพแวดล้อมนั้นเราจะดูจาก สภาพอากาศ(Outlook), อุณหภูมิ(Temperature), ลมแรง(Windy)

ทำการจัดรูปแบบตารางให้เป็นบอกความถี่ของข้อมูลแล้วคำนวณหาความน่าจะเป็นได้ดังนี้

จากตารางด้านบนเราได้คำนวณหา p(xi|yi) สำหรับแต่ละ xi ในเงื่อนไข yi ดังตารางที่ 1-4
ยกตัวอย่างเช่น หาความน่าจะเป็นที่เหมาะแก่การเล่นกอร์ฟ (y = yes )แล้วอุณหภูมิข้างนอกหนาว(x = Cool) เราสามารถหาความน่าจะเป็นได้เป็น P(x = cool|y=yes) = 3/9

เราต้องหาค่าความน่าจะเป็น p(y) ซึ่งถูกคำนวณในตารางที่ 5 ยกตัวอย่างเช่น p(y=yes) = 9/14

ตอนนี้เราได้เตรียมตารางสำหรับในการคำนวณ Naiv ฺBayes เรียบร้อบแล้วครับงั้นเรามาลองทดสอบกันครับ

สมมุติให้สภาพอากาศปัจจุบัน แดดจ้า(Outlook = Sunny) อุณหภูมิร้อน(Temperature = Hot) ความชื้นปกติ (Huminity = Normal) และไม่มีลม (Windy = False)
today = (Sunny, Hot, Normal, False)

ดังนั้นในการหาว่าปัจจุบันเหมาะแก่การเล่นกอร์ฟหรือไม่เราจะคำนวณดังนี้ครับ
 หาค่าความน่าจะเป็นที่เหมาะแก่การเล่นกอร์ฟของวันนี้

 หาค่าความน่าจะเป็นที่ไม่เหมาะแก่การเล่นกอร์ฟ

p(today) ทั้งสองสมการเป็นค่าที่เหมือนกัน ดังนั้นเราสามารถไม่สนใจ p(today) จึงได้เป็นสมการดังนี้
และ

ดังนั้นเราสามารถคำนวณค่าความน่าจะเป็นที่เหมาะแก่การเล่นกอร์ฟของวันนี้ได้เป็น

เราสามารถคำนวณค่าความน่าจะเป็นที่ไม่เหมาะแก่การเล่นกอร์ฟของวันนี้ได้เป็น


จะเห็นว่าความน่าจะเป็นที่วันนี้เหมาะแก่การเล่นกอร์ฟมากกว่าไม่เหมาะแก่การเล่นกอร์ฟ



ดังนั้นเราจึงสรุปได้ว่าวันนี้เหมาะแก่การเล่นกอร์ฟ
สุดท้ายนี้ผมหวังว่าผู้อ่านจะได้ประโยชน์จากบทความนี้ครับ

reference
http://dataminingtrend.com/2014/naive-bayes/
https://www.geeksforgeeks.org/naive-bayes-classifiers/
https://www.analyticsvidhya.com/blog/2017/09/naive-bayes-explained/

วันเสาร์ที่ 17 สิงหาคม พ.ศ. 2562

Naive Bayes classification #1

สวัสดีครับวันนี้จะมาแชร์เรื่อง Naive Bayes classification


"แล้ว Naive Bayes classification คืออะไร"


Naive Bayes classification เป็น Model หนึ่งในการแบ่งกลุ่มที่เราต้องการโดยใช้ความน่าจะเป็นที่ชื่อว่า Naive bayes ยกตัวอย่างเช่น เราต้องการแบ่งกลุ่มว่าคนไข้ที่เข้ามานั้นเป็นไข้หวัดใหญ่หรือไม่ ซึ่งเราจะต้องถามอาการคนไข้มาให้ได้มากที่สุดว่าอาการเป็นอย่างไร แล้วเราถึงจะคาดคะเนจากข้อมูลอาการที่ได้ว่ามีความน่าจะเป็น ไข้หวัดใหญ่เท่าไหร่ เช่นความน่าจะเป็น 95% เป็นต้น ซึ่งความน่าจะเป็นดังกล่าว เราจะใช้ Naive Bayes ในการหาค่าความน่าจะเป็นนั่นเอง



"พื้นฐานความน่าจะเป็น"

ก่อนที่จะคำนวณโดยใช้ Naive Bayes ขออธิบายพื้นฐานความน่าจะเป็น(Probability) ซะหน่อยครับ

สมมุติโจทย์เราคือ ต้องการหาความน่าจะเป็นของการโยนเหรีญหนึ่งครั้งแล้วโอกาสที่จะเป็นหัวมีความน่าจะเป็นเท่าไหร่ เราสามารถรู้ได้ว่ามีโอกาสเกิดได้ 50 เปอร์เซ็นดังนี้ครับ

P(coin land on H) = p(H) = P(H) = Prob(H) = 1/2 = 0.5

แล้วถ้าสมมุติโจทย์เราคือต้องการหาความน่าจะเป็นของการทอยลูกเต๋าหนึ่งลูกแล้วโอกาสที่จะได้เลขจำนวนคู่มีความน่าจะเป็นเท่าไหร่ เราสามารถรู้ได้ว่ามีโอกาสเกิดได้ 50 เปอร์เซ็นดังนี้ครับ

P(dice lands on an even number) = 3/6 = 1/2 = 0.5

จากสมการข้างบนเรารู้อยู่แล้วว่าลูกเต๋า 1 ลูกมีค่าทั้งหมด 6 ค่าคือ 1,2,3,4,5,6 ซึ่งเป็นเลขคู่คือเลข 2,4,6 ซึ่งมีทั้งหมด 3 ค่า ดังนั้นความน่าจะเป็นที่ออกได้เลขคู่จึงเกิดจาก 3/6=1/2=0.5 นั่นเองครับ

จากที่ได้ลองคำนวณที่ผ่านมาเราจึงสรุปเป็นสูตรความน่าจะเป็นได้ดังนี้ครับ


โดยที่ค่าของความน่าจะเป็นมีค่าตั้งแต่ 0 ถึง 1 โดยที่

  • 0 หมายถึงไม่สามารถเกิดเหตุการณ์ที่สนใจได้
  • 1 หมายถึง สามารถเกิดเหตุการณ์ที่สนใจได้แน่นอน 100 เปอร์เซ็น และค่ายิ่งเข้าใกล้เลข 1 เท่าไหร่แสดงว่ามีโอกาสเกิดเหตุการณ์ที่สนใจได้มากขึ้น


Complement of an Event

ในการหาความน่าจะเป็นที่ตรงข้ามกับเหตุการณ์ที่เราสนใจเราจะเรียกว่า Complement of an Event

ตัวอย่างเช่น
เราต้องการหาความน่าจะเป็นของการโยนเหรีญหนึ่งครั้งแล้วโอกาสที่จะเป็นหัว
ดังนั้น ถ้าเราต้องการหา Complement of an Event เราจะเขียนใหม่ได้ว่า
ต้องการหาความน่าจะเป็นของการโยนเหรีญหนึ่งครั้งแล้วโอกาสที่จะไม่เป็นหัว

อีกตัวอย่าง
เราต้องการหาความน่าจะเป็นของการทอยลูกเต๋าหนึ่งลูกแล้วโอกาสที่จะได้เลขจำนวนคู่
ดังนั้น ถ้าเราต้องการหา Complement of an Event เราจะเขียนใหม่ได้ว่า
เราต้องการหาความน่าจะเป็นของการทอยลูกเต๋าหนึ่งลูกแล้วโอกาสที่จะไม่ได้เลขจำนวนคู่

เราสามารถเขียน Complement of an Event เป็นสมการคณิตศาสตร์ได้ดังนี้ครับ
ยกตัวอย่างต้องการหาความน่าจะเป็นของการทอยลูกเต๋าหนึ่งลูกแล้วไม่ได้ค่า 1
ถ้าเราคิดปกติคือลูกเต๋าหนึ่งลูกมีทั้งหมด 6 ค่าคือ 1,2,3,4,5,6 และค่าที่ไม่เท่ากับ 1 มี 5 ค่าคือ 2,3,4,5,6
ดังนั้นความน่าจะเป็นของการทอยลูกเต๋าหนึ่งลูกแล้วไม่ได้ค่า 1 คือ 5/6

p(dice is not 1) = 5/6

หรือคำนวณโดยใช้สูตร Complement ได้ดังนี้
p(dice is not 1) = 1 - (p dice is 1)
                         = 1 - 1/6
                         = 5/6


Independent event

Independent event คือเหตุการณ์ที่สนใจทั้งหมดไม่เกี่ยวข้องซึ่งกันและกัน หรืออาจกล่าวได้ว่าเหตุการณ์ใดเหตุการณ์หนึ่งไม่ส่งผลกระทบซึ่งกันและกัน
ยกตัวอย่างเช่น เราต้องการหาความน่าจะเป็นเมื่อโยนเหรียญ 2 ครั้งแล้วได้ หัว 2 ครั้ง จะสังเกตุว่าถ้าโยนเหรียญครั้งแรกแล้วผลที่ได้จะไม่ทำให้การโยนเหรียญครั้งที่ 2 เปลี่ยนแปลงไปคือ โยนเหรียญครั้งแรกความน่าจะเป็นที่ออกหัวคือ 1/2 = 0.5 หลังจากโยนครั้งแรกเสร็จโยนครั้งที่ 2 โอกาสที่เหรียญจะออกหัวก็มีความน่าจะเป็น 1/2 = 0.5 เหมือนเดิม เราจึงเรียกเหตุการ์ดังกล่าวว่าเป็นเหตุการที่ Independent ต่อกัน ซึ่งเราสามารถเขียนสมการดังกล่าวได้ดังนี้ครับ

p(A and B) = p(A,B) = p(A) × p(B)

Example
p(H and H) = p(H,H) = p(H) × p(H) = 1/2 × 1/2 = 1/4


Dependent Event

Dependent Event คือ เหตุการที่สนใจทั้งหมดเกี่ยวข้องซึ่งกันและกัน หรืออาจกล่าวได้ว่าเหตุการณ์ใดเหตุการณ์หนึ่งจะส่งผลกระทบซึ่งกันและกัน
ยกตัวอย่างเช่น เรามีถุงอยู่หนึ่งถุงซึ่งในถุงประกอบไปด้วยลูกบอล 7 ลูกโดยมีลูกสีฟ้า 4 ลูก และลูกสีแดง 3 ลูกดังรูปด้านล่าง


เราต้องการหาความน่าจะเป็นที่ล้วงเข้าไปหยิบแต่ละครั้งแล้วได้สีฟ้า 2 ลูก โดยในการหยิบแต่ละครั้งจะไม่นำลูกบอลคืนกลับเข้าไปในถุง
จากเงื่อนไขดังกล่าว ความน่าจะเป็นที่จะหยิบได้ลูกสีฟ้าครั้งแรกจะมีโอกาสเป็น 4/7 แต่พอครั้งต่อไปต้องการหาความน่าจะเป็นที่หยิบได้ลูกสีฟ้าอีกครั้งจะมีโอกาสเหลือเพียง 3/6 เนื่องจากถ้าครั้งแรกได้ลูกสีฟ้าแล้วในถุงจะเหลือบอลอยู่ 6 ลูกคือ สีฟ้า 3 ลูก และ สีแดง 3 ลูกนั่นเอง จะเห็นว่าเหตุการ์แรกส่งผลกระทบต่อความน่าจะเป็นต่อเหตุการ์ที่2 เราจึงเรียกเหตุการร์นี้ว่าเป็นเหตุการณ์ที่ Dependent ต่อกัน


เราสามารถหาเหตุกรณ์ที่จะเกิดขึ้นทั้งหมดได้ดังนี้



สามารถเขียนสมการได้เป็น


จากสมการเราจะเรียก
P(A,B) ว่า join
P(A) ว่า prior
P(B|A) ว่า conditional

เพื่อความเข้าใจมากขึ้นเราสามานำสมการด้านบนมาเขียนได้เป็นรูปด้านล่าง



ทฤษฎีความน่าจะเป็นเบย์ (Bayes Theorem)
ทฤษฎีความน่าจะเป็นเบย์เป็น ทฤษฎีที่เกี่ยวกับ ความน่าจะเป็นที่เกิดเหตุการณ์หนึ่ง ก็ต่อเมื่อเหตุการนึงได้เกิดไปแล้ว
ยกตัวอย่างเช่น
ในประชากรทั้งหมดจะมีคนที่เป็นภูมิแพ้อยู่ 1% นักวิทยาศาสตร์จึงได้สร้างเครื่องมือในการตรวจสอบว่าคนไข้ที่มาตรวจนั้นเป็นภูมิแพ้หรือไม่
ซึ่งจากการทดสอบเครื่องมือดังกล่าวจะให้ผลดังนี้
- ถ้าคนไข้ที่เป็นโรคภูมิแพ้มาตรวจเครื่องมือดังกล่าวจะมีโอกาสแสดงค่าจำนวนเต็มบวก 99%
- ถ้าคนไข้ไม่เป็นภูมิแพ้ เครื่องมือดังกล่าวจะมีโอกาสแสดงค่าจำนวนเต็มลบ 99%

อยากถามว่าหากนำเครื่องมือดังกล่าวเป็นใช้จริง โดยการตรวจคนไข้ที่ไม่รู้ว่าเป็นโรคภูมิแพ้หรือไม่ แต่เครื่องมือดังกล่าวแสดงค่าจำนวนเต็มบวก แสดงว่าคนไข้นั้นมีโอกาสเป็นโรคภูมิแพ้กี่เปอร์เซ็น
บางคนอาจจะคิดว่าก็น่าจะเป็น 99% แต่คำตอบจริงแล้วคือมีโอกาสเกิดภูมิแพ้เพียง 50% เท่านั้นโดยการใช้ทฤษฎีความน่าจะเป็นเบย์เข้ามาคิดโดยมีสมการดังนี้


จากสมการเราจะเรียก

p(A|B) ว่า posterior
p(B|A) ว่า likelihood
p(A) ว่า prior
p(B) ว่า marginal หรือ evidence

จากตัวอย่างที่ผ่านมาสามารถสรุปได้ดังนี้
- ในประชากรทั้งหมดจะมีคนที่เป็นภูมิแพ้อยู่ 1% คือ P(A) = 0.01
- ถ้าคนไข้ที่เป็นโรคภูมิแพ้มาตรวจเครื่องมือดังกล่าวจะมีโอกาสแสดงค่าจำนวนเต็มบวก 99%  คือ P(+|A) = 0.99
- ถ้าคนไข้ไม่เป็นภูมิแพ้ เครื่องมือดังกล่าวจะมีโอกาสแสดงค่าจำนวนเต็มลบ 99% คือ P(-|A') = 0.99
- อยากถามว่าหากนำเครื่องมือดังกล่าวเป็นใช้จริง โดยการตรวจคนไข้ที่ไม่รู้ว่าเป็นโรคภูมิแพ้หรือไม่ แต่เครื่องมือดังกล่าวแสดงค่าจำนวนเต็ม แสดงว่าคนไข้นั้นมีโอกาสเป็นโรคภูมิแพ้กี่เปอร์เซ็น คือให้หา P(A|+) = ?

เราสามารถนำทฤษฎีความน่าจะเป็นเบย์มาคำนวณได้ดังนี้


ในบทความถัดไปตามลิงค์ http://cakeknowledgeblogs.blogspot.com/2019/08/naive-bayes-classification-2.html จะเป็นการนำ Bayes Theorem มาแปลงเป็น Naive Bayes และเรียกใช้ดูกันครับ


reference
http://dataminingtrend.com/2014/naive-bayes/