Tuesday, August 31, 2010

วิธีง่ายๆในการแบ่ง Data ออกเป็น k ส่วน

สมมุติว่าเรามีข้อมูลเป็น record อยู่ทั้งหมดจำนวน n records
แล้วเราต้องการแบ่งข้อมูลนี้ออกเป็น k ส่วน

ตัวอย่างเช่น ถ้าเราต้องการทำ V-fold Cross-Validation เช่นต้องการแบ่งข้อมูลจำนวน 2000 ระเบียนออกเป็น 10 ส่วนโดยส่วนหนึ่งเอาไว้สร้าง model กับ อีกส่วนไว้ validate model เป็นต้น

ในกรณีนี้ n = 2000 และ k = 10 เป็นต้น

มีวิธีทำง่ายๆ ใน MATLAB ดังนี้
  1. สร้าง random number ขึ้นมา 2000 ตัวก่อน,   rand(2000,1)
  2. scale up มันด้วย k, rand(2000,1)*k
  3. ปัดตัวเลขขึ้นเป็น integer ถัดไป, ceil(rand(2000,1)*k)
สรุปคำสั่งที่ต้องใช้คือ

ceil(rand(n,1)*k)

ตัวอย่างการแบ่งข้อมูล 10 ระเบียนออกเป็น 3 กลุ่ม

>> ceil(rand(10,1)*3)

ans =

     2
     1
     1
     1
     3
     1
     3
     2
     3
     2


Note: แต่คิดไปคิดมา ถ้าไม่ต้องการ Random ละก็ ให้มัน mod ตัวเลข 1 ถึง n ก็จะได้เหมือนกันครับ
เช่น mod(1:10,3)+1 จะไ้ด้ผลลัพธ์ประมาณนี้ครับ


 2     3     1     2     3     1     2     3     1     2

No comments: