ทำงานด้วยการเรียนรู้คอมพิวเตอร์ - การทำงานเชื่อมโยง

กลับสู่ต้นตอ

เมื่อคุณพยายามหาความสัมพันธ์ระหว่างตัวแปร คุณจะใช้วลีคำว่า

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

การทำลายทางเลข

การทำลายทางเลขใช้ความสัมพันธ์ระหว่างจุดข้อมูลเพื่อวาดเส้นตรงที่เหมือนกับทุกจุดข้อมูล

การทำลายทางเลขใช้ความสัมพันธ์ระหว่างจุดข้อมูลในการวาดเส้นตรงที่เหมือนกับทุกจุดข้อมูล


เส้นนี้สามารถใช้ในการทำนายค่าในอนาคต

ในการเรียนรู้ทางเครื่อง การทำนายอนาคตมีความสำคัญมาก

หลักการทำงาน

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