01204435/haskell2
เราจะอิมพลีเมนท์ Perceptron algorithm แบบง่าย (ข้อมูลมี 2 มิติ) บน Haskell
- อ่านรายละเอียดของ Perceptron algorithm
- อ่านรายละเอียดของแฟ้มข้อมูลทดสอบ: การทดลองเกี่ยวกับ perceptron
เราจะนิยามชนิดข้อมูล Vector เพื่อความสะดวกต่อไป
type Vector = (Double, Double)
เนื้อหา
ฟังก์ชันเกี่ยวกับเวกเตอร์
จริง ๆ แล้ว Haskell มีไลบรารีเกี่ยวกับเวกเตอร์ (ดู [1]) แต่เราจะเขียนเองเพื่อความง่ายและสะดวก
ด้านล่างเป็น type ของฟังก์ชัน dot (คำนวณ dot product), addVector และ negVector และตัวอย่าง
dot :: Vector -> Vector -> Double
ตัวอย่างฟังก์ชัน dot
*Main> dot (1,0) (1,0) 1.0 *Main> dot (1,0) (0,1) 0.0 *Main> dot (1,0.5) (0,1) 0.5 *Main> dot (1,0.5) (-1,2) 0.0
addVector :: Vector -> Vector -> Vector
ตัวอย่างฟังก์ชัน addVector
*Main> addVector (1,2) (3,-4) (4,-2)
negVector :: Vector -> Vector
ตัวอย่างฟังก์ชัน negVector
*Main> negVector (10,-5) (-10,5)
ทำนาย
1. เขียนฟังก์ชัน
predict :: Vector -> Vector -> Int
ที่รับเวกเตอร์ w และ x จากนั้นคืนผลการทำนาย (เป็น 1 หรือ -1)
ตัวอย่าง
*Main> predict (1,-1) (1,0) 1 *Main> predict (1,-1) (1,-1) 1 *Main> predict (1,-1) (0,1) -1 *Main> predict (1,-1) (-1,1) -1
2. เขียนฟังก์ชัน
predictAll :: Vector -> [Vector] -> [Int]
ที่รับ w และ list xs จากนั้นทำนายข้อมูลทุกตัวใน xs ให้ลองเขียนด้วยฟังก์ชัน map
ตัวอย่าง
*Main> predictAll (1,-1) [(1,0), (1,-1), (0,1), (-1,1)] [1,1,-1,-1]
ฝึกสอนด้วย perceptron algorithm
1. เขียนฟังก์ชัน trainOnce w x z
trainOnce :: Vector -> Vector -> Int -> Vector
ที่รับ weight w, input x และคลาสเฉลย z และคืนค่า weight vector w ใหม่ ตามที่ระบุใน perceptron algorithm
สังเกตว่าถ้า w สามารถจำแนก x ได้ถูกต้อง w จะไม่มีการปรับค่า
2. เขียนฟังก์ชัน train w xs
train :: Vector -> [(Vector,Int)] -> Vector
ตัวอย่าง
*Main> train (0,0) [((1,0),1), ((-1,1),-1), ((0,1),-1), ((1,-1),1)] (1.0,0.0)
ที่รับ weight vector เริ่มต้น และ train ข้อมูลฝึกหัดที่อยู่ใน xs ทั้งหมด
การอ่าน input/output
เราจะเขียนฟังก์ชันที่ประมวลผล input / output โดยที่รับ input เป็นสตริง และคืนผลลัพธ์เป็น weight vector ก่อน จากนั้นเราถึงจะเขียนฟังก์ชันที่อ่านข้อมูลจากไฟล์จริงชื่อ trainFromFile ซึ่งฟังก์ชันดังกล่าวนี้จะมี type พิเศษ