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

รับกำลังสองน้อยที่สุดของพหุนามกับข้อมูลใน Python


ในการทำให้พหุนามกำลังสองน้อยที่สุดกับข้อมูล ให้ใช้ polynomial.polyfit() ใน Python Numpy วิธีนี้จะคืนค่าสัมประสิทธิ์พหุนามที่เรียงลำดับจากต่ำไปสูง ถ้า y เป็น 2 มิติ สัมประสิทธิ์ในคอลัมน์ k ของ coef จะแสดงพหุนามที่พอดีกับข้อมูลในคอลัมน์ที่ k ของ y พารามิเตอร์ x คือพิกัด x ของจุดตัวอย่าง (ข้อมูล) M (x[i], y[i])

พารามิเตอร์ y คือพิกัด y ของจุดตัวอย่าง จุดตัวอย่างหลายชุดที่ใช้พิกัด x เดียวกันสามารถ (แยกกันได้) กับการเรียก polyfit หนึ่งครั้งโดยการส่งผ่านอาร์เรย์ 2 มิติของ y ที่มีชุดข้อมูลหนึ่งชุดต่อคอลัมน์ พารามิเตอร์ deg คือดีกรีของพหุนามที่เหมาะสม ถ้าองศาเป็นจำนวนเต็มเดียว เงื่อนไขทั้งหมดและรวมถึงระยะองศาจะรวมอยู่ในความพอดี

พารามิเตอร์ rcond คือหมายเลขเงื่อนไขสัมพัทธ์ของความพอดี ค่าเอกพจน์ที่น้อยกว่า rcond เทียบกับค่าเอกพจน์ที่ใหญ่ที่สุด จะถูกละเว้น ค่าเริ่มต้นคือ len(x)*eps โดยที่ eps คือความแม่นยำสัมพัทธ์ของประเภทโฟลตของแพลตฟอร์ม ประมาณ 2e-16 ในกรณีส่วนใหญ่ พารามิเตอร์เต็มคือสวิตช์ที่กำหนดลักษณะของค่าตอบแทน เมื่อ False (ค่าดีฟอลต์) จะส่งกลับค่าสัมประสิทธิ์เท่านั้น เมื่อเป็น True ข้อมูลการวินิจฉัยจากการสลายตัวของค่าเอกพจน์ก็ถูกส่งกลับเช่นกัน

พารามิเตอร์ w คือน้ำหนัก ถ้าไม่ใช่ ไม่มี น้ำหนัก w[i] ใช้กับเศษเหลือที่ไม่ยกกำลังสอง y[i] - y_hat[i] ที่ x[i] ตามหลักการแล้ว ตุ้มน้ำหนักจะถูกเลือกเพื่อให้ข้อผิดพลาดของผลิตภัณฑ์ w[i]*y[i] ทั้งหมดมีความแปรปรวนเท่ากัน เมื่อใช้การถ่วงน้ำหนักแบบผกผัน ให้ใช้ w[i] =1/sigma(y[i]) ค่าเริ่มต้นคือไม่มี

ขั้นตอน

ขั้นแรก นำเข้าไลบรารีที่จำเป็น -

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

พิกัด x -

x = np.linspace(-1,1,51)

แสดงพิกัด x -

print("X Co-ordinate...\n",x)

พิกัด y -

y = x**3 - x + np.random.randn(len(x))
print("\nY Co-ordinate...\n",y)

หากต้องการให้พหุนามกำลังสองน้อยที่สุดกับข้อมูล ให้ใช้ polynomial.polyfit() ใน Python Numpy -

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

ตัวอย่าง

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

# The x-coordinate
x = np.linspace(-1,1,51)

# Display the x-coordinate
print("X Co-ordinate...\n",x)

# The y-coordinate
y = x**3 - x + np.random.randn(len(x))
print("\nY Co-ordinate...\n",y)

# To get the least-squares fit of a polynomial to data, use the polynomial.polyfit() in Python Numpy

# The method returns the Polynomial coefficients ordered from low to high. If y was 2-D, the coefficients in column k of coef represent the polynomial fit to the data in y’s k-th column.
c, stats = P.polyfit(x,y,3,full=True)
print("\nResult...\n",c)
print("\nResult...\n",stats)

ผลลัพธ์

X Co-ordinate...
[-1. -0.96 -0.92 -0.88 -0.84 -0.8 -0.76 -0.72 -0.68 -0.64 -0.6 -0.56
 -0.52 -0.48 -0.44 -0.4 -0.36 -0.32 -0.28 -0.24 -0.2 -0.16 -0.12 -0.08
 -0.04 0. 0.04 0.08 0.12 0.16 0.2 0.24 0.28 0.32 0.36 0.4
  0.44 0.48 0.52 0.56 0.6 0.64 0.68 0.72 0.76 0.8 0.84 0.88
  0.92 0.96 1. ]

Y Co-ordinate...
[ 0.24282445 -0.48320773 -1.18068109 -0.48486683 0.80514762 0.48976259
  0.31363813 -0.03382685 -0.92334611 0.86835062 0.24661201 0.9790978
  0.03782101 0.12213365 -1.37248029 1.99891304 -0.09825977 1.74524931
  0.70560858 0.15516069 0.69169705 0.76957712 -1.21919676 1.50064825
  1.32101339 -2.51479992 -0.28998783 -1.24293076 0.45927699 -0.53484746
  0.50455341 -0.06351788 -2.69585303 -0.46833578 1.4924168 -2.42374146
 -1.91934499 -1.36311466 -1.23946547 -1.56822005 -0.79648036 1.58269324
 -0.53682862 -0.90861958 -0.28174461 -0.10775622 0.58535687 1.06373501
 -2.28991738 2.01597286 -0.75841069]

Result...
[-0.17198829 -1.84107674 0.09439374 2.39030912]

Result...
[array([60.43653521]), 4, array([1.38446749, 1.32119158, 0.50443316, 0.28853036]), 1.1324274851176597e-14]