ทำงานด้วยการเรียนรู้ - การฝึก/การทดสอบ

การประเมินโมเดล

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

เพื่อวัดว่าโมเดลมีความเหมาะสมเพียงพอหรือไม่ เราสามารถใช้วิธีที่เรียกว่าฝึก/ทดสอบ

อะไรคือฝึก/ทดสอบ

ฝึก/ทดสอบเป็นวิธีที่ใช้วัดความเหมาะสมของโมเดล

เรียกว่าฝึก/ทดสอบเพราะเราแบ่งตัวข้อมูลเป็นสองกลุ่ม: ตัวข้อมูลฝึกและตัวข้อมูลทดสอบ

80% ใช้ฝึก 20% ใช้ทดสอบ

คุณสามารถใช้ตัวข้อมูลฝึกเพื่อฝึกโมเดล

คุณสามารถใช้ตัวข้อมูลทดสอบเพื่อทดสอบโมเดล

การฝึกโมเดลหมายถึงการสร้างโมเดล

การทดสอบโมเดลหมายถึงการทดสอบความเหมาะสมของโมเดล

เริ่มจากตัวข้อมูล

เริ่มจากตัวข้อมูลที่ต้องทดสอบ

ข้อมูลของเราแสดงให้เห็น 100 ลูกค้าในร้านค้าและประสงค์การซื้อของพวกเขา

ตัวอย่าง

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
plt.scatter(x, y)
plt.show()

ผลลัพธ์:

ตัวสิ้นสุดแบบโครงสร้างแสดงเวลาก่อนการซื้อ

ตัวเริ่มต้นแบบโครงสร้างแสดงค่าเงินที่มีค่าใช้จ่าย


ปฏิบัติตัวอย่าง

การแบ่งชุดฝึก/ทดสอบ

ชุดฝึกควรเป็นการเลือกสุ่ม 80% ของข้อมูลต้นตอ

ชุดทดสอบควรเป็น 20% ของข้อมูลต้นตอ

train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]

แสดงชุดฝึก

แสดงกราฟจากชุดทดสอบที่เหมือนกับชุดฝึก

ตัวอย่าง

plt.scatter(train_x, train_y)
plt.show()

ผลลัพธ์:

มันดูเหมือนข้อมูลต้นตอ ดังนั้นน่าจะเป็นทางเลือกที่เหมาะสม


ปฏิบัติตัวอย่าง

แสดงชุดทดสอบ

เพื่อให้มั่นใจว่าชุดทดสอบไม่ได้แตกต่างจากข้อมูลต้นตอ พวกเรายังต้องดูชุดทดสอบ

ตัวอย่าง

plt.scatter(test_x, test_y)
plt.show()

ผลลัพธ์:

ชุดทดสอบดูเหมือนข้อมูลตัวอย่างต้นตอ


ปฏิบัติตัวอย่าง

การทำงานข้อมูลตัวอย่าง

ข้อมูลตัวอย่างเหมือนไร? ฉันคิดว่าการทำงานที่เหมาะสมที่สุดคือการทำงานโปรแกรมความรู้เลขเบส ดังนั้น ขอให้เราวาดเส้นโปรแกรมความรู้เลขเบส

เพื่อวาดเส้นผ่านข้อมูลจากข้อมูลตัวอย่าง พวกเราใช้มอดูล matplotlib plott() วิธี:

ตัวอย่าง

วาดแบบโครงสร้างที่ผ่านข้อมูลตัวอย่าง

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
myline = numpy.linspace(0, 6, 100)
plt.scatter(train_x, train_y)
plt.plot(myline, mymodel(myline))
plt.show()

ผลลัพธ์:


ปฏิบัติตัวอย่าง

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

แต่อะไรคือ R-squared score มันแสดงให้เห็นว่าข้อมูลของฉันมีความสอดคล้องกับโมเดลได้ดีหรือไม่

R2

คุณจำไหม R2 หรือที่เรียกว่า R square (R-squared) หรือไม่

มันวัดความสัมพันธ์ระหว่างตัวเริ่มต้นและตัวสิ้นสุดของแบบโครงสร้าง x และ y ในระบบที่มีค่าระหว่าง 0 ถึง 1 โดย 0 หมายถึงไม่มีความสัมพันธ์ และ 1 หมายถึงความสัมพันธ์ที่สมบูรณ์

มอดูล sklearn มีชื่อ rs_score() ของวิธีนี้ วิธีนี้จะช่วยเราหาความสัมพันธ์นี้

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

ตัวอย่าง

ข้อมูลการฝึกของเรามีความสอดคล้องดีเพียงไรในการทำงานเหมือนโมเดลโปรแกรมความรู้เลขเบส

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
r2 = r2_score(train_y, mymodel(train_x))
print(r2)

ปฏิบัติตัวอย่าง

หมายเหตุ:ผลลัพธ์ 0.799 แสดงว่าความสัมพันธ์ดี

การนำเข้าชุดทดสอบ

ตอนนี้ อย่างน้อยที่แน่นอนว่าในข้อมูลการฝึก พวกเราได้สร้างโมเดลที่ดีขึ้น

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

ตัวอย่าง

จะต้องการที่จะระบุค่า R2 ในขณะที่ใช้ข้อมูลทดสอบมากันหรือ

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
r2 = r2_score(test_y, mymodel(test_x))
print(r2)

ปฏิบัติตัวอย่าง

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

ค่าทำนาย

เราได้ทบทวนแล้วว่าโมเดลของเราดี จึงสามารถเริ่มทำการทำนายค่าใหม่ได้แล้ว。

ตัวอย่าง

หากลูกค้าที่ซื้อหาเชื่อมโยงอยู่ในร้านเป็นเวลา 5 นาที,เขา/เธอจะมีค่าใช้จ่ายเท่าไหร่?

print(mymodel(5))

ปฏิบัติตัวอย่าง

ตัวอย่างนี้คาดการณ์ว่าลูกค้าจะมีค่าใช้จ่าย 22.88 ดอลลาร์สหรัฐ,ดูเหมือนจะตรงกับกราฟนี้: