แนวคิด AI ด้วย Python

Linear regression และ logistic regression ใน Python

การถดถอย (regression) คือแมชชีนเลิร์นนิงแบบที่ง่ายที่สุด linear regression ทำนายตัวเลขด้วยเส้นตรง ส่วน logistic regression ส่งเส้นตรงนั้นผ่าน sigmoid เพื่อทำนายความน่าจะเป็นของคำตอบใช่/ไม่ใช่

แนวคิดแบบเข้าใจง่าย

การถดถอย (regression) คือแมชชีนเลิร์นนิงแบบที่ง่ายที่สุด linear regression ทำนายตัวเลขด้วยเส้นตรง ส่วน logistic regression ส่งเส้นตรงนั้นผ่าน sigmoid เพื่อทำนายความน่าจะเป็นของคำตอบใช่/ไม่ใช่

ลากเส้นตรงให้พอดีข้อมูลด้วยวิธีกำลังสองน้อยที่สุด แล้วแปลงคะแนนเป็นความน่าจะเป็นด้วย logistic regression

ประเด็นสำคัญ

  • linear regression ทำนายค่าต่อเนื่อง เช่น ราคาหรืออุณหภูมิ
  • logistic regression ทำนายความน่าจะเป็นสำหรับสองคลาส
  • ทั้งสองแบบฝึกด้วย gradient descent แทนสูตรสำเร็จได้
  • perceptron เป็นตัวจำแนกที่คล้ายกัน ซึ่งปรับน้ำหนักเฉพาะตอนทายผิด

ควรใช้เมื่อใด?

  • เข้าใจสิ่งที่เกิดขึ้นภายในโครงข่ายประสาทเทียมและไลบรารี AI
  • เข้าใจแนวคิดก่อนลงมือเขียนเองในโจทย์ที่เกี่ยวข้อง
  • เตรียมตัวสำหรับคอร์สแมชชีนเลิร์นนิง การสัมภาษณ์งาน และโปรเจกต์

ลองดูการทำงานจริง

คลิกที่กราฟด้านซ้ายเพื่อเพิ่มจุดและดูเส้นที่พอดีที่สุดอัปเดต ด้านขวาให้เปลี่ยน w และ b เพื่อเลื่อนเส้นแบ่งการตัดสินใจ

โค้ดตัวอย่าง

รันโค้ด →
main.py
import math

# Linear regression: find the line that best fits the points (least squares).
xs = [1, 2, 3, 4, 5]
ys = [2.1, 3.9, 6.2, 8.1, 9.8]
mean_x, mean_y = sum(xs) / len(xs), sum(ys) / len(ys)
slope = sum((x - mean_x) * (y - mean_y) for x, y in zip(xs, ys)) / sum((x - mean_x) ** 2 for x in xs)
intercept = mean_y - slope * mean_x
print(f"line: y = {slope:.2f}x + {intercept:.2f}")
print("predict x=6:", round(slope * 6 + intercept, 2))

# Logistic regression turns a score into a probability with the sigmoid.
def predict_pass(hours_studied, weight=1.5, bias=-4.0):
    return 1 / (1 + math.exp(-(weight * hours_studied + bias)))

for hours in (1, 3, 5):
    p = predict_pass(hours)
    print(f"{hours} hours -> pass probability {p:.2f} -> {'pass' if p >= 0.5 else 'fail'}")

ผลลัพธ์ที่คาดหวัง

line: y = 1.96x + 0.14
predict x=6: 11.9
1 hours -> pass probability 0.08 -> fail
3 hours -> pass probability 0.62 -> pass
5 hours -> pass probability 0.97 -> pass

หลักการทำงาน

สูตรกำลังสองน้อยที่สุดหาความชันและจุดตัดแกนที่ทำให้ผลรวมระยะห่างกำลังสองถึงจุดต่าง ๆ น้อยที่สุด ได้ y = 1.96x + 0.14 ส่วน predict_pass() คำนวณคะแนนจากจำนวนชั่วโมงที่อ่านหนังสือ แล้ว sigmoid แปลงเป็นความน่าจะเป็น โดย 0.5 คือเส้นแบ่งระหว่างสอบตกกับสอบผ่าน

เปลี่ยนค่าและรันโปรแกรมด้วย คอมไพเลอร์ Python ออนไลน์ของ CodeUtility โดยไม่ต้องติดตั้ง Python

แบบฝึกหัด

ลองเปลี่ยน input และทดสอบกรณีขอบก่อนใช้ชุดข้อมูลที่ใหญ่ขึ้น

  1. เปลี่ยนอินพุตหรือน้ำหนัก แล้วลองทายผลลัพธ์ก่อนรัน
  2. พิมพ์ค่าระหว่างทางออกมาเพื่อดูการคำนวณทีละขั้น
  3. แก้โจทย์ที่ลิงก์ไว้ด้านล่างเพื่อเขียนแนวคิดนี้ด้วยตัวเอง
รันใน Python IDE →

ฝึกด้วยโจทย์

ใช้สิ่งที่เรียนในบทนี้แก้ปัญหาจริง ทุกโจทย์รันในเบราว์เซอร์ พร้อมการทดสอบทันทีและรีวิวจาก AI

โจทย์ทั้งหมด