กรอบการเรียนรู้ของเครื่องโอเพ่นซอร์สใหม่ที่เขียนด้วย Java PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

Machine Learning Framework โอเพ่นซอร์สใหม่ที่เขียนด้วย Java

ฉันยินดีที่จะประกาศว่า Datumbox Machine Learning Framework เป็นโอเพ่นซอร์สภายใต้ GPL 3.0 และคุณสามารถดาวน์โหลดโค้ดได้จาก Github!

กรอบนี้คืออะไร?

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

รองรับรุ่น/อัลกอริธึมประเภทใดบ้าง?

กรอบงานแบ่งออกเป็นหลายชั้น เช่น Machine Learning, Statistics, Mathematics, Algorithms และ Utilities แต่ละคนมีชุดคลาสที่ใช้สำหรับฝึกโมเดลการเรียนรู้ของเครื่อง เลเยอร์ที่สำคัญที่สุด XNUMX ชั้นคือชั้นสถิติและชั้นการเรียนรู้ของเครื่อง

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

เลเยอร์ Machine Learning มีคลาสที่สามารถใช้ได้ในปัญหาจำนวนมาก รวมทั้งการจำแนกประเภท การถดถอย การวิเคราะห์คลัสเตอร์ การสร้างแบบจำลองหัวข้อ การลดมิติ การเลือกคุณลักษณะ การเรียนรู้ทั้งมวล และระบบผู้แนะนำ อัลกอริทึมที่รองรับมีดังนี้ LDA, Max Entropy, Naive Bayes, SVM, Bootstrap Aggregating, Adaboost, Kmeans, Hierarchical Clustering, Dirichlet Process Mixture Models, Softmax Regression, Ordinal Regression, Linear Regression, Stepwise Regression, PCA และอื่นๆ

Datumbox Framework VS ควาญช้าง VS Scikit-Learn

ทั้ง Mahout และ Scikit-Learn เป็นโครงการที่ยอดเยี่ยม และทั้งคู่มีเป้าหมายที่แตกต่างกันโดยสิ้นเชิง ควาญช้างสนับสนุนอัลกอริธึมในจำนวนจำกัดเท่านั้น ซึ่งสามารถขนานกันได้ ดังนั้นจึงใช้เฟรมเวิร์ก Map-Reduce ของ Hadoop เพื่อจัดการกับบิ๊กดาต้า ในทางกลับกัน Scikit-Learn รองรับอัลกอริธึมจำนวนมาก แต่ไม่สามารถจัดการข้อมูลจำนวนมากได้ ยิ่งกว่านั้น มันถูกพัฒนาใน Python ซึ่งเป็นภาษาที่ยอดเยี่ยมสำหรับการสร้างต้นแบบและคอมพิวเตอร์ทางวิทยาศาสตร์ แต่ไม่ใช่สิ่งที่ฉันชอบสำหรับการพัฒนาซอฟต์แวร์

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

มั่นคงแค่ไหน?

กรอบงานเวอร์ชันแรกๆ (สูงสุด 0.3.x) ได้รับการพัฒนาในเดือนสิงหาคมและกันยายน ปี 2013 และเขียนด้วย PHP (ใช่!) ในช่วงเดือนพฤษภาคมและมิถุนายน 2014 (เวอร์ชัน 0.4.x) เฟรมเวิร์กถูกเขียนใหม่ใน Java และปรับปรุงด้วยคุณลักษณะเพิ่มเติม ทั้งสองสาขาได้รับการทดสอบอย่างหนักในแอปพลิเคชันเชิงพาณิชย์รวมถึง Datumbox API เวอร์ชันปัจจุบันคือ 0.5.0 และดูเหมือนว่าจะโตพอที่จะเผยแพร่เป็นเวอร์ชันอัลฟ่าสาธารณะรุ่นแรกของเฟรมเวิร์ก ต้องบอกว่าฟังก์ชันบางอย่างของเฟรมเวิร์กได้รับการทดสอบอย่างละเอียดถี่ถ้วนกว่าฟังก์ชันอื่นๆ เป็นสิ่งสำคัญ นอกจากนี้ เนื่องจากเวอร์ชันนี้เป็นเวอร์ชันอัลฟ่า คุณจึงควรคาดหวังการเปลี่ยนแปลงอย่างมากในการเปิดตัวในอนาคต

ทำไมฉันถึงเขียนมันและทำไมฉันถึงเปิดซอร์สมัน?

