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

วิธีทำงาน
Python มีวิธีหลายอย่างที่จะหาความเกี่ยวข้องระหว่างจุดข้อมูลและวาดเส้นประกาศทรรศน์ จะแสดงให้เห็นว่าเราจะใช้วิธีเหล่านี้แทนที่จะผ่านการทำนายด้วยสูตรทาง matematical
ในตัวอย่างนี้ เราลงทะเบียนรถที่ผ่านไปที่ช่องขายค่ายอดที่เฉพาะ 18 คัน
เราได้บันทึกความเร็วของรถและเวลาที่ผ่านไป (ชั่วโมง)
ตัวแปร x แสดงเวลาของชั่วโมงในวัน และตัวแปร y แสดงความเร็ว:
ตัวอย่าง
เริ่มจากการวาดกราฟจุดเริ่มต้น:
import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] plt.scatter(x, y) plt.show()
ผลลัพธ์:

ตัวอย่าง
นำเข้า numpy
และ matplotlib
แล้ววาดเส้นประกาศทรรศน์:
import numpy import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(1, 22, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
ผลลัพธ์:

ช่วงทางอินแบร์และชาติภาพ
นำมอดูลที่จำเป็นเข้ามา:
import numpy import matplotlib.pyplot as plt
สร้างตัวแปรเพื่อรับค่าของตัวแปร x และ y ของแกน
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
NumPy มีวิธีที่จะให้เราสร้างโมเดลประกาศทรรศน์:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
เลยกำหนดวิธีการแสดงของบรรทัด จากตำแหน่ง 1 ถึงตำแหน่ง 22
myline = numpy.linspace(1, 22, 100)
วาดกราฟจุดเริ่มต้น:
plt.scatter(x, y)
วาดเส้นประกาศทรรศน์:
plt.plot(myline, mymodel(myline))
แสดงกราฟ:
plt.show()
R-Squared
สำคัญที่จะรู้ความดีของความเกี่ยวข้องระหว่างค่าของตัวแปร x และ y ที่ไหน ถ้าไม่มีความเกี่ยวข้อง ประกาศทรรศน์ไม่สามารถใช้ทำนายอะไรได้
ความเกี่ยวข้องระหว่างค่าของตัวแปร x และ y จะถูกวัดด้วยค่าที่เรียกว่า r-squared (r-squared)
สเปลล์ของ r-squared อยู่ในลำดับ 0 ถึง 1 ที่ 0 หมายถึงไม่มีความเกี่ยวข้อง และ 1 หมายถึงความเกี่ยวข้องที่เต็ม 100%
Python และมอดูล Sklearn จะคำนวณค่านี้ให้คุณ สิ่งที่คุณต้องทำคือเพิ่มตัวแปร x และ y ในลิสต์
ตัวอย่าง
การตัดจับของข้อมูลของฉันในการทำนายโดยประกาศทรรศน์มีแนวโน้มเท่าไหร่?
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
หมายเหตุ:ค่า 0.94 ระบุว่ามีความเกี่ยวข้องที่ดี และเราสามารถใช้ประกาศทรรศน์ในการทำนายในอนาคตได้
ทำนายค่าในอนาคต
ตอนนี้ เราสามารถใช้ข้อมูลที่ได้รับมาทำนายค่าในอนาคตได้
เช่น ลองทำนายความเร็วของรถที่ผ่านไปที่ช่องขายค่ายอดประมาณเวลา 17 โมงเย็น:
สำหรับเรื่องนี้ เราต้องใช้ตัวอย่างที่เหมือนกันกับตัวอย่างที่แสดงด้านบน mymodel ตัวแปร:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
ตัวอย่าง
ทำนายความเร็วของรถที่ผ่านไปที่เวลา 17 โมงบ่าย:
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) speed = mymodel(17) print(speed)
ความเร็วที่ทำนายโดยเทคนิคประกาศทรรศน์ คือ 88.87 และเราก็สามารถเห็นได้ในกราฟด้วย:

การตัดจับที่แย่?
เราจะทำตัวอย่างหนึ่งที่การใช้การทำนายโดยเทคนิคประกาศทรรศน์ไม่ใช่วิธีที่ดีที่สุดในการทำนายค่าในอนาคต
ตัวอย่าง
ค่าของตัวเลขบนแบบจำลอง x และ y จะทำให้ความเหมาะสมของการทบทวนโพลิโนมิต่ำมากมาย
import numpy import matplotlib.pyplot as plt x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(2, 95, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
ผลลัพธ์:

ค่า r-squared คืออะไร?
ตัวอย่าง
คุณควรได้รับค่า r-squared ที่ต่ำมาก
import numpy from sklearn.metrics import r2_score x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
ผลลัพธ์: 0.00995 แสดงว่าความสัมพันธ์ต่ำ และบอกเราว่าตัวข้อมูลนี้ไม่เหมาะสำหรับการทบทวนทางโพลิโนมิและ
- หน้าก่อน การทบทวนทางเชิงเส้น
- หน้าต่อไป การทบทวนทางเชิงกลยุทธ์