Command Line in Weka

wasupon duranit
4 min readApr 23, 2018

--

จากครั้งที่แล้ว ครั้งนี้เราก็มาลอง ใช้พวกคำสั่ง CMD ใน Weka กันเถอะ ซึ่งแน่นอน เราก็ต้องลงโปรแกรม Weka กันให้เรียบร้อยก่อนนะครับ

ถ้าพร้อมแล้วก็ไปเริ่มกันเลย

ผมจะให้เตรียมไฟล์ Weka กันก่อนะครับ โดยไฟล์ที่ผมมีเริ่มให้ก็จะเป็นไฟล์ glass.arff สามารถ Dowload กันได้ตามลิงค์ด้านล่างนี้นะครับผม

ที่นี้ถ้ามีไฟล์พร้อมแล้วก็มาเริ่มกันได้เลยครับผม

อันนี้ผมจะสร้าง Folder เปล่าๆๆไว้ที่ Drive D จากนั้นให้เราทำการเอาไฟล์ที่โหลดมานั้นมาไว้ในนี้ครับผม
มันก็จะได้เป็นแบบนี้ครับผม

จากนั้นให้เราไปที่ Folder ที่เราได้ทำการติดตั้ง Weka แล้วให้เราทำการ Copy ตัวที่ชื่อว่า Weka.jar มา เพื่อที่เวลาเราเขียนคำสั่งมันจะทำให้เราย่อไม่ต้องเขียนที่อยู่ของ weka.jar ครับ

อย่างไฟล์ weka.jar ของผมอยู่ที่ Drive C:\Program Files\Weka-3–7 นะครับ ก็ Copy ไปใส่ Folder เราได้เลยครับ
ก็จะมีไฟล์มาเป็นแบบนี้ถูกไหมครับผม จากนั้นเราก็จะเริ่มทำ Command Line กันได้แล้วครับผม

เปิด Program Weka ขึ้นมาเลยครับ

เป็นหน้าตาแบบนี้ใช่ไหมครับ ให้เราเข้าไปที่ Simple CLI เลยครับผม พอเปิดมามันจะได้เป็นหน้าตา Command ขึ้นมาครับผม
พอเปิดมาก็จะได้แบบนี้ถูกไหมครับ ที่่นี้ก็ได้เวลามาลองเล่นกันแล้วครับ

คำสั่งแรกที่ผมแนะนำให้ลองนะครับก็จะเป็น

weka.core.Instances นะครับ

ฟังก์ชั่นนี้จะเป็นการทำงานโดยโชว์พวกค่าของ Instance ทั้งหมดที่เรามีในไฟล์ arff ของเรานะครับผม โดยการเขียนคำสั่งจะเป็นแบบนี้ครับ

java weka.core.Instances ตามด้วยพาทที่อยู่ไฟล์ของ arff ของเราครับ

แบบนี้คำสั่งตามรูปที่ผมใส่เลยนะครับ ลองรันดูสิครับว่าผลลัพท์มันขะเป็นยังไงครับ
ผลลัพทธ์ที่ได้นะครับผม มันก็จะโชว์ออกมาเป็นแบบนี้ครับ บอกว่าเรามีกี่ Attribute และมี Class เท่าไรนะครับ

/*คำสั่งการแปลง csv เป็น arff ตอนผมที่เรียนในห้องและกลับมาลองมันจะมีการติด error และใช้งานได้ไม่สมบูรณ์ครับ จึงไม่ขอแสดงให้ดูนะครับ แต่คำสั่งในการใช้จะอยู่ด้านล่างนี้นะครับ*/

java weka.core.converters.CSVLoader ที่อยู่ของไฟล์ CSV > ที่อยู่ใหม่ของ arff

ต่อไปจะเป็นการใช้งานการให้คำเฉลยแล้ว ที่นี้คำสั่งมันก็จะหลากหลายมาก ผมจะขอลองแค่ไม่กี่คำสั่งนะครับ

อันแรกก็คือ “Classifiers” ผมขอยกมาสองตัวอย่างก็คือ J48(Desitions Tree) และ Neural Network

J48 (Desition Trees)

คำสั่งของมันก็คือ java weka.classifiers.trees.J48 -t ตามด้วยที่อยู่ไฟล์ arff

เรามาลองพิมพ์กันเลยว่ามันจะได้อะไรนะครับ
ยาวๆๆไปป
มันก็จะบอกรายละเอียดเหมือนกับเราทำแบบหน้า GUI เลยครับผม

ถ้าเกิดเราอยากดูว่า สามารถ -อะไรเพิ่มได้อีกสามารถใช้คำสั่ง

เขียนแบบนี้จะเป็นการบอกว่าเราสามารถใส่อะไรไปได้บ้างนะครับ
นี้ก็คือ -ชุดคำสั่งทั้งหมดนะครับ เมื่อกี้อย่างเราใช้ -t เล็กไปก็คือการใช้งาน training set นั้นเองครับ

ต่อไปเป็น Neural Network นะครับ

Neural Network

คำสั่งของมันก็คือ java weka.classifiers.functions.MultilayerPerceptron -t ตามด้วยที่อยู่ไฟล์ arff

มาลองดูกันครับว่าจะได้ผลลัพธ์เป็นแบบไหนกัน (-t อันนี้ก็เหมือนกับด้านบนคือก็คือ training นะครับ)
มันก็จะให้ค่า Node อะไรมาเต็มไปหมดก็ตามนั้นแหละครับ 5555555566

/*-t ในที่นี้คือ training set นะครับผม*/

ต่อไปเป็นเรื่องของ Clustering ผมจะขอยกตัวอย่างการใช้ K-mean มาแล้วกันนะครับ

K-mean Algorithms

คำสั่งที่ใช้เลยนะครับคือ java weka.clusterers.SimpleKMeans -N จำนวนกลุ่มที่เราอยากแบ่ง -t ตามด้วยไฟล์ arff ของเรา

มาดูกันครับผมว่าผลลัพธ์จะเป็นยังไง
ก็จะได้ออกมาเป็นแบบนี้นะครับผม อย่างอันนี้ผมกำหนดให้มันมี 4 กลุ่มมันก็จะแบ่งได้เป็นกลุ่ม 0,1,2,3 นะครับ

ต่อไปจะเป็นเรื่องของ Associations นะครับผม ผมก็ขอยกตัวอย่างจาก Apriori มานะครับผม

Apriori Algorithms

คำสั่งที่ใช้ก็คือ java weka.associations.Apriori -C ค่าที่ต้องการ -M ค่าที่ต้องการ -t แล้วตามด้วยไฟล์ arff

ที่นี้ -C กับ -M คืออะไรกัน ค่านั้นมันก็คือ

— ค่า C นั้นคือค่า minimum confidence ส่วนค่า M นั้นคือค่า minimum support นั้นเอง สำครับคนที่เรียนสาขาเดียวกับผมสามารถทำความเข้าใจเพิ่มได้ในวิชา data mining บทของ Association rules นั้นเองครับ

มาดูกันดีกว่าว่าจะได้ผลลัพธ์แบบไหนออกมา
เตือนแดงเฉยเลย อย่าพึงตกใจครับ

ที่มันแดงแบบนี้ก็เพราะว่า การทำ Apriori นั้นค่านั้นจะต้องเป็น Nominal ซะก่อนนะครับ จะเป็นแบบ Numeric ไม่ได้ ก็จะมีคำสั่งที่เอาไว้ใช้แปลงก็คือ

java weka.filters.unsupervised.attribute.NumericToNominal -i ตามด้วยที่อยู่ไฟล์ที่เราจะเปลี่ยน -o ชื่อใหม่ที่เราอยากจะตั้ง

พิมพ์ไปเลย แล้วลองรัน
มาดูใน Folder เราก็จะเจอไฟล์ใหม่ที่เราสร้างไปเมื่อกี้ เอาละลองเอาคำสั่งเดิมแล้วใช้ไฟล์ที่แปลงมาอันนี้ดู
รอบบนี้มันจะได้ไหมน่าาา
อุ้ยยย รอบนี้ทำงานได้แล้วแหละ จบบหลักสูตร

/* ทุกคำสั่งสามารถใช้ -h เพื่อดูได้นะครับว่ามีอะไรเพิ่มเติมบ้าง */

ในเมื่อเราเองก็พอเข้าใจการใช้แล้วจากนั้น สมมุติว่าเราอยากได้ไฟล์ที่เราทดสอบนั้นไปทำเป็น Model แล้วเราจะทำยังไงละ แน่นอนครับ ทำตามนี้ได้เลยครับผม

ยกตัวอย่างว่าผมจะเอา J48 ตัวนี้ไปทำเป็น model นะครับผม ก็จะเขียนได้เป็นแบบนี้ครับ

java weka.classifiers.trees.J48 -t ชื่อไฟล์ของเรา -x 10 -d ชื่อโมเดลของเรา

ตรงส่วน -x 10 ตรงนี้คือการใช้ Cross-validation แล้วกำหนดให้เป็น 10 นะครับผม เหมือนกับ ตรงนี้เลย

ถ้าเราอยากให้ Folds เป็นเท่าไรเราก็แค่เปลี่ยนเลขกันนะครับ

เอาละไปลองทดสอบคำสั่งกันดีกว่าครับผม

อันนี้ผมกำหนดค่า folds เป็น 10 นะครับ มาดูว่ามันจะทำงานได้หรือเปล่า
แบบนี้ทำงานได้แน่นอน ลองไปดูใน folder เราว่ามีไฟล์ model เพิ่มมาหรือเปล่า
เย้ๆๆ ไฟล์ model เรามาแล้วว

เอาละ เรามาลองกับ Unseen เรากันดีกว่าครับผม

Unseen ตัวนี้ผมนำไฟล์จาก glass.arff มาทำ Unseen นะครับ
การทำ unseen นะครับ ควรจะเขียนคำเฉลยแฝงไปในนี้ให้ครบทุกตัวเพื่อที่จะได้ค่าที่แม่นยำขึ้นนะครับผม

โดยวิธีการทำ unseen คือการทำให้ class(คำเฉลย) นั้นกลายเป็น ? จากนั้นก็ให้เราทำการ save เป็นไฟล์ arff ใหม่นะครับ

แบบนี้นะครับ ของผมก็มีไฟล์ glass_unseen เพิ่มมมาอีกอันแล้ว

พอได้แบบนี้มาแล้วก็ให้มาทดสอบกับ Model เลยครับผม

โดยคำสั่งที่เอาไว้ใช้ในการรัน model ก็คือตามนี้นะครับ

java weka.classifiers.trees.J48 -l ที่อยู่modelของเรา -T ที่อยู่ไฟล์ unseen ของเรา

ส่วนตัว -l คือการ load โมเดลมาใช้นะครับ -T คือการใช้ Test set ในการทำงาน

ส่วนด้านหน้านั้นให้ตรงกับ รูปแบบของไฟล์ที่เราเอามาทำ model เช่น model ทำมาจาก J48 ก็ต้องใช้ J48 เป็นตัวรันนะครับ ใช้ apriori ทำ model ก็ต้องใช้ apriori รันนะครับใช้ตัวอื่นมันจะผิดพลาดได้นะครับ

เราเอามาลองทำกันดีกว่า -l นั้นคือตัวแอลนะครับ
เย้ๆ แบบนี้คือ model เราทำงานได้ปกติ ส่วนค่ามันได้น้อยเพราะผมให้ตัว test ไม่ดีด้วยครับ

เท่านี้ก็เป็นการจบการเรียนเกี่ยวกับ command แล้วนะครับ ต่อไปเรื่องหน้าจะเป็นการใช้ sql ต่อเข้ากับ weka นะครับผม ขอบคุณที่ทนอ่านของผมมาจนจบนะครับ

--

--

No responses yet