การมีส่วนร่วมของฉันกับ Machine Learning และ NLP เกิดขึ้นตั้งแต่ปี 2009 เมื่อฉันร่วมก่อตั้ง WebSEOAnalytics.com ตั้งแต่นั้นมา ฉันได้พัฒนาการใช้งานอัลกอริธึมการเรียนรู้ของเครื่องต่างๆ สำหรับโครงการและแอปพลิเคชันต่างๆ น่าเสียดายที่การใช้งานดั้งเดิมส่วนใหญ่มีปัญหาเฉพาะเจาะจงมาก และแทบจะไม่สามารถนำมาใช้ในปัญหาอื่นได้ ในเดือนสิงหาคม พ.ศ. 2013 ฉันตัดสินใจเริ่ม Datumbox เป็นโครงการส่วนบุคคลและพัฒนากรอบงานที่จัดเตรียมเครื่องมือสำหรับการพัฒนาโมเดลการเรียนรู้ของเครื่องโดยมุ่งเน้นที่ NLP และการจัดประเภทข้อความ เป้าหมายของฉันคือการสร้างเฟรมเวิร์กที่จะใช้ซ้ำในอนาคตสำหรับการพัฒนาโมเดลแมชชีนเลิร์นนิ่งอย่างรวดเร็ว ผสมผสานเข้ากับโปรเจ็กต์ที่ต้องใช้ส่วนประกอบแมชชีนเลิร์นนิงหรือเสนอให้เป็นบริการ (แมชชีนเลิร์นนิงเป็นบริการ)

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

เอกสาร?

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

ข้อจำกัดในปัจจุบันและการพัฒนาในอนาคต

เช่นเดียวกับในซอฟต์แวร์ทุกชิ้น (และโดยเฉพาะอย่างยิ่งโครงการโอเพนซอร์สในเวอร์ชันอัลฟ่า) Datumbox Machine Learning Framework มาพร้อมกับข้อจำกัดที่เป็นเอกลักษณ์และน่ารัก มาเจาะลึกกัน:

  1. เอกสาร: ดังที่ได้กล่าวไว้ก่อนหน้านี้ เอกสารไม่ดี
  2. ไม่มีมัลติเธรด: น่าเสียดายที่เฟรมเวิร์กไม่รองรับ Multithreading ในขณะนี้ แน่นอน เราควรทราบว่าอัลกอริธึมการเรียนรู้ของเครื่องบางตัวไม่สามารถขนานกันได้
  3. ตัวอย่างรหัส: เนื่องจากเพิ่งเผยแพร่เฟรมเวิร์ก คุณจึงไม่พบตัวอย่างโค้ดใดๆ บนเว็บนอกจากตัวอย่างที่เฟรมเวิร์กให้ไว้ในรูปแบบของการทดสอบ JUnit
  4. โครงสร้างรหัส: การสร้างสถาปัตยกรรมที่มั่นคงสำหรับโครงการขนาดใหญ่มักเป็นเรื่องที่ท้าทาย นับประสาเมื่อคุณต้องจัดการกับอัลกอริธึมการเรียนรู้ของเครื่องที่มีความแตกต่างอย่างมาก (เช่น การเรียนรู้ภายใต้การดูแล
  5. ความคงอยู่ของแบบจำลองและการรวบรวมข้อมูลขนาดใหญ่: ปัจจุบันโมเดลสามารถฝึกและจัดเก็บได้ทั้งบนไฟล์บนดิสก์หรือในฐานข้อมูล MongoDB เพื่อให้สามารถจัดการกับข้อมูลจำนวนมากได้ จะต้องมีการตรวจสอบโซลูชันอื่นๆ ตัวอย่างเช่น แมพดีบี ดูเหมือนว่าจะเป็นตัวเลือกที่ดีในการจัดเก็บข้อมูลและพารามิเตอร์ขณะฝึกอบรม นอกจากนี้ การลบ 3 . ใดๆ เป็นสิ่งสำคัญrd ไลบรารีของบุคคลที่ขณะนี้จัดการกับการคงอยู่ของโมเดล และพัฒนาโซลูชันแบบแยกส่วนและแบบแห้งที่ดีขึ้น
  6. อัลกอริธึมใหม่/การทดสอบ/รุ่น: มีเทคนิคดีๆ มากมายที่ไม่ได้รับการสนับสนุนในขณะนี้ (โดยเฉพาะอย่างยิ่งสำหรับการวิเคราะห์อนุกรมเวลา)

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

สุดท้ายนี้ ฉันขอขอบคุณ Kyriaki ที่รักของฉันที่อดทนรอในขณะที่เขียนโปรเจ็กต์นี้ เพื่อนของฉันและนักพัฒนา super-ninja-Java-developer เอเลฟเทริออส บัมปาเลตาคิส เพื่อช่วยเหลือเกี่ยวกับปัญหา Java ที่สำคัญและคุณมีส่วนร่วมในโครงการ ฉันรอคอยความคิดเห็นของคุณ

ประทับเวลา:

เพิ่มเติมจาก กล่องข้อมูล