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

เส้นนี้สามารถใช้ในการทำนายค่าในอนาคต
ในการเรียนรู้ทางเครื่อง การทำนายอนาคตมีความสำคัญมาก
หลักการทำงาน
Python มีวิธีหลายที่ใช้สำหรับการหาความสัมพันธ์ระหว่างจุดข้อมูลและวาดเส้นทางที่ทำลายทางเลข พวกเราจะแสดงว่าจะใช้วิธีเหล่านี้แทนการใช้ทฤษฎีทางคณิตศาสตร์
ตัวอย่าง
ในตัวอย่างด้านล่างนี้ ตัวแปร x แสดงถึงอายุรถยนต์ และตัวแปร y แสดงถึงความเร็ว พวกเราได้บันทึกอายุและความเร็วของรถยนต์ 13 คันที่ผ่านทางจุดชำระเงินค่าจ้าง พวกเราจะดูว่าข้อมูลที่เราเก็บมาสามารถใช้ในการทำลายทางเลขได้หรือไม่
import matplotlib.pyplot as plt x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] plt.scatter(x, y) plt.show()
ผลลัพธ์:

ตัวอย่าง
นำ scipy
และวาดเส้นทางที่ทำลายทางเลข
import matplotlib.pyplot as plt from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): return slope * x + intercept mymodel = list(map(myfunc, x)) plt.scatter(x, y) plt.plot(x, mymodel) plt.show()
ผลลัพธ์:

ตัวอย่างที่ชี้แจง
นำโมดูลที่จำเป็น
import matplotlib.pyplot as plt from scipy import stats
สร้างตัวแปรที่แสดงค่าของตัวแปร x และ y
x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
ทำการเรียกใช้วิธีหนึ่ง ซึ่งจะกลับค่าของการทำลายทางเลขบางข้อสำคัญ
slope, intercept, r, p, std_err = stats.linregress(x, y)
สร้างตัวแปรที่ใช้ slope
และ intercept
ฟังก์ชันค่าของค่ากลับสร้างค่าใหม่ ค่าใหม่นี้แสดงว่าตัวแปร x ที่เท่ากับค่านี้จะถูกจัดที่ตำแหน่งใดบนตัวแปร y
def myfunc(x): return slope * x + intercept
ทำงานด้วยฟังก์ชัน ค่าทุกของตัวแปร x ในแบบแบ่งเรียงตามตำแหน่ง จะสร้างแบบแบ่งเรียงตามตำแหน่งใหม่ ที่มีค่าใหม่ในตัวแปร y
mymodel = list(map(myfunc, x))
วาดจุดตามแบบแบ่งเรียงตามตำแหน่ง
plt.scatter(x, y)
วาดเส้นทางที่ทำลายทางเลข
plt.plot(x, mymodel)
แสดงกราฟ:
plt.show()
R-Squared
สำคัญที่จะต้องรู้ความดีของความสัมพันธ์ระหว่างค่าของตัวแปร x และ y ของตัวแปร y ถ้าไม่มีความสัมพันธ์ การทำลายทางเลขจะไม่สามารถใช้ในการทำนายอะไร
ความสัมพันธ์นี้ถูกวัดด้วยค่าที่เรียกว่า r-squared (r-squared)
ระดับของ r-squared อยู่ในขอบเขต 0 ถึง 1 โดย 0 หมายถึงไม่มีความเกี่ยวข้อง และ 1 หมายถึง 100% มีความเกี่ยวข้อง
Python และโมดูล Scipy จะคำนวณค่านี้ให้คุณ สิ่งที่คุณต้องทำคือจัดการค่า x และ y ให้เข้าไปในโมดูล
ตัวอย่าง
ข้อมูลของฉันมีความเหมาะสมด้วยการทำลายทางเลขอย่างไร?
from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) print(r)
หมายเหตุ:ค่า -0.76 แสดงว่ามีความสัมพันธ์บางอย่าง แต่ไม่ใช่ความสัมพันธ์สมบูรณ์ แต่มันแสดงว่าเราสามารถใช้การทำลายทางเลขในการทำนายในอนาคต
ทำนายค่าในอนาคต
ตอนนี้ เราสามารถใช้ข้อมูลที่เก็บมาทำนายค่าในอนาคตได้
เช่น ให้เราพยายามทำนายความเร็วของรถยนต์ที่มีอายุ 10 ปี
สำหรับเรื่องนี้ เราต้องใช้รายละเอียดที่เหมือนกันกับตัวอย่างที่แล้ว myfunc()
ฟังก์ชัน:
def myfunc(x): return slope * x + intercept
ตัวอย่าง
ทำนายความเร็วของรถยนต์ที่มีอายุ 10 ปี
from scipy import stats x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,111,86,103,87,94,78,77,85,86] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): return slope * x + intercept speed = myfunc(10) print(speed)
ความเร็วที่ทำนายได้คือ 85.6 และเรายังสามารถอ่านจากกราฟด้วย

ความเหมาะสมที่ย่ำแย่?
ให้เราสร้างตัวอย่าง โดยที่การทำลายทางเลขที่สองไม่ใช่วิธีที่ดีที่สุดในการทำนายค่าในอนาคต
ตัวอย่าง
ค่าของ x และ y ของแกนนี้จะทำให้ความเหมาะสมของการทดสอบเชิงเส้นทางเลวร้ายมาก
import matplotlib.pyplot as plt from scipy import stats 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] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): return slope * x + intercept mymodel = list(map(myfunc, x)) plt.scatter(x, y) plt.plot(x, mymodel) plt.show()
ผลลัพธ์:

และค่า r-squared?
ตัวอย่าง
คุณควรได้รับค่า r-squared ที่ต่ำมาก
import numpy from scipy import stats 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] slope, intercept, r, p, std_err = stats.linregress(x, y) print(r)
ผลลัพธ์: 0.013 แสดงว่าความสัมพันธ์แย่ และบอกเราว่าคลังข้อมูลนี้ไม่เหมาะสำหรับการทดสอบเชิงเส้นทาง
- หน้าก่อน กราฟจุด
- หน้าต่อไป การทดสอบเชิงเส้นทาง