การเรียนรู้ของเครื่อง - การทำงานเกี่ยวกับการทำงานเชิงแบบเมทริก

การเรียงเชิงเส้นโพลิโนเมียล (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 แสดงว่าความสัมพันธ์ต่ำ และบอกเราว่าตัวข้อมูลนี้ไม่เหมาะสำหรับการทบทวนทางโพลิโนมิและ