เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ค่าที่ดีที่สุดนั้นดีอย่างไร?

ฟังก์ชัน np.polyfit() ที่ใช้หาพารามิเตอร์ของเส้นถดถอยนั้นทำงานโดยหา slope และ intercept ที่ ดีที่สุด ด้วยการลดค่าผลรวมกำลังสองของส่วนเหลือ (RSS — residual sum of squares) ให้น้อยที่สุด ในแบบฝึกหัดนี้ จะให้พล็อตกราฟฟังก์ชันที่กำลังถูก optimize คือ RSS เทียบกับพารามิเตอร์ slope a โดยกำหนดให้ intercept มีค่าเท่ากับที่หาได้จากการ optimize จากนั้นพล็อต RSS เทียบกับ slope แล้วสังเกตว่าค่าต่ำสุดอยู่ที่ใด

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Statistical Thinking in Python (ตอนที่ 2)

ดูคอร์ส

คำแนะนำการฝึกหัด

  • กำหนดค่า slope ที่จะใช้คำนวณ RSS โดยใช้ np.linspace() เพื่อสร้าง 200 จุดในช่วงระหว่าง 0 ถึง 0.1 ตัวอย่างเช่น หากต้องการ 100 จุดในช่วง 0 ถึง 0.5 สามารถใช้คำสั่ง np.linspace(0, 0.5, 100)
  • กำหนดค่าเริ่มต้นให้อาร์เรย์ rss สำหรับเก็บค่า RSS โดยใช้ np.empty_like() พร้อมกับอาร์เรย์ที่สร้างไว้ข้างต้น ฟังก์ชัน empty_like() จะคืนค่าอาร์เรย์ใหม่ที่มีรูปร่างและชนิดเดียวกับอาร์เรย์ที่ส่งเข้าไป (ในที่นี้คือ a_vals)
  • เขียน for loop เพื่อคำนวณผลรวม RSS ของ slope คำใบ้: RSS คำนวณได้จาก np.sum((y_data - a * x_data - b)**2) ตัวแปร b ที่คำนวณไว้ในแบบฝึกหัดก่อนหน้ายังคงอยู่ใน namespace แล้ว โดย fertility คือ y_data และ illiteracy คือ x_data
  • พล็อต RSS (rss) เทียบกับ slope (a_vals)
  • กด ส่งคำตอบ เพื่อดูกราฟ!

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

# Specify slopes to consider: a_vals
a_vals = ____

# Initialize sum of square of residuals: rss
rss = ____

# Compute sum of square of residuals for each value of a_vals
for i, a in enumerate(a_vals):
    rss[i] = ____((____ - a*____ - b)**2)

# Plot the RSS
plt.plot(____, ____, '-')
plt.xlabel('slope (children per woman / percent illiterate)')
plt.ylabel('sum of square of residuals')

plt.show()
แก้ไขและรันโค้ด