การเรียนรู้ของเครื่อง - รถไฟ/การทดสอบ
ประเมินแบบจำลองของคุณ
ในการเรียนรู้ของเครื่อง เราสร้างแบบจำลองเพื่อคาดการณ์ผลลัพธ์ของเหตุการณ์บางอย่าง เช่นในบทก่อนหน้าที่เราคาดการณ์การปล่อย CO2 ของรถยนต์เมื่อเราทราบน้ำหนักและขนาดเครื่องยนต์
ในการวัดว่าโมเดลนั้นดีพอหรือไม่ เราสามารถใช้วิธีที่เรียกว่า Train/Test
Train/Test คืออะไร
Train/Test คือวิธีการวัดความแม่นยำของแบบจำลองของคุณ
เรียกว่า Train/Test เนื่องจากคุณแบ่งชุดข้อมูลออกเป็นสองชุด: ชุดการฝึกและชุดทดสอบ
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()
ผลลัพธ์:
แกน x หมายถึงจำนวนนาทีก่อนตัดสินใจซื้อ
แกน y หมายถึงจำนวนเงินที่ใช้ไปในการซื้อ
แยกออกเป็นรถไฟ/ทดสอบ
ชุดฝึกอบรมควรสุ่มเลือก 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()
ผลลัพธ์:
ชุดทดสอบยังดูเหมือนชุดข้อมูลดั้งเดิม:
พอดีกับชุดข้อมูล
ชุดข้อมูลมีลักษณะอย่างไร ในความคิดของฉัน ฉันคิดว่าแบบที่เหมาะสมที่สุดคือการถดถอยพหุนามให้เราวาดเส้นของการถดถอยพหุนาม
ในการลากเส้นผ่านจุดข้อมูล เราใช้
plot()
เมธอดของโมดูล matplotlib:
ตัวอย่าง
ลากเส้นถดถอยพหุนามผ่านจุดข้อมูล:
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 ล่ะ? คะแนน R-squared เป็นตัวบ่งชี้ที่ดีว่าชุดข้อมูลของฉันเหมาะสมกับโมเดลได้ดีเพียงใด
R2
จำ R2 หรือที่เรียกว่า R-squared ได้ไหม
มันวัดความสัมพันธ์ระหว่างแกน x กับแกน y และค่าอยู่ในช่วงตั้งแต่ 0 ถึง 1 โดยที่ 0 หมายถึงไม่มีความสัมพันธ์ และ 1 หมายถึงเกี่ยวข้องกันโดยสิ้นเชิง
โมดูล sklearn มีวิธีการที่เรียกr2_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 ดอลลาร์ ซึ่งดูเหมือนว่าจะสอดคล้องกับแผนภาพ: