Wednesday, November 8, 2017

รีเกรสชันแบบง่ายและแบบโพลีโนเมียลใน R

บทความนี้เกี่ยวกับการใช้ภาษา R และวิทยาการข้อมูล (Data science) เพื่อนำไปใช้ในงานแมชชีนเลินนิง สอนวิธีเขียนสคริปเพื่อทำรีเกรสชันแบบง่ายและแบบโพลีโนเมียล

รีเกรสชันเป็นอัลกอริทึมพื้นฐานที่ใช้กันมากในการทำแมชชีนเลินนิง การทำรีเกรสชันในภาษา R ง่ายมากเพราะมีเพ็จเกจรีเกรสชันให้เลือกใช้ได้เป็นร้อย อาทิ รีเกรสชันอย่างง่าย รีเกรสชันแบบโพลีโนเมียล รีเกรสชันแบบมัลติวารีเอต รีเกรสชันแบบโลจิสติก ฯลฯ

รีเกรสชันที่พูดถึงในบทความนี้อยู่ในกลุ่ม OLS (Ordinary Least Squares) ซึ่งมีสูตรแบบนี้




คือค่าทำนายของตัวแปรที่ขึ้นอยู่กับการสังเกต

คือตัวทำนายที่ j ของตัวสังเกตที่ i



ตัวอินเตอร์เซพ (ค่าทำนายของ Y เมื่อตัวแปรทั้งหมดเป็นศูนย์)



โคออฟฟิเชียนของตัวทำนายที่ J


เรื่องสถิติเอาแค่นี้พอ เขียนโค้ดเลยดีกว่า ให้เปิดโปรแกรม RStduio แล้วรันคำสั่งนี้

install.packages(c("car", "gvlma", "MASS", "leaps"))

เพื่อติดตั้งแพคเก็จสี่อันที่จะใช้ ส่วนดาต้าเซตที่เราจะใช้ทำการทดสอบคือ women ซึ่งมีอยู่ในไลบราลีมาตรฐานของ R แล้ว ไม่ต้องอ่านจากภายนอก ดาต้าเซตนี้เป็นตัวอย่างน้ำหนัก-ส่วนสูงของผู้หญิงโดยเฉลี่ยทั่วไปสิบห้าคน (อายุระหว่าง 30-39) เพื่อนำมาใช้เป็นเกณฑ์เปรียบเทียบว่าผู้หญิงวัยนี้ที่มีส่วนสูงเท่านี้ควรมีน้ำหนักเท่าใด หรือมีน้ำหนักเท่านี้ควรมีส่วนสูงเท่าใด หน้าตาของดาต้าเซตเป็นแบบนี้


ต่อไปเป็นสคริปรีเกรสชันอย่างง่าย


โค้ดที่ทำฟิตติงตัวแบบจำลองคือฟังก์ชัน lm() ในบรรทัดที่ 2 บรรทัดเดียว ส่วนที่เหลือเป็นแค่การพล็อตกราฟ  เมื่อรันแล้วจะได้ชาร์ทหน้าตาแบบนี้


จะเห็นว่าผลการทำนายแบบเส้นตรงโดนแค่บางจุด แต่เฉียดๆ จุดส่วนใหญ่ ถ้าเส้นโค้งเล็กน้อยอาจจะทำนายได้ดีขึ้น ซึ่งทำได้โดยปรับสูตรให้เป็นโพลีโนเมียลแบบนี้


ปรับสูตรแล้วปรับสคริปใหม่เป็นแบบนี้


เมื่อพล็อตชาร์ทจะมีหน้าตาแบบนี้


จะเห็นว่าเมื่อนำไปใช้ทำนายน้ำหนักส่วนสูง การทำงานแบบโพลีโนเมียลจะได้ผลลัพธ์ที่แม่นยำกว่ารีเกรสชันแบบง่าย

อ่านแล้วมีความเห็นหรือข้อแนะนำอะไรกรุณาใส่ในคอมเม้นต์ข้างล่างเลยครับ

No comments:

Post a Comment

เตียมซอฟท์แวร์ก่อนเรียนคอร์ส Essential ML.NET

  ผู้จะเรียนวิชา Essential ML.NET ทุกคนโปรดเตรียมฮาร์ดแวร์และซอฟท์แวร์ต่อไปนี้ ระบบปฏิบัติการ Windows 10 (ถ้าใช้ MacOS หรือ Linux จะไม่สามาร...