พิสูจน์ สูตร Linear Regression

Kritchai Tadbhusinwat
G-Able
Published in
3 min readMar 14, 2022
image from https://www.gatevidyalay.com/

Linear Regression ภาษาไทยเรียกว่า “การวิเคราะห์การถดถอยเชิงเส้น” (บางทีก็เรียกว่า Least square method ภาษาไทย “กำลังสองถดถอยน้อยสุด”) หัวข้อนี้เริ่มเรียนกันในระดับ ม.ปลาย เป็นเทคนิคหนึ่งในหลาย ๆ เทคนิค ที่ถูกนำไปประยุกต์ใช้ในงาน Machine Learning , AI สำหรับการพยากรณ์สิ่งที่จะเกิดจากข้อมูลที่มีอยู่

หากเรามีข้อมูล ตัวอย่างเช่น เราเปิดร้านขายสินค้าแล้วเราเก็บข้อมูลรายได้ ทุกวันเป็นดังนี้

แล้วเราต้องการทำนายว่าวันที่ 5 จะมีรายได้เท่าไร
หากประมาณด้วยสายตาก็จะเห็นว่า รายได้ นั้นจะมีค่าเพิ่มขึ้นวันละ 100 บาท ดังนั้นเราจะประมาณได้ว่าวันที่ 5 จะมีรายได้ประมาณ 500 บาท
แต่การประมาณด้วยสายตาแบบนี้จะมีความแม่นยำที่ต่ำ และหากข้อมูลมีความซับซ้อนก็ไม่สามารถทำได้ ดังนั้นเราจะใช้วิธีทางคณิตศาสตร์เพื่อทำนายค่าที่ต้องการ

สิ่งที่เราต้องการ คือ หาฟังก์ชันความสัมพันธ์ของข้อมูล จากข้อมูลที่เรามี โดยจะมีอยู่ 2 วิธีหลัก ๆ ดังนี้
1. Interpolation คือ การหาฟังก์ชันความสัมพันธ์ที่ผ่านทุกข้อมูล
2. Regression คือ การหาฟังก์ชันความสัมพันธ์ที่เป็นตัวแทนของข้อมูล

image from https://www.quora.com/

ในที่บทความนี้ จะกล่าวถึงวิธี Linear Regression ซึ่งหมายความว่าจะหาฟังก์ชันความสัมพันธ์ของข้อมูลที่เป็นเส้นตรง

ในตอนที่เรียนในระดับ ม.ปลาย จะต้องจำสูตร

สมการเส้นตรง

เมื่อ m คือ ค่าความชัน และ c คือ จุดตัดแกน y

และ สูตรที่ใช้หา m , c

ตัวอย่างการใช้สูตร จากข้อมูลการขายสินค้าของตัวอย่างด้านบน จะได้ว่าตัวแปรอิสระ(independent variable) : x คือ วันที่ และ ตัวแปรตาม(dependent variable) : y คือ รายได้ จากนั้นทำการเพิ่ม column xy และ x²

หมายเหตุ บรรทัดที่ 6 คือ ค่าผลรวม
แทนค่าในสมการที่ 1 จะได้ 1000 = 10m + 4c
แทนค่าในสมการที่ 2 จะได้ 2997 = 30m + 10c
แก้สมการจะได้ m = 99.4, c = 1.5
จะได้สมการเส้นตรง y = 99.4x + 1.5
ดังนั้น วันที่ 5(แทนค่า x=5) y = 498.5 #

สำหรับที่มาของ 2 สูตรนี้ ต้องใช้ความรู้ calculus ในหัวข้อ กฏลูกโซ่(Chain Rule) , ค่าสูงสุด ต่ำสุด(Max/Min value) , อนุพันธ์ย่อย(Partial differential)

image from author

หากมีข้อมูลดังรูป สมมุติว่าเส้นตรงที่ต้องการเป็น y = mx + c จะเห็นว่าที่ตำแหน่งข้อมูล x ใด ๆ มีค่าที่คลาดเคลื่อนจากข้อมูลจริงอยู่(เส้นสีชมพู) เช่น ที่ x1 ข้อมูลจริง คือ y1 แต่ค่า y ที่ได้จากสมการเส้นตรง คือ mx1 + c ดังนั้นเราต้องพยายามทำให้ค่าคลาดเคลื่อนนี้น้อยที่สุด
ค่าคลาดเคลื่อนที่ตำแหน่งต่าง ๆ สามารถหาได้ดังนี้

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

ทำการรวมค่าคลาดเคลื่อนกำลังสองทั้งหมด จะได้

ตั้งชื่อค่านี้เป็น E เพื่อจะได้ง่ายในการเรียก

ทำการหาค่า E ที่น้อยที่สุด เทียบตัวแปร c

ให้มีค่า เท่ากับ 0 จะได้

ทำการหาค่า E ที่น้อยที่สุด เทียบตัวแปร m

ให้มีค่า เท่ากับ 0 จะได้

ก็จะได้ 2 สูตรดังข้างต้น

เราสามารถเขียนโปรแกรมคำนวณค่า Linear Regression ได้ดังนี้

จาก code ด้านบนจะเห็นว่าต้องมีการคำนวณค่าต่าง ๆ เองตามสูตร และมีการจัดรูปสมการสำหรับหาค่า m , c (วิธีการจัดรูปสมการขอละไว้) ทั้งนี้ในภาษา python จะมี module scipy ซึ่งถูกสร้างขึ้นมาเพื่อคำนวณด้านคณิตศาสตร์/วิทยาศาสตร์ ซึ่งจะมี function stats.linregress() ในการหาค่าต่าง ๆ ของ Linear Regression ได้ดังนี้

จาก code ทั้งสองจะหาค่าได้ว่า วันที่ 5 (x=5) จะมีรายได้ (y) เท่ากับ 498.5 ซึ่งเท่ากับที่เราคำนวณไว้ตามสูตร และสามารถ plot กราฟออกมาได้ดังรูป

ในส่วน module numpy จะใช้ function polyfit() ดังนี้

import numpy as np

x = np.array([1,2,3,4])
y = np.array([101,199,302,398])

# Fit a polynomial
m , c = np.polyfit(x,y,1) # linear : degree = 1

def regress_func(x) :
return m*x + c

print(“slope :”,m) # 99.39999999999998
print(“intercept :”,c) # 1.5000000000000693
print(regress_func(5)) # 498.49999999999994

จากตัวอย่างที่ยกมานั้น ค่าที่ได้จากการพยากรณ์นั้นอ้างอิงมาจากข้อมูลที่มีอยู่ แต่หากมองในโลกความเป็นจริงหากจำนวนวัน(x)มากขึ้น รายได้อาจจะไม่ได้เป็นสัดส่วนแบบเส้นตรงแล้วก็ได้ นอกจาก Linear Regression แล้วยังมีเทคนิคอื่น ๆ อีก เช่น Polynomial Regerssion , Multiple Regression เป็นต้น ซึ่งจะยังไม่กล่าวถึงในที่นี้

--

--

Kritchai Tadbhusinwat
G-Able
Writer for

Programmer บริษัทเอกชนที่เป็นส่วนหนึ่งของเบื้องหลังให้กับบริษัทชั้นนำต่าง ๆ และ Tutor สอนกวดวิชาคณิตศาสตร์/ฟิสิกส์ เพื่อเตรียมสอบเข้ามหาวิทยาลัย