Sunday, September 12, 2010

Dr.Bowman's Web Site

A good source of information to build activity based travel demand model

http://jbowman.net/

Friday, September 10, 2010

เคล็ดลับการเซฟไฟล์ภาพจาก MATLAB ไปใช้กับโปรแกรมอื่นๆ

หากเราสร้าง Graph หรือ Figure ใน MATLAB แล้วต้องการเซฟไปใช้กับโปรแกรมอื่นๆให้ภาพออกมาสวยงามทำอย่างไร

ถ้าต้องการให้พิมพ์ (Hard copy) ออกมาสวยงาม ให้เลือก File > Save As แล้วเลือกเป็น EPS ไฟล์
จากนั้นหากต้องการนำไปใช้ใน Word ตัวโปรแกรม Word จะมีตัวเลือกให้ Import ตัว EPS ไฟล์เข้าไปได้

การแสดงผลบนหน้าจอจะไม่ค่อยชัดเจนมากนัก แต่ว่าเวลาพิมพ์ออกมาจะสวยสุดครับ

ข้อมูลเกี่ยวกับ EPS file format หาอ่านได้ใน internet ทั่วไป

Tuesday, September 7, 2010

Traffic Analysis Tools by FHWA

Source of information for traffic analysis tool and traffic simulation.
http://ops.fhwa.dot.gov/trafficanalysistools/

In particular, Volume IV is introduction to CORSIM.

Sunday, September 5, 2010

ปัญหา (เล็กน้อยๆ) ที่อาจเกิดขึ้นจากการทำ Cross Validation กับข้อมูลที่มี Categorical Variables

ถ้าทำ 10-fold Cross Validation มันอาจบังเิอิญได้ว่าตอนที่เราเลือก 90% data มาทำโมเดล แล้วไปทดสอบกับ 10% ที่เหลือนั้น

เจ้า 90% data ที่นำมาสร้างโมเดล หากตัว categorical variable ที่เรานำมาสร้างโมเดลนั้น มันไม่ครอบคลุมทั้งหมด

เช่น ถ้าตัวแปรเป็นสถานะภาพในครอบครัว เช่น ผู้อาศัย แต่ตอนทำโมเดล 90% ไม่มีข้อมูลที่เป็นผู้อาศัยเลย ดังนั้นเวลาเรานำไปทดสอบกับข้อมูล 10% ที่อาจมีข้อมูลที่มีสถานภาพเป็นผู้อาศัย มันก็อาจเกิดข้อผิดพลาดได้ (สำหรับ Classification Tree ใน MATLAB จะขึ้น Error แต่ถ้าเป็นโปรแกรมที่เขียนขึ้นเองอาจไม่ขึ้น error เพราะตัวโค๊ดอาจจะปัดให้เป็น Branch Not in Category เลยแต่ผลที่ได้อาจไม่น่าเชื่อถือ ถ้าจริงๆแล้วมันควรตกอีกด้านหนึ่ง แต่เราไม่ได้มี data ไปสร้างโมเดลให้มัน)

วิธีแก้ไขตอนนี้ยังคิดไม่ออกทั้งหมด แต่ว่าขึ้นกับการสุ่มตัว sample ถ้าสุ่มได้ครอบคลุมก็จะลดปัญหาไปได้ (แต่ในกรณีข้อมูลมีตัวแปร category เยอะ และมีค่าหลากหลาย อาจสุ่มได้ยากกว่า) แต่ถ้ามานั่งเลือกเอง data เยอะๆ คงจะเสียเวลาและ งงๆ อาจต้องอ่านงานวิจัยเพิ่มวิธีการสุ่มให้ครอบคลุม

อีกวิธีหนึ่งที่อาจลดปัญหาได้บ้าง คือการใช้ 5-fold cross classification แทน (80%/20%) มีความน่าจะเป็นที่ปัญหาจะลดลงได้ แต่ก็ไม่รับประกัน (ใน MATLAB ปกติจะเป็น 10-fold)

อีกวิธีที่คิดได้คือเลือกข้อมูลที่เป็น category ย่อย ที่มีจำนวน records น้อย ออกมาก่อนแล้ว assign ให้มันอยู่ในกลุ่ม 90% เสมอ ก็จะไม่เกิดกรณีเจอ unrecognized categorical variable ตอนทดสอบ (แต่ถ้าใช้ MATLAB ต้องทำแบบ manual เพราะโค๊ดมันคงไม่ทำให้ หรือไม่ก็ต้องไปแ้ก้ตัวโค๊ด)

วิธีสุดท้าย อาจไม่ใช้ v-fold cross validation เลย ถ้าคิดว่าข้อมูลเยอะพอ คือเลือกข้อมูลที่ครบถ้วน แล้วทดสอบทีเดียว

สุดท้ายนี้ปัญหานี้จะไม่เกิดขึ้นถ้าเป็น continuous variable เพราะโดยปกติจะแบ่ง Branch ซ้าย-ขวา โดยใช้เครื่องหมายเช่น น้อยกว่าหรือเท่ากับ และมากกว่า ซึ่งจะครอบคลุม Range ของข้อมูลทั้งหมดอยู่แล้ว แต่ก็ยังไม่ป้องกันปัญหาที่อาจจะเกิดจากการไม่ include หรือ neglect ตัวแปรบางตัวที่ไม่ได้มีอยู่ใน 90% data อยู่ดี

คิมครับ ลองเช็คดูว่าโค๊ด Python ของคิม ถ้าเจอกรณีนี้มันจะขึ้น Error หรือไม่อย่างไรครับ