การเตรียมข้อมูลสำหรับแมชชีนเลิร์นนิงใน Python
โมเดลแมชชีนเลิร์นนิงเรียนรู้จากตัวเลข และเรียนรู้ได้ดีขึ้นเมื่อฟีเจอร์มีสเกลใกล้เคียงกัน การทำ normalization และ standardization ช่วยปรับสเกลข้อมูล ส่วนการคูณเมทริกซ์คือวิธีที่โมเดลรวมฟีเจอร์จำนวนมากพร้อมกัน
แนวคิดแบบเข้าใจง่าย
โมเดลแมชชีนเลิร์นนิงเรียนรู้จากตัวเลข และเรียนรู้ได้ดีขึ้นเมื่อฟีเจอร์มีสเกลใกล้เคียงกัน การทำ normalization และ standardization ช่วยปรับสเกลข้อมูล ส่วนการคูณเมทริกซ์คือวิธีที่โมเดลรวมฟีเจอร์จำนวนมากพร้อมกัน
ปรับสเกลฟีเจอร์ด้วย min-max normalization และ z-score standardization และคูณเมทริกซ์ด้วยมือ
ประเด็นสำคัญ
- ฟีเจอร์ที่มีสเกลต่างกันมากจะทำให้ตัวเลขใหญ่ครอบงำโมเดล
- min-max เก็บค่าไว้ระหว่าง 0 ถึง 1 ส่วน z-score คงรูปการกระจายไว้แต่ย้ายจุดกึ่งกลางไปที่ 0
- คำนวณค่าสำหรับปรับสเกลจากข้อมูลฝึก แล้วใช้ค่าเดิมกับข้อมูลใหม่
- การคูณเมทริกซ์ A × B ต้องให้จำนวนคอลัมน์ของ A เท่ากับจำนวนแถวของ B
ควรใช้เมื่อใด?
- เข้าใจสิ่งที่เกิดขึ้นภายในโครงข่ายประสาทเทียมและไลบรารี AI
- เข้าใจแนวคิดก่อนลงมือเขียนเองในโจทย์ที่เกี่ยวข้อง
- เตรียมตัวสำหรับคอร์สแมชชีนเลิร์นนิง การสัมภาษณ์งาน และโปรเจกต์
ลองดูการทำงานจริง
ลาก x5 เพื่อสร้างค่าผิดปกติ แล้วเปรียบเทียบว่า min-max และ z-score ตอบสนองอย่างไร ชี้ที่ช่องของ A·B เพื่อดูว่าใช้แถวและคอลัมน์ใด
โค้ดตัวอย่าง
import statistics
heights = [150, 160, 170, 180, 190]
# Min-max scaling squeezes values into the range 0..1.
low, high = min(heights), max(heights)
print("min-max:", [round((h - low) / (high - low), 2) for h in heights])
# Z-score standardization centres values on 0 with a spread of 1.
mean = statistics.mean(heights)
std = statistics.pstdev(heights)
print("z-scores:", [round((h - mean) / std, 2) for h in heights])
# Matrix multiplication: each output is a row of A dotted with a column of B.
A = [[1, 2], [3, 4]]
B = [[5, 6], [7, 8]]
product = [[sum(A[i][k] * B[k][j] for k in range(2)) for j in range(2)] for i in range(2)]
print("A x B:", product)
ผลลัพธ์ที่คาดหวัง
min-max: [0.0, 0.25, 0.5, 0.75, 1.0]
z-scores: [-1.41, -0.71, 0.0, 0.71, 1.41]
A x B: [[19, 22], [43, 50]]
หลักการทำงาน
การปรับสเกลแบบ min-max ทำให้ส่วนสูงที่น้อยที่สุดเป็น 0 และมากที่สุดเป็น 1 ส่วน z-score ลบค่าเฉลี่ยแล้วหารด้วยส่วนเบี่ยงเบนมาตรฐาน ค่าจึงกระจายรอบ 0 ในผลคูณเมทริกซ์ แต่ละช่องคือแถวของ A คูณกับคอลัมน์ของ B ทีละตัวแล้วรวมกัน
เปลี่ยนค่าและรันโปรแกรมด้วย คอมไพเลอร์ Python ออนไลน์ของ CodeUtility โดยไม่ต้องติดตั้ง Python
แบบฝึกหัด
ลองเปลี่ยน input และทดสอบกรณีขอบก่อนใช้ชุดข้อมูลที่ใหญ่ขึ้น
- เปลี่ยนอินพุตหรือน้ำหนัก แล้วลองทายผลลัพธ์ก่อนรัน
- พิมพ์ค่าระหว่างทางออกมาเพื่อดูการคำนวณทีละขั้น
- แก้โจทย์ที่ลิงก์ไว้ด้านล่างเพื่อเขียนแนวคิดนี้ด้วยตัวเอง
ฝึกด้วยโจทย์
ใช้สิ่งที่เรียนในบทนี้แก้ปัญหาจริง ทุกโจทย์รันในเบราว์เซอร์ พร้อมการทดสอบทันทีและรีวิวจาก AI
- การคูณเมทริกซ์ คูณเมทริกซ์สองตัว ซึ่งเป็นการคำนวณเบื้องหลังทุกเลเยอร์ของโครงข่ายประสาทเทียม ง่าย
- การปรับสเกลแบบ min-max ปรับสเกลฟีเจอร์ให้ค่าที่น้อยที่สุดเป็น 0 และค่าที่มากที่สุดเป็น 1 ง่าย
- การปรับมาตรฐานด้วย z-score ทำให้ฟีเจอร์มีค่าเฉลี่ย 0 และส่วนเบี่ยงเบนมาตรฐาน 1 ง่าย