วิทยาศาสตร์ข้อมูล- การถดถอยเชิงเส้น


เราขาดตัวแปรสำคัญตัวหนึ่งที่ส่งผลต่อ Calorie_Burnage ซึ่งก็คือ Duration ของเซสชันการฝึก

ระยะเวลาที่ใช้ร่วมกับ Average_Pulse จะอธิบาย Calorie_Burnage ได้แม่นยำยิ่งขึ้น


การถดถอยเชิงเส้น

คำว่าการถดถอยจะใช้เมื่อคุณพยายามค้นหาความสัมพันธ์ระหว่างตัวแปร

ในแมชชีนเลิร์นนิงและในการสร้างแบบจำลองทางสถิติ ความสัมพันธ์นั้นถูกใช้เพื่อทำนายผลลัพธ์ของเหตุการณ์

ในโมดูลนี้ เราจะครอบคลุมคำถามต่อไปนี้:

  • เราสามารถสรุปได้ว่า Average_Pulse และ Duration เกี่ยวข้องกับ Calorie_Burnage หรือไม่
  • เราสามารถใช้ Average_Pulse และ Duration เพื่อทำนาย Calorie_Burnage ได้หรือไม่

วิธีกำลังสองน้อยที่สุด

การถดถอยเชิงเส้นใช้วิธีกำลังสองน้อยที่สุด

แนวคิดคือการลากเส้นผ่านจุดข้อมูลที่วางแผนไว้ทั้งหมด เส้นอยู่ในตำแหน่งที่ลดระยะห่างไปยังจุดข้อมูลทั้งหมด

ระยะทางเรียกว่า "เศษ" หรือ "ข้อผิดพลาด"

เส้นประสีแดงแสดงถึงระยะทางจากจุดข้อมูลไปยังฟังก์ชันทางคณิตศาสตร์ที่วาด

การถดถอยเชิงเส้น - กำลังสองน้อยที่สุด

การถดถอยเชิงเส้นโดยใช้ตัวแปรอธิบายหนึ่งตัว

ในตัวอย่างนี้ เราจะพยายามทำนาย Calorie_Burnage ด้วย Average_Pulse โดยใช้การถดถอยเชิงเส้น:

ตัวอย่าง

import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats

full_health_data = pd.read_csv("data.csv", header=0, sep=",")

x = full_health_data["Average_Pulse"]
y = full_health_data ["Calorie_Burnage"]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
 return slope * x + intercept

mymodel = list(map(myfunc, x))

plt.scatter(x, y)
plt.plot(x, slope * x + intercept)
plt.ylim(ymin=0, ymax=2000)
plt.xlim(xmin=0, xmax=200)
plt.xlabel("Average_Pulse")
plt.ylabel ("Calorie_Burnage")
plt.show()

ตัวอย่างที่อธิบาย:

  • นำเข้าโมดูลที่คุณต้องการ: Pandas, matplotlib และ Scipy
  • แยก Average_Pulse เป็น x แยก Calorie_burnage เป็น y
  • รับค่าคีย์ที่สำคัญด้วย: ความชัน, การสกัดกั้น, r, p, std_err = stats.linregress(x, y)
  • สร้างฟังก์ชันที่ใช้ค่าความชันและค่าสกัดกั้นเพื่อคืนค่าใหม่ ค่าใหม่นี้แสดงตำแหน่งบนแกน y ค่า x ที่สอดคล้องกันจะถูกวาง
  • เรียกใช้แต่ละค่าของอาร์เรย์ x ผ่านฟังก์ชัน ซึ่งจะส่งผลให้อาร์เรย์ใหม่มีค่าใหม่สำหรับแกน y: mymodel = list(map(myfunc, x))
  • วาดพล็อตกระจายดั้งเดิม: plt.scatter(x, y)
  • ลากเส้นของการถดถอยเชิงเส้น: plt.plot(x, mymodel)
  • กำหนดค่าสูงสุดและต่ำสุดของแกน
  • ติดป้ายกำกับแกน: "Average_Pulse" และ "Calorie_Burnage"

เอาท์พุท:

การถดถอยเชิงเส้น - หนึ่งตัวแปร - กำลังสองน้อยที่สุด

คุณคิดว่าเส้นสามารถทำนาย Calorie_Burnage ได้อย่างแม่นยำหรือไม่?

เราจะแสดงให้เห็นว่าตัวแปร Average_Pulse เพียงอย่างเดียวไม่เพียงพอต่อการคาดการณ์ที่แม่นยำของ Calorie_Burnage