การเรียนรู้ของเครื่องโดยใช้ Python


53

ฉันกำลังพิจารณาที่จะใช้ห้องสมุด Python เพื่อทำการทดลองการเรียนรู้ของเครื่อง จนถึงตอนนี้ฉันพึ่ง WEKA แล้ว แต่ก็ไม่พอใจในภาพรวมทั้งหมด นี่เป็นหลักเพราะฉันพบว่า WEKA ไม่ได้รับการสนับสนุนที่ดี (ตัวอย่างน้อยมากเอกสารน้อยมากและการสนับสนุนจากชุมชนน้อยกว่าที่ต้องการในประสบการณ์ของฉัน) และพบว่าตัวเองตกอยู่ในสถานการณ์ที่ลำบากโดยไม่มีความช่วยเหลือ อีกเหตุผลหนึ่งที่ฉันคิดว่าท่านี้เป็นเพราะฉันชอบ Python จริงๆ (ฉันใหม่กับ Python) และไม่ต้องการกลับไปเขียนโปรแกรมใน Java

ดังนั้นคำถามของฉันคืออะไรเพิ่มเติม

  1. ครอบคลุม
  2. ปรับขนาดได้ (คุณสมบัติ 100k, ตัวอย่าง 10k) และ
  3. ห้องสมุดที่รองรับการทำ ML ใน Python นั้นดีหรือไม่

ฉันสนใจเป็นพิเศษในการจัดหมวดหมู่ข้อความและต้องการใช้ไลบรารีที่มีตัวแยกประเภทที่ดีวิธีการเลือกคุณสมบัติ (Information Gain, Chi-Sqaured ฯลฯ ) และความสามารถในการประมวลผลข้อความล่วงหน้า (การหยุดการลบคำหยุด , tf-idf เป็นต้น)

จากหัวข้ออีเมลที่ผ่านมาที่นี่และที่อื่น ๆ ฉันได้ดู PyML, scikits-learn และ Orange จนถึงตอนนี้ ประสบการณ์ของผู้คนเป็นอย่างไรเมื่อเทียบกับตัวชี้วัด 3 ข้อที่ฉันกล่าวถึง

ข้อเสนอแนะอื่น ๆ ?


ขอบคุณมากสำหรับความคิดเห็นของคุณ ฉันคิดว่าตอนนี้ฉันจะไปกับ NLTK + scikit เรียนรู้และดูว่าสิ่งต่าง ๆ ไป
Andy

1
ฉันไม่สามารถช่วยเสนอให้คุณดูที่Rซึ่งมีวิธีการที่ห้องสมุด ML ที่ใหญ่กว่าและ (ทำโดยเฉพาะสำหรับงานนี้) ให้สภาพแวดล้อมที่เป็นเนื้อเดียวกันมากขึ้น แพคเกจการทำเหมืองข้อความ R ถูกนำเสนอที่นี่

@mbq: ใช่ฉันรู้มากเกี่ยวกับ R แต่เนื่องจากฉันต้องเขียนโปรแกรม "ไม่ใช่สถิติ" มากก่อนที่จะทำการขุดข้อความจริงฉันคิดว่าฉันจะติดกับ Python ในตอนนี้
Andy

1
คุณสามารถใช้ทั้ง Python และ R ตัวเลือกหนึ่งคือใช้วิธีการจัดเก็บข้อมูลที่เป็นกลางภาษาเช่นฐานข้อมูลเพื่อเก็บผลลัพธ์ระหว่างขั้นตอนการประมวลผลข้อมูล
Faheem Mitha

คุณสามารถใช้ Weka จากรหัส Python ของคุณ: dimitri-christodoulou.blogspot.com/2012/03/ …

คำตอบ:


40

เกี่ยวกับตัวเลือก scikit-Learn: คุณสมบัติ 100k (กระจัดกระจาย) และตัวอย่าง 10k มีขนาดเล็กพอที่จะใส่ในหน่วยความจำได้จึงสมบูรณ์แบบด้วย scikit-learn (ขนาดเดียวกับชุดข้อมูล 20 กลุ่มข่าว)

นี่คือบทช่วยสอนที่ฉันมอบให้ที่ PyCon 2011 โดยมีบทเกี่ยวกับการจำแนกข้อความด้วยแบบฝึกหัดและวิธีแก้ปัญหา:

ฉันได้พูดคุยในหัวข้อซึ่งเป็นเวอร์ชันอัปเดตของรุ่นที่ฉันให้ที่ PyCon FR นี่คือสไลด์ (และวิดีโอที่ฝังอยู่ในความคิดเห็น):

สำหรับการเลือกคุณสมบัติให้ดูที่คำตอบนี้ในโควราที่ตัวอย่างทั้งหมดจะขึ้นอยู่กับเอกสาร scikit เรียนรู้:

เรายังไม่มีการแยกฟีเจอร์การจัดกลุ่มใน scikit เรียนรู้ ใช้ nltk และ nltk-trainer เพื่อทำสิ่งนี้ในเวลาเฉลี่ย:


ขอบคุณ นี่เป็นหนทางที่ดีในการไปข้างหน้า ฉันจะลอง
Andy

@ogrisel, บางลิงค์เน่ากับสามลิงค์แรก (วิดีโอในลิงค์สี่หายไป) นี่คือลิงค์ไปยังโดเมน Scikit ใหม่scikit-learn.org
xtian

14

ในแง่ของการทำงานกับข้อความลองดูที่ NLTK ได้รับการสนับสนุนและจัดทำเอกสารเป็นอย่างดี (มีแม้กระทั่งหนังสือออนไลน์หรือในกระดาษหากคุณต้องการ) และจะทำการประมวลผลล่วงหน้าตามที่คุณต้องการ คุณอาจพบว่า Gensim มีประโยชน์เช่นกัน ความสำคัญอยู่ที่การสร้างแบบจำลองเวกเตอร์สเปซและมีการใช้งานที่ปรับขนาดได้ของ LSI และ LDA (pLSI เช่นกันฉันคิดว่า) ถ้าสิ่งเหล่านั้นเป็นที่สนใจ มันจะทำการเลือกโดย tf-idf - ฉันไม่แน่ใจว่า NLTK ทำเช่นนั้น ฉันใช้ชิ้นส่วนเหล่านี้กับ corpora ที่ ~ 50k โดยไม่ลำบากมาก

NLTK: http://www.nltk.org/

Gensim: http://nlp.fi.muni.cz/projekty/gensim/

น่าเสียดายที่คำถามหลักของคุณฉันไม่คุ้นเคยกับห้องสมุดเฉพาะที่คุณอ้างอิง (ถึงแม้ว่าฉันเคยใช้บิตของการเรียนรู้มาก่อน)


3
+1 สำหรับ NLTK Olivier Grisel ผู้ทำวิจัยการเรียนรู้ด้วยเครื่องจักรและการประมวลผลภาษาธรรมชาติมีบทเรียนและสไลด์รอบ ๆ ที่ดี ฉันสามารถนึกถึงการเรียนรู้เชิงสถิติและการจำแนกข้อความด้วย NLTK และ scikit- Learn (PyCON FR 2010) เป็นต้น
chl

@chi ขอบคุณสำหรับการกวดวิชานั้นฉันได้รับการกระตุ้นรอบเล็กน้อยและดูเหมือนว่าเขามีเนื้อหาที่ดีออกมี นอกจากนี้ยังแสดงเมทริกซ์ความสับสนพร้อมฮีทแมปในสไลด์ของเขา;)
JMS

9

Python มีไลบรารี่ ML หลากหลายรูปแบบ อย่างไรก็ตามฉันมักจะรู้สึกว่ามันเป็นประโยชน์สำหรับนักวิจัยมล. มากกว่าสำหรับผู้ปฏิบัติงานมล.

Numpy / SciPyและmatplotlibเป็นเครื่องมือที่ยอดเยี่ยมสำหรับงานวิทยาศาสตร์กับ Python หากคุณไม่กลัวที่จะแฮกในสูตรคณิตศาสตร์ส่วนใหญ่ด้วยตนเองคุณจะไม่ผิดหวัง นอกจากนี้มันเป็นเรื่องง่ายมากที่จะใช้ GPU ที่มีcudamatหรือคำพังเพย - การทดลองที่ใช้เวลาหลายวันก่อนจะเสร็จสมบูรณ์ในไม่กี่ชั่วโมงหรือแม้กระทั่งนาที

เด็กล่าสุดในบล็อกอาจเป็นTheano มันเป็นภาษาสัญลักษณ์สำหรับการแสดงออกทางคณิตศาสตร์ที่มาพร้อมกับ opmitimzations, การใช้งาน GPU และการสร้างความแตกต่างโดยอัตโนมัติซึ่งมีคุณสมบัติที่ยอดเยี่ยมสำหรับวิธีการไล่ระดับสี

นอกจากนี้เท่าที่ฉันรู้ว่า NLTK ที่กล่าวถึงโดย JMS นั้นเป็นห้องสมุดภาษาธรรมชาติอันดับหนึ่งที่เปิดอยู่

Python เป็นเครื่องมือที่เหมาะสมสำหรับการเรียนรู้ของเครื่อง


8

ผมขอแนะนำส้ม

ครอบคลุม

ใช่

ปรับขนาดได้ (คุณสมบัติ 100k, ตัวอย่าง 10k)

ใช่

ห้องสมุดที่รองรับการทำ ML ใน Python นั้นดีหรือไม่

ใช่

ไลบรารี่ที่มีตัวแยกประเภทที่ดีวิธีการเลือกคุณสมบัติ (Information Gain, Chi-Sqaured เป็นต้น),

ทั้งหมดนี้ทำงานนอกกรอบในสีส้ม

และความสามารถในการประมวลผลข้อความล่วงหน้า (การกั้นการลบคำหยุด tf-idf ฯลฯ )

ฉันไม่เคยใช้ Orange ในการประมวลผลข้อความ


+1 สำหรับออเรนจ์ พวกเขามีเอกสารที่ยอดเยี่ยมที่แสดงวิธีการเร่งความเร็วอย่างรวดเร็วและคุณสามารถใช้ GUI การเขียนโปรแกรมด้วยภาพหรือการเรียกไลบรารี่จาก Python
Josh Hemann

4

ไม่แน่ใจว่าสิ่งนี้มีประโยชน์เป็นพิเศษหรือไม่ แต่มีคำแนะนำสำหรับโปรแกรมเมอร์ในการเรียนรู้สถิติใน Python พร้อมใช้งานออนไลน์ http://www.greenteapress.com/thinkstats/

ดูเหมือนว่าจะค่อนข้างดีจากการสแกนสั้น ๆ ของฉันและดูเหมือนว่าจะพูดถึงวิธีการเรียนรู้ของเครื่องบางอย่างดังนั้นมันอาจเป็นจุดเริ่มต้นที่ดี


3

ตรวจสอบlibsvm


4
libsvm ปรับขนาดฟีเจอร์และตัวอย่างได้ไม่ดี ใช้ liblinear ได้ดีขึ้นโดยผู้เขียนคนเดียวกัน โมเดลเชิงเส้นมักจะดีพอในพื้นที่มิติสูง
ogrisel

libsvm ไม่ใช่ svm engine สำหรับทั้ง scikits-learn และ Orange ใช่ไหม หรือว่าพวกเขาถอยกลับไป liblinear ในกรณีเชิงเส้น?
John Robertson

3

SHOGUN ( 将軍 ) เป็นกล่องเครื่องมือการเรียนรู้เครื่องขนาดใหญ่ซึ่งดูเหมือนว่าจะมีแนวโน้ม



1

ตามที่ @ogrisel ถูกเน้น scikit-learn เป็นหนึ่งในแพ็คเกจการเรียนรู้ของเครื่องที่ดีที่สุดสำหรับ Python เหมาะสำหรับชุดข้อมูลที่มีขนาดเล็กเพียง 100k (กระจัดกระจาย) และตัวอย่าง 10k และแม้แต่ชุดข้อมูลที่ใหญ่กว่าเล็กน้อยซึ่งอาจมีมากกว่า 200k แถว โดยทั่วไปชุดข้อมูลใด ๆ ที่เหมาะกับหน่วยความจำ

แต่ถ้าคุณกำลังมองหากรอบการเรียนรู้ Python Machine Learning ที่ปรับขนาดได้อย่างมากฉันขอแนะนำ Pyspark MLlib เนื่องจากชุดข้อมูลในปัจจุบันสามารถเติบโตได้อย่างมากชี้แจง (ให้ข้อมูลขนาดใหญ่และคลื่นการเรียนรู้ลึก) คุณมักจะต้องมีแพลตฟอร์มที่สามารถปรับขนาดได้และทำงานได้อย่างรวดเร็วไม่เพียง แต่ในขั้นตอนการฝึกอบรมแบบจำลองเท่านั้น การเลือกคุณสมบัติ) ลองดูทั้งสามตัวชี้วัดสำหรับแพลตฟอร์ม Spark Mllib ที่คุณสนใจ:

  1. ความสามารถในการปรับขนาด: ถ้าชุดข้อมูลของคุณสามารถพอดีกับหน่วยความจำ scikit-learn ควรเป็นทางเลือกของคุณ ถ้ามันใหญ่เกินไปที่จะใส่ในหน่วยความจำ Spark จะเป็นหนทางไป สิ่งสำคัญที่ควรทราบที่นี่คือ Spark ทำงานได้เร็วขึ้นเฉพาะในการตั้งค่าแบบกระจาย

  2. ความครอบคลุม: Sklearn มีความสมบูรณ์ยิ่งขึ้นในแง่ของการใช้งานที่ดีของอัลกอริทึมที่ใช้กันทั่วไปจำนวนมากเมื่อเทียบกับ spark mllib การสนับสนุนสำหรับการจัดการข้อมูลและการแปลงข้อมูลก็มีมากขึ้นใน Scikit-Learn Spark Mllib มีโมดูลการแปลงข้อมูลที่เพียงพอซึ่งใช้เวลาส่วนใหญ่ในการหลอกลวง ดังนั้นในกรณีที่คุณจบลงด้วย spark mllib สำหรับข้อกังวลเรื่องความสามารถในการปรับขนาดได้คุณจะยังสามารถทำงานให้สำเร็จได้ มันมีการสนับสนุนทั้งหมดสำหรับการวิเคราะห์ความสัมพันธ์, การแยกคุณสมบัติ (TF-idf, word2vec, CountVectorizer), การแปลงคุณสมบัติ (Tokenizer, StopWordsRemover, nn-gram, Binarizer, PCA ฯลฯ ) สำหรับรายละเอียดดูลิงค์ด้านล่าง:

การแยกการแปลงและการเลือกฟีเจอร์ใน Spark mllib

  1. การจัดประเภท: Spark mllib มีการใช้อัลกอริทึมที่สำคัญทั้งหมดที่คุณจะใช้เป็นส่วนใหญ่ (รวมถึง algos ที่ทำงานได้ดีสำหรับการจำแนกข้อความ) สำหรับภาพรวมโดยละเอียดของอัลกอริธึมที่มีอยู่ผ่าน mllib ดูลิงค์ด้านล่าง

การจำแนกและการถดถอยของมัลลิบ

โบนัส: Apache Spark มีการรองรับ Python, R, Java และ Scala ดังนั้นหากวันพรุ่งนี้คุณตัดสินใจที่จะทดสอบด้วยภาษาอื่น (เป็นทางเลือกส่วนตัวหรือเพื่อเหตุผลทางอาชีพ) คุณจะไม่ต้องเรียนรู้กรอบใหม่ทั้งหมด


0

ฉันไม่รู้ว่าคุณยังคงมองหาคำแนะนำอยู่หรือไม่ (คุณทำคำถามนี้เมื่อ 5 เดือนที่แล้ว ... ) ฉันเพิ่งเริ่มต้นหนังสือเล่มนี้และจนถึงตอนนี้ก็ค่อนข้างดี:

https://www.amazon.com.mx/dp/1491962291/ref=cm_cr_ryp_prd_ttl_sol_3

ผู้เขียนแสดงรหัสตัวอย่างและอธิบายทฤษฎีและคณิตศาสตร์บางอย่าง "เบื้องหลัง" ของอัลกอริทึม ML ฉันพบคำแนะนำนี้มาก หวังว่านี่อาจจะเหมือนกันสำหรับคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.