รีวิว: Scikit-learn เปล่งประกายเพื่อการเรียนรู้ของเครื่องที่ง่ายขึ้น

Scikits เป็นกล่องเครื่องมือทางวิทยาศาสตร์ที่ใช้ Python ที่สร้างขึ้นจาก SciPy ซึ่งเป็นไลบรารี Python สำหรับการคำนวณทางวิทยาศาสตร์ Scikit-learn เป็นโครงการโอเพ่นซอร์สที่เน้นการเรียนรู้ของเครื่อง: การจำแนกประเภทการถดถอยการจัดกลุ่มการลดขนาดการเลือกโมเดลและการประมวลผลล่วงหน้า เป็นโครงการที่ค่อนข้างอนุรักษ์นิยมซึ่งค่อนข้างระมัดระวังในการหลีกเลี่ยงการคืบของขอบเขตและการกระโดดบนอัลกอริทึมที่ไม่ได้รับการพิสูจน์เนื่องจากเหตุผลด้านความสามารถในการบำรุงรักษาและทรัพยากรของนักพัฒนาที่ จำกัด ในทางกลับกันมันมีอัลกอริธึมที่เป็นของแข็งให้เลือกมากมายและใช้ Cython (คอมไพเลอร์ Python-to-C) สำหรับฟังก์ชั่นที่ต้องเร็วเช่นลูปด้านใน

ในส่วนต่างๆที่ Scikit-learn ไม่ครอบคลุม ได้แก่ การเรียนรู้เชิงลึกการเรียนรู้แบบเสริมกำลังแบบจำลองกราฟิกและการทำนายลำดับ ถูกกำหนดให้อยู่ในและสำหรับ Python ดังนั้นจึงไม่มี API สำหรับภาษาอื่น Scikit-learn ไม่รองรับ PyPy ซึ่งเป็นการรวบรวมการใช้งาน Python แบบรวดเร็วทันใจเนื่องจาก NumPy และ SciPy ไม่รองรับ PyPy อย่างสมบูรณ์

Scikit-learn ไม่รองรับการเร่งความเร็ว GPU ด้วยเหตุผลหลายประการที่เกี่ยวข้องกับความซับซ้อนและการพึ่งพาเครื่องที่จะแนะนำ จากนั้นอีกครั้งนอกเหนือจากเครือข่ายประสาทเทียมแล้ว Scikit-learn มีความจำเป็นเพียงเล็กน้อยสำหรับการเร่งความเร็วของ GPU

คุณสมบัติ Scikit-learn

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

อย่างไรก็ตามการใช้ MLP ของ Scikit-learn นั้นไม่ได้มีไว้สำหรับการใช้งานขนาดใหญ่โดยชัดแจ้ง สำหรับการใช้งานขนาดใหญ่ที่ใช้ GPU และสำหรับการเรียนรู้เชิงลึกให้ดูโครงการที่เกี่ยวข้องมากมายของ Scikit-learn ซึ่งรวมถึงเฟรมเวิร์กเครือข่ายประสาทเทียมที่เป็นมิตรกับ Python เช่น Keras และ Theano

สำหรับการถดถอยซึ่งเกี่ยวกับการทำนายแอตทริบิวต์ที่มีมูลค่าต่อเนื่องที่เกี่ยวข้องกับวัตถุ (เช่นราคาของหุ้น) Scikit-learn มีการถดถอยเวกเตอร์สนับสนุน (SVR), การถดถอยสัน, Lasso, Elastic Net, การถดถอยมุมน้อยที่สุด (LARS ), การถดถอยแบบเบย์, การถดถอยที่แข็งแกร่งประเภทต่างๆและอื่น ๆ นั่นเป็นอัลกอริธึมการถดถอยที่มีให้เลือกมากมายกว่าที่นักวิเคราะห์ส่วนใหญ่ต้องการ แต่มีกรณีการใช้งานที่ดีสำหรับแต่ละอันที่รวมอยู่ด้วย

สำหรับการจัดกลุ่มเทคนิคการเรียนรู้ที่ไม่ได้รับการดูแลซึ่งวัตถุที่คล้ายกันจะถูกจัดกลุ่มเป็นชุดโดยอัตโนมัติ Scikit-learn มี k-mean การจัดกลุ่มสเปกตรัมการเปลี่ยนค่าเฉลี่ยการจัดกลุ่มตามลำดับชั้น DBSCAN และอัลกอริทึมอื่น ๆ อีกครั้งมีการรวมขอบเขตของอัลกอริทึมแบบอนุรักษ์นิยมไว้ด้วย

การลดขนาดเป็นเรื่องเกี่ยวกับการลดจำนวนตัวแปรสุ่มที่ต้องพิจารณาโดยใช้เทคนิคการสลายตัวเช่นการวิเคราะห์องค์ประกอบหลัก (PCA) และการแยกตัวประกอบเมทริกซ์ที่ไม่เป็นลบ (NMF) หรือเทคนิคการเลือกคุณลักษณะ การเลือกโมเดลเป็นเรื่องเกี่ยวกับการเปรียบเทียบตรวจสอบและเลือกพารามิเตอร์และโมเดลและใช้อัลกอริทึมเช่นการค้นหาแบบกริดการตรวจสอบความถูกต้องข้ามและฟังก์ชันเมตริก สำหรับทั้งสองพื้นที่ Scikit-learn จะรวมอัลกอริทึมและวิธีการที่ได้รับการพิสูจน์แล้วทั้งหมดใน API ที่เข้าถึงได้ง่าย

การประมวลผลล่วงหน้าซึ่งเกี่ยวข้องกับการแยกคุณลักษณะและการทำให้เป็นมาตรฐานเป็นส่วนแรกและสำคัญที่สุดของกระบวนการเรียนรู้ของเครื่อง นอร์มัลไลเซชันจะเปลี่ยนคุณสมบัติเป็นตัวแปรใหม่โดยมักจะมีค่าเฉลี่ยเป็นศูนย์และความแปรปรวนของหน่วย แต่บางครั้งจะอยู่ระหว่างค่าต่ำสุดและค่าสูงสุดที่กำหนดซึ่งมักจะเป็น 0 และ 1 การแยกคุณลักษณะจะเปลี่ยนข้อความหรือรูปภาพให้เป็นตัวเลขที่ใช้งานได้สำหรับการเรียนรู้ของเครื่อง ที่นี่อีกครั้ง Scikit-learn ให้บริการอาหารคลาสสิกแสนอร่อยที่คุณคาดหวังได้ที่ Smorgasbord แห่งนี้ คุณมีอิสระที่จะรวบรวมสิ่งที่ดึงดูดใจคุณ

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

ในระยะสั้น Scikit-learn มีชุดอัลกอริทึมและวิธีการทั้งหมดสำหรับการลดขนาดการเลือกแบบจำลองการแยกคุณลักษณะและการทำให้เป็นมาตรฐานแม้ว่าจะไม่มีขั้นตอนการทำงานที่แนะนำเพื่อให้บรรลุสิ่งเหล่านี้นอกเหนือจากการรวบรวมตัวอย่างที่ดีและเอกสารที่ดี

การติดตั้งและเรียกใช้ Scikit-learn

การติดตั้ง Scikit-learn ของฉันอาจเป็นการติดตั้งกรอบการเรียนรู้ของเครื่องที่ง่ายที่สุดเท่าที่เคยมีมา เนื่องจากฉันได้ติดตั้งข้อกำหนดเบื้องต้นทั้งหมดแล้วและมีข้อมูลล่าสุดเพียงพอ (Python, Numpy และ Scipy) จึงใช้คำสั่งเดียว:

 $ sudo pip install -U scikit-learn

sudoตกลงจะเอาฉันสองคำสั่งเพราะเป็นครั้งแรกที่ฉันลืม

นั่นทำให้ฉันได้เรียนรู้ Scikit 0.18.1 สำหรับมาตรการที่ดีฉันยังตรวจสอบออกที่เก็บ GitHub ติดตั้งจมูกทดสอบกรอบและสร้างรุ่นพัฒนาของ Scikit makeเรียนรู้จากแหล่งซึ่งเป็นง่ายๆเป็นเปลี่ยนไปยังรากของพื้นที่เก็บข้อมูลและการพิมพ์ ใช้เวลาสักครู่ในการรวบรวม Python สร้างและรวบรวมไฟล์ C ทั้งหมดเชื่อมโยงแอสเซมบลีและเรียกใช้การทดสอบทั้งหมด แต่ไม่ต้องการการแทรกแซงใด ๆ

การใช้ตัวอย่าง Scikit-learn ครั้งแรกของฉันก็ง่ายมากเช่นกัน จากหน้าตัวอย่างทั่วไปฉันคลิกเข้าไปในตัวอย่างสำหรับการพล็อตการคาดคะเนที่ตรวจสอบความถูกต้องข้ามอ่านสมุดบันทึกดาวน์โหลดซอร์สโค้ด Python และสมุดบันทึก Jupyter แหล่งที่มาของ Python ทำงานร่วมกันเป็นเวลาสองสามวินาทีสร้างข้อความเตือนและแสดงกราฟขึ้นมา สมุดบันทึก Jupyter ทำสิ่งเดียวกันเมื่อฉันวิ่งแบบโต้ตอบดังที่คุณเห็นในรูปด้านล่าง

Scikit-learn ได้รับคะแนนสูงสุดสำหรับความสะดวกในการพัฒนาในบรรดาเฟรมเวิร์กการเรียนรู้ของเครื่องทั้งหมดที่ฉันได้ทดสอบส่วนใหญ่เป็นเพราะอัลกอริทึมทำงานตามที่โฆษณาและบันทึกไว้ API จึงมีความสอดคล้องและได้รับการออกแบบมาเป็นอย่างดีและมี "ความต้านทานไม่ตรงกัน" เพียงเล็กน้อยระหว่าง โครงสร้างข้อมูล เป็นเรื่องน่ายินดีที่ได้ร่วมงานกับไลบรารีที่มีการปรับปรุงคุณสมบัติต่างๆอย่างละเอียดและล้างข้อบกพร่องออก

เรียนวิทย์ - คณิต

เอกสาร Scikit-learn เป็นสิ่งที่ดีและมีตัวอย่างมากมาย - รวมประมาณ 200 รายการ ตัวอย่างส่วนใหญ่ประกอบด้วยกราฟอย่างน้อยหนึ่งกราฟที่สร้างจากข้อมูลที่วิเคราะห์โดยใช้ Matplotlib สิ่งเหล่านี้มีส่วนช่วยให้ห้องสมุดพัฒนาได้ง่ายและง่ายต่อการเรียนรู้

มีบทช่วยสอนยาว ๆ หนึ่งบท "บทแนะนำเกี่ยวกับการเรียนรู้ทางสถิติสำหรับการประมวลผลข้อมูลทางวิทยาศาสตร์" ซึ่งมีห้าส่วนและภาคผนวกเกี่ยวกับการค้นหาความช่วยเหลือ บทแนะนำนี้ค่อนข้างดีทั้งที่ครอบคลุมแนวคิดพื้นฐานและการแสดงตัวอย่างโดยใช้ข้อมูลโค้ดและกราฟจริง นอกจากนี้ยังเรียกตัวอย่างที่เกี่ยวข้องกับข้อความเช่นการเปรียบเทียบตัวแยกประเภท SVM ที่แตกต่างกันสี่ตัวที่แสดงในรูปด้านล่าง

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

ฉันอ้างว่าคำเตือนส่วนใหญ่เป็นข้อบกพร่องในกรอบงาน Apple vecLib และวิวัฒนาการในไลบรารี Python บางส่วนดูเหมือนจะเป็นคำเตือนใน Python 2.7.10 ซึ่งไม่มีอยู่ในเวอร์ชันใดก็ตามที่ใช้สำหรับหน้าเว็บ รูปด้านล่างมีคำเตือนดังกล่าว หน้าเว็บที่เกี่ยวข้องไม่มี

ในฐานะที่เป็นไลบรารี Python สำหรับการเรียนรู้ของเครื่องด้วยขอบเขตที่ จำกัด โดยเจตนา Scikit-learn จึงดีมาก มีอัลกอริทึมที่ได้รับการยอมรับอย่างดีหลากหลายประเภทพร้อมด้วยกราฟิกในตัว การติดตั้งเรียนรู้และใช้งานค่อนข้างง่ายและมีตัวอย่างและแบบฝึกหัดที่ดี

ในทางกลับกัน Scikit-learn ไม่ครอบคลุมถึงการเรียนรู้เชิงลึกหรือการเรียนรู้แบบเสริมแรงซึ่งทำให้ปัญหาที่ยาก แต่สำคัญในปัจจุบันเช่นการจำแนกภาพที่ถูกต้องและการแยกวิเคราะห์และการแปลภาษาแบบเรียลไทม์ที่เชื่อถือได้ นอกจากนี้ยังไม่รวมโมเดลกราฟิกหรือการทำนายลำดับไม่สามารถใช้งานได้จริงจากภาษาอื่นนอกจาก Python และไม่รองรับ PyPy หรือ GPU

บนกรงเล็บที่จับได้ประสิทธิภาพของ Scikit-learn ที่ประสบความสำเร็จในการเรียนรู้ของเครื่องนอกเหนือจากเครือข่ายประสาทเทียมนั้นค่อนข้างดีแม้ว่าจะไม่มีการเร่งความเร็วของ PyPy หรือ GPU ก็ตาม Python มักจะซิปกว่าที่คนคาดหวังจากล่ามและการใช้ Cython เพื่อสร้างรหัส C สำหรับลูปภายในช่วยขจัดปัญหาคอขวดส่วนใหญ่ใน Scikit-learn

เห็นได้ชัดว่าหากคุณสนใจการเรียนรู้เชิงลึกคุณควรดูที่อื่น อย่างไรก็ตามมีปัญหามากมายตั้งแต่การสร้างฟังก์ชั่นการทำนายที่เชื่อมโยงการสังเกตที่แตกต่างกันไปจนถึงการจำแนกประเภทของการสังเกตไปจนถึงการเรียนรู้โครงสร้างในชุดข้อมูลที่ไม่มีป้ายกำกับซึ่งให้ยืมตัวเองไปสู่การเรียนรู้ของเครื่องแบบเก่าโดยไม่ต้องใช้เซลล์ประสาทหลายสิบชั้นและสำหรับพื้นที่เหล่านั้น Scikit - เรียนรู้ได้ดีมาก

หากคุณเป็นแฟน Python Scikit-learn อาจเป็นตัวเลือกที่ดีที่สุดในไลบรารีการเรียนรู้ของเครื่องทั่วไป หากคุณชอบ Scala Spark ML อาจเป็นทางเลือกที่ดีกว่า และถ้าคุณชอบออกแบบไปป์ไลน์การเรียนรู้ของคุณโดยวาดไดอะแกรมและเขียนตัวอย่าง Python หรือ R เป็นครั้งคราว Microsoft Cortana Analytics Suite โดยเฉพาะ Azure Machine Learning Studio อาจเหมาะกับความต้องการของคุณเป็นอย่างดี

---

ค่าใช้จ่าย:โอเพ่นซอร์สฟรี แพลตฟอร์ม:ต้องใช้ Python, NumPy, SciPy และ Matplotlib มีการเผยแพร่สำหรับ MacOS, Linux และ Windows

ดัชนีชี้วัด โมเดลและอัลกอริทึม (25%) ความง่ายในการพัฒนา (25%) เอกสารประกอบ (20%) ประสิทธิภาพ (20%) ติดตั้งง่าย (10%) คะแนนโดยรวม (100%)
วิทย์ - เรียนรู้ 0.18.1 9 9 9 8 9 8.8