Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

หาการเหมาะสมแบบ Least-squares ของพหุนามต่อข้อมูลใน Python

บทนำ

ในการหาการเหมาะสมแบบ Least-squares (least-squares fit) ของพหุนามต่อข้อมูล สามารถใช้ฟังก์ชัน polynomial.polyfit() ใน NumPy ของ Python ฟังก์ชันนี้จะคืนสัมประสิทธิ์พหุนามที่จัดเรียงจากดีกรีต่ำไปสูง

พารามิเตอร์สำคัญ

  • x: พิกัด x ของจุดข้อมูล M จุด (x[i], y[i])
  • y: พิกัด y ของจุดข้อมูล สามารถเป็นอาร์เรย์ 2 มิติเพื่อเหมาะกับหลายชุดข้อมูลพร้อมกัน
  • deg: ดีกรีของพหุนามที่ต้องการเหมาะสม หากเป็นจำนวนเต็มเดียว จะรวมทุกพจน์จนถึงดีกรีนั้น
  • rcond: เลขสภาพสัมพัทธ์ (relative condition number) ค่าสิงุลาร์ที่เล็กกว่านี้จะถูกละเลย
  • full: หากเป็น True จะคืนข้อมูลวินิจฉัยจากการแยกค่าสิงุลาร์เพิ่มเติม
  • w: น้ำหนักสำหรับแต่ละจุดข้อมูล (ค่าเริ่มต้น: None)

ขั้นตอนการทำงาน

1. นำเข้าไลบรารีที่จำเป็น

import numpy as np
from numpy.polynomial import polynomial as P

2. สร้างพิกัด x และ y

x = np.linspace(-1, 1, 51)
y = x**3 - x + np.random.randn(len(x))

3. หาการเหมาะสมแบบ Least-squares

c, stats = P.polyfit(x, y, 3, full=True)
print("\nResult (coefficients)...\n", c)
print("\nResult (stats)...\n", stats)

ตัวอย่างโค้ดสมบูรณ์

import numpy as np
from numpy.polynomial import polynomial as P

# พิกัด x
x = np.linspace(-1, 1, 51)
print("X Co-ordinate...\n", x)

# พิกัด y (พร้อม雜訊สุ่ม)
y = x**3 - x + np.random.randn(len(x))
print("\nY Co-ordinate...\n", y)

# หาการเหมาะสมแบบ Least-squares ดีกรี 3
c, stats = P.polyfit(x, y, 3, full=True)
print("\nResult (coefficients)...\n", c)
print("\nResult (stats)...\n", stats)

ผลลัพธ์ตัวอย่าง

X Co-ordinate...
 [-1.   -0.96 -0.92 ...  0.96  1.  ]
Y Co-ordinate...
 [ 0.2428 -0.4832 -1.1807 ... -0.7584]
Result (coefficients)...
 [-0.1720 -1.8411  0.0944  2.3903]
Result (stats)...
 [array([60.4365]), 4, array([1.3845, 1.3212, 0.5044, 0.2885]), 1.1324e-14]

สรุป

ฟังก์ชัน polyfit() หาสัมประสิทธิ์พหุนามที่ทำให้ผลรวมกำลังสองของข้อผิดพลาดน้อยที่สุด ในตัวอย่าง พหุนามดีกรี 3 ถูกเหมาะกับข้อมูลที่มีการรบกวนสุ่ม สัมประสิทธิ์ที่ได้ประมาณ [c₀, c₁, c₂, c₃] สำหรับพหุนาม c₀ + c₁x + c₂x² + c₃x³