วิธีดำเนินการถดถอยกำลังสองใน python


การถดถอยกำลังสอง คือการถดถอยประเภทหนึ่งที่เราสามารถใช้เพื่อหาปริมาณความสัมพันธ์ระหว่างตัวแปรทำนายและตัวแปรตอบสนอง เมื่อความสัมพันธ์ที่แท้จริงเป็นแบบกำลังสอง ซึ่งอาจมีลักษณะเหมือน “U” หรือ “U” กลับหัวบนกราฟ

กล่าวคือ เมื่อตัวแปรทำนายเพิ่มขึ้น ตัวแปรตอบสนองก็มีแนวโน้มที่จะเพิ่มขึ้นเช่นกัน แต่หลังจากจุดหนึ่ง ตัวแปรตอบสนองก็เริ่มลดลงเมื่อตัวแปรทำนายยังคงเพิ่มขึ้นต่อไป

บทช่วยสอนนี้จะอธิบายวิธีการถดถอยกำลังสองใน Python

ตัวอย่าง: การถดถอยกำลังสองใน Python

สมมติว่าเรามีข้อมูลเกี่ยวกับจำนวนชั่วโมงทำงานต่อสัปดาห์และรายงานระดับความสุข (ในระดับ 0 ถึง 100) สำหรับคน 16 คน:

 import numpy as np
import scipy.stats as stats

#define variables
hours = [6, 9, 12, 12, 15, 21, 24, 24, 27, 30, 36, 39, 45, 48, 57, 60]
happ = [12, 18, 30, 42, 48, 78, 90, 96, 96, 90, 84, 78, 66, 54, 36, 24]

หากเราสร้างแผนภาพกระจายอย่างง่ายของข้อมูลนี้ เราจะเห็นว่าความสัมพันธ์ระหว่างตัวแปรทั้งสองนั้นมีรูปตัว “U”:

 import matplotlib.pyplot as plt

#create scatterplot
plt.scatter(hours, happ) 

เมื่อชั่วโมงทำงานเพิ่มขึ้น ความสุขก็เพิ่มขึ้น แต่เมื่อชั่วโมงทำงานเกิน 35 ชั่วโมงต่อสัปดาห์ ความสุขก็เริ่มลดลง

เนื่องจากรูปร่าง “U” นี้ หมายความว่าการถดถอยกำลังสองน่าจะเป็นตัวเลือกที่ดีในการหาความสัมพันธ์ระหว่างตัวแปรทั้งสอง

หากต้องการทำการถดถอยกำลังสองจริงๆ เราสามารถใส่แบบจำลองการถดถอยพหุนามที่มีดีกรี 2 ได้โดยใช้ ฟังก์ชัน numpy.polyfit() :

 import numpy as np

#polynomial fit with degree = 2
model = np.poly1d(np.polyfit(hours, happ, 2))

#add fitted polynomial line to scatterplot
polyline = np.linspace(1, 60, 50)
plt.scatter(hours, happ)
plt.plot(polyline, model(polyline))
plt.show() 

การถดถอยกำลังสองใน Python

เราสามารถหาสมการถดถอยพหุนามพอดีได้โดยการพิมพ์ค่าสัมประสิทธิ์แบบจำลอง:

 print (model)

-0.107x 2 + 7.173x - 30.25

สมการถดถอยกำลังสองพอดีคือ:

ความสุข = -0.107(ชั่วโมง) 2 + 7.173(ชั่วโมง) – 30.25

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

ความสุข = -0.107(30) 2 + 7.173(30) – 30.25 = 88.64 .

นอกจากนี้เรายังสามารถเขียนฟังก์ชันสั้นๆ เพื่อให้ได้ค่า R-squared ของแบบจำลอง ซึ่งเป็นสัดส่วนของความแปรปรวนในตัวแปรตอบสนองที่สามารถอธิบายได้ด้วยตัวแปรทำนาย

 #define function to calculate r-squared
def polyfit(x, y, degree):
    results = {}
    coeffs = np.polyfit(x, y, degree)
    p = np.poly1d(coeffs)
    #calculate r-squared
    yhat = p(x)
    ybar = np.sum(y)/len(y)
    ssreg = np.sum((yhat-ybar)**2)
    sstot = np.sum((y - ybar)**2)
    results['r_squared'] = ssreg / sstot

    return results

#find r-squared of polynomial model with degree = 3
polyfit(hours, happ, 2)

{'r_squared': 0.9092114182131691}

ในตัวอย่างนี้ ค่า R ของโมเดลคือ 0.9092

ซึ่งหมายความว่า 90.92% ของความแปรผันของระดับความสุขที่รายงานสามารถอธิบายได้ด้วยตัวแปรทำนาย

แหล่งข้อมูลเพิ่มเติม

วิธีดำเนินการถดถอยพหุนามใน Python
วิธีดำเนินการถดถอยกำลังสองใน R
วิธีดำเนินการถดถอยกำลังสองใน Excel

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *