Neural Network with WEKA [Deploy Model]

เมื่อเราได้ Model แล้ว ขั้นตอนต่อไป คือ นำ Model ของเราไปใช้กับข้อมูลจริงๆ ที่อาจจะมาจากแบบสอบถาม, ข้อมูลการรายการซื้อ-ขาย เป็นต้น โดยในที่นี้เราจะมีข้อมูลของกลุ่มตัวอย่างที่ได้จากแบบสอบถาม เพื่อนำมาทำนายว่าพวกเขาเหล่านั้นซื้อจักรยาน หรือไม่ครับ เอกสารประกอบการทำ Workshop นะครับ [wpdm_file id=4] ข้้นตอนการทดสอบง่ายๆ ดังนี้ครับ เตรียมไฟล์ข้อมูลที่ได้ให้เป็น format ที่เหมาะสม คือ ไฟล์ .arff โดยสำหรับ Attribute purchaseBike เราไม่ทราบค่า ให้ใส่เป็น ? เพื่อบอกโปรแกรม ดังรูป นำไฟล์ที่ได้ไปทดสอบตาม Neural Network with WEKA [Deploy Model] โดยทำตามขั้นตอนเฉพาะข้อที่ 1 – 4 ครับ เมื่อทำข้อที่ 3 เสร็จคลิกขวาที่ Model เลือก Visualize Classify error จากนั้นกด save จากนั้นมาเปิดดูด้วย arffViewer เพื่อหา predictedpurchaseBike โดยสังเกตุคอลัมน์ที่ขึ้นต้นด้วยคำว่า predicted ชื่อ attribute โดยเราสามารถดูผลลัพธ์ได้ ดังรูป หากต้องการข้อมูลเพิ่มเติม ก่อนขั้นตอน Re-evaluate model on current test set ให้ทำการเลิอก more option และตั้งค่าเพิ่มเติม ดังรูป เมื่อลองทดสอบข้อมูลอีกครั้ง เราสามารถดูรายละเอียดการทดสอบได้ ลองสังเกตุผลลัพธ์ [YES, NO] กับค่า Probability ดูนะครับ

เปิดไฟล์จาก Visual Studio เวอร์ชั่นสูงๆ ด้วย Visual Studio 2010

Visual Studio

บางครั้ง เราต้องการดูโครงสร้างของโปรแกรมที่ทำด้วย Visual Studio เวอร์ชั่นสูงๆ แต่เรามีเพียงแค่ Visual Studio 2010 เท่านั้น วันนี้ผมมีวิธีแก้ไขค่า Config นิดหน่อยเพียงให้เราสามารถเปิดดูได้ ใช้อ่าน และไล่ Code ดูได้ครับ ส่วนที่ 1 แก้ไข Solution File(.sln)เปิด Solution File ด้วยโปรแกรม Text Editor เช่น Notepad++ จากนั้นแก้ส่วนหัวของ Solution File ส่วนที่ 2 แก้ไข Project File (.csproj หรือ .vbproj)เปิด Project File ด้วยโปรแกรม Text Editor จากนั้นให้แก้ TargetFrameworkVersion ให้เหมาะสม เช่น ถ้าใช้ Microsoft Visual Studio 2010 ให้แก้ TargetFrameworkVersion เป็น 4.0 แทน หมายเหตุ:

Set an alternative Visual Source Safe diff tools

หลายครั้งที่ลองใช้ตัว Diff ไฟล์ของ Visual Source Safe แล้วพบว่ามันห่วยมาก 5555 ทั้งมีปัญหาตัวพิม์เล็ก-ใหญ่ บราๆ วันนี้ผมวิธีการ Set ให้ Visual Source Safe เรียกใช้ Diff Tools ตัวอื่นๆได้ครับ โดยทำตามวิธีการ ดังนี้ Login เข้าโปรแกรม Visual Source Safe ไปที่ Menu Tools >> Options เลื่อนไปหา Tab “Custom Editors” จากนั้นกำหนดค่า ดังนี้ Operation: เลือกเป็น File Difference File Extension: กำหนดเป็น “.*” (ไม่ต้องใส่เครื่องหมายคำพูด) โดยค่าที่กำหนดนี้ หมายถึง ไฟล์ทุกนามสกุล Command Line: Path ที่ใช้เรียกตัว Diff Tools ตัวอื่นขึ้นมา โดยผมได้ลอง 2 โปรแกรม ดังนี้ ถ้าเป็นโปรแกรม WinMerge ให้กำหนดค่า ดังนี้ C:\Program Files\WinMerge\WinMergeU.exe /e /x /wl /wr %1 %2 ถ้าเป็นโปรแกรม ProjectDiff ให้กำหนดค่า ดังนี้ C:\Program Files\Totato\ProjectDiff\ProjectDiff.exe -c /t:t %1 %2 /r:”icc|ite|ieol” จากนั้นกด ADD เลยครับ หมายเหตุ: Config นี้ต้องทำในแยกในแต่ละ Visual Source Safe Database ครับ ส่วน Path ของโปรแกรม ถ้าเป็น Windows…

[JAVA] Access Modifier ของ Class/Method แต่ละตัวเหมือน หรือต่างกันอย่างไร

Q: public, private, protect ที่เราใช้ใน Class และ Method ต่างๆ มันเหมือน หรือ แตกต่างกันอย่างไรA: จะแยกตอบที่ละอันตามนี้ เดี๋ยวของเพิ่ม default (เกิดจากการที่เราไมได้กำหนด Access Modifier ให้กับ Class/Method) ลงไปด้วยและกัน- private >> ใช้ได้เฉพาะ class มันเองเท่านั้น- protect >> ใช้ได้เฉพาะ Class แม่(Super Class)กับ Class ลูก(Sub Class) ใช้ได้เท่านั้น- default >> ใช้ได้เฉพาะ Package เดียวกันเท่านั้น- public >> ใช้ได้หมด 

Cohesion VS Coupling

ในชีวิตการทำงานจริง การพัฒนาออกแบบ Software ระบบหนึ่งขึ้นมา คงไม่ได้มีเพียง File เดียว หรือ Method Main อย่างเดียวแน่ๆ เหมือนตอนที่เรียนอยู่ในมหาวิทยาลัย โดยการทำงานจริงนั้น เราต้องแบบระบบงาน Software ที่ทำอยู่ออกมาเป็น Module หรือ Component ต่างๆ และท้ายที่สุดได้ Class Diagram แต่เมื่อออกแบบเสร็จแล้ว เราจะมั่นใจได้อย่างไรว่า Code ที่เราออกแบบนั้น ไม่มีการทำงานที่ซับซ้อน หรือมีโครงสร้างที่ซับซ้อนมากเกินไป จนทำให้ในอนาคตเมื่อมีการแก้ไข Code นั้นแล้วอาจจะทำให้กระทบไปทั้งระบบ แล้วเราจะมีวิธีจัดการอย่างไงให้สามารถลดความซับซ้อนของระบบได้ ผมขอแนะนำแนวคิด 2C ได้แก่ Cohesion และ Coupling (ลองดูรูป ด้านล่างครับ อยากได้แบบไหนดี) Cohesion คือ อะไร ? Cohesion คือ การบอกถึงความสอดคล้องกันของการทำงานในหน่วยใดๆ เช่น ถ้าเรามองในมุมของ Coding ในระดับ Class ความสอดคล้องกันของ Class นั้น หมายถึง Method การทำงานต่างๆที่ควรจะเป็นไปในทางเดียวกัน เช่น แล้วทำไมเราต้องทำให้เกิดความสอดคล้อง (Cohesion) หละ ? เพราะ เราต้องการจัดกลุ่มของการทำงานให้เป็นหมวดเดียวกัน ให้อยู่ใน Class เพื่อให้ง่ายต่อการ Maintain และการเพิ่มเติมการทำงานในอนาคต ลองมองง่ายๆ ถ้า Code Export Excel (.CSV) มันมีการทำงานกระจายไปหมดทุก Module ถ้าเปลี่ยน Requirement ที = งานเข้า ชนิดของ Cohesion จากแย่ที่สุด ไป ดีที่สุด ระบบที่ดีความออกแบบให้มี Cohesion สูง (งานที่เหมือนกัน ควรอยู่ในกลุ่มเดียวกัน) Coupling คือ อะไร ? Coupling…

FizzBuzz Problem without if (ปัจฉิมบท)

FizzBuzz With Out If Part 2 (AI Generate Image via Bing AI)

จากบทความที่แล้ว แสดงวิธีการเขียน Code กับโจทย์ปัญหา FizzBuzz โดยไม่ใช่ IF กันแล้วนะครับ แต่ผมยังทิ้งท้ายไว้อีกปัญหานึง คือ ถ้ามีเงื่อนไขเพิ่มขึ้นมาหละ โดยให้แสดง WOOF ้เพิ่ม ถ้าตัวเลขนั้นหาร 7 ได้ลงตัว (อ้างอิงจาก WIKI FIZZ BUZZ WOOF ) เราจะมีวิธีการแก้ปัญหาอย่างไรนะครับ โดยผมขอทวนวิธีการที่ใช้แก้ปัญหาใน Blog ตอนที่แล้วก่อนนะครับ

FizzBuzz Problem without if (ปฐมบท)

FizzBuzz With Out If Part 1 (AI Generate Image via Bing AI)

จากบทความที่แล้ว FizzBuzz Problem ไปนะครับ ต่อไปผมลอง Refactor Code อีกรอบ โดยมีเงื่อนไขว่าห้ามใช้ IF ในส่วนของ Logic Fizz และ Buzz ทำไมถึงต้องห้ามใช้ IF เพราะ การใช้ IF ส่งผลให้เกิดความมักง่ายของ Developer ทำให้เกิดปัญหาในการแก้ไข หรือพัฒนา Module เพิ่มเติม ต้องไปแก้ Code จนเกินความจำเป็น และทำให้เกิด Defect(ฺBug) เพิ่มขึ้นด้วย ซึ่งมีแนวคิดทางวิชาการมาสนันสนุนแนวคิดนี้อย่าง The Open Close Principle (OCP) และ High Coupling & Low Cohesion (สามารถอ่านเพิ่มเติมได้ใน Blog ผมครับ ^__^) หลังจากรู้ที่มาคร่าวๆแล้ว เรามาลองทำ FizzBuzz โดยไม่ใช้ IF กันนะครับ

FizzBuzz Problem

FizzBuzz Intro (AI Generate Image via Bing AI)
FizzBuzz เป็นโจทย์ฝึกสมองเด็ก ที่ใช้ช่วยในการเรียนรู้เรื่องการหาร ซึ่งสามารถไปอ่านกฏเพิ่มเติมได้จากใน WIKI: FIZZBUZZ ครับ แต่บทความนี้ผมขอนำกฏของ FizzBuzz มาประยุกต์กับการเขียนโปรแกรม

[Report] Logic ผิด หรือเราไม่รู้ การทำงานของมัน

วันนี้ได้ไปช่วยพี่ที่ทำงานมา ซึ่งตัวรายงานมี Layout ดังนี้ (ขอเบลอรูปนิดนึง 55) โดยโจทย์มีอยู่ว่า ชื่อของรายงาน @ReportName(หมายเลข 1 ในรูป) ขึ้นอยู่ผลรวม(SUM) ของ field #SumNetAmountGrandTotal(หมายเลข 2 ในรูป) โดยมีเงื่อนไข ดังนี้ ซึ่งในตัว Crystal Report เราสามารถเขียน formula เพื่อกำหนดการแสดงผลได้ ดังนี้ แต่เมื่อลองรัน Application และแสดงรายงานดูปรากฏว่า เงื่อนไขที่ได้กำหนดไว้ ไม่ทำงาน แล้วสาเหตุ คือ อะไร ? ลองกลับมาดูการทำงานของ Report กัน ตัว Crystal Report มีการ Render เหมือน Printer หรือถ้าในภาษาขอ Programming คือ Interpreter นี้แหละ เมื่อเรารู้ Consept การทำงานของการสร้าง Report แล้ว วกกลับมาดูที่ Layout ของ Report พบว่าส่วนของ @ReportName(หมายเลข 1 ในรูป) ถูกทำงานก่อนที่ระบบหาค่า #SumNetAmountGrandTotal(หมายเลข 2 ในรูป) ที่ถูกรวม (SUM) ก่อนอีก ? รู้สาเหตุแล้ว แก้ปัญหาอย่างไร ? เมื่อเข้าใจการทำงานของ Report ที่ทำงานจากบนลงล่างแบบ printer ดังนั้น วิธีแก้ คือ ต้องหาผลรวม(SUM) field #SumNetAmountGrandTotal ก่อนเข้าเงื่อนไข โดยแก้ไข formula ดังนี้ หมายเหตุ: จริงๆวิธีแก้ไขกับปัญหานี้มีได้หลายแบบ แต่ที่ผู้เขียนได้ยกตัวอย่างมา เพื่อให้ผู้อ่านได้เข้าใจ Consept การทำงานของ Report Writer แบบต่างๆ ซึ่งไม่จำเป็นต้องเป็น Crystal Report อย่างเดียวครับ…