อ่าน 5 นาที
เอ็กซ์จีบูสต์
XGBoost [ 2 ] (eXtreme Gradient Boosting) เป็น ไลบรารี ซอฟต์แวร์โอเพน ซอร์ส ที่ให้เฟรม เวิร์ก การเพิ่มประสิทธิภาพแบบไล่ ระดับ สำหรับ C++ , Java , Python , [ 3 ] R , [ 4 ] Julia ,...
เอ็กซ์จีบูสต์
| เอ็กซ์จีบูสต์ | |
|---|---|
| นักพัฒนา | ผู้ร่วมพัฒนา XGBoost |
| ปล่อย | 27 มีนาคม 2557 |
| เวอร์ชันเสถียร | 3.0.0 [ 1 ] |
| เขียนเป็น | ซี++ |
| ระบบปฏิบัติการ | ลินุกซ์ , มอสซาเรลล่า , ไมโครซอฟต์ วินโดวส์ |
| พิมพ์ | การเรียนรู้ของเครื่อง |
| ใบอนุญาต | ใบอนุญาต Apache 2.0 |
| เว็บไซต์ | xgboost |
| ที่เก็บข้อมูล |
|
| บทความนี้เป็นส่วนหนึ่งของชุดบทความเกี่ยวกับ ภาษาโปรแกรม C++ |
XGBoost [ 2 ] (eXtreme Gradient Boosting) เป็นไลบรารีซอฟต์แวร์โอเพน ซอร์ส ที่ให้เฟรม เวิร์ก การเพิ่มประสิทธิภาพแบบไล่ระดับ สำหรับC++ , Java , Python , [ 3 ] R , [ 4 ] Julia , [ 5 ] Perl , [ 6 ]และScalaโดยทำงานบนLinux , Microsoft Windows , [ 7 ]และmacOS [ 8 ] จากคำอธิบายโครงการ มีเป้าหมายที่จะจัดหา "ไลบรารีการเพิ่มประสิทธิภาพแบบไล่ระดับ (GBM, GBRT, GBDT) ที่ปรับขนาด ได้พกพาได้ และกระจาย" โดยทำงานบนเครื่องเดียว รวมถึงเฟรมเวิร์กการประมวลผลแบบกระจายApache Hadoop , Apache Spark , Apache FlinkและDask [ 9 ] [ 10 ]
XGBoost ได้รับความนิยมและความสนใจอย่างมากในช่วงกลางทศวรรษ 2010 ในฐานะอัลกอริทึมที่ทีมที่ชนะการแข่งขันการเรียนรู้ของเครื่อง หลายทีมเลือก ใช้[ 11 ]
ประวัติศาสตร์
XGBoost เริ่มต้นจากการเป็นโครงการวิจัยโดย Tianqi Chen [ 12 ]ซึ่งเป็นส่วนหนึ่งของกลุ่ม Distributed (Deep) Machine Learning Community (DMLC) ที่มหาวิทยาลัยวอชิงตันในตอนแรกมันเริ่มต้นจากการเป็นแอปพลิเคชันเทอร์มินัลที่สามารถกำหนดค่าได้โดยใช้ ไฟล์การกำหนดค่า libsvmมันกลายเป็นที่รู้จักกันดีในวงการแข่งขัน ML หลังจากที่ถูกนำไปใช้ในโซลูชันที่ชนะการแข่งขัน Higgs Machine Learning Challengeไม่นานหลังจากนั้น แพ็กเกจ Python และ R ก็ถูกสร้างขึ้น และปัจจุบัน XGBoost มีการใช้งานแพ็กเกจสำหรับ Java, Scala , Julia, Perlและภาษาอื่นๆ ซึ่งทำให้ไลบรารีนี้เข้าถึงนักพัฒนาได้มากขึ้นและมีส่วนทำให้ได้รับความนิยมในหมู่ ชุมชน Kaggleซึ่งมีการนำไปใช้ในการแข่งขันจำนวนมาก[ 11 ]
ในไม่ช้าก็มีการบูรณาการเข้ากับแพ็กเกจอื่นๆ อีกหลายแพ็กเกจ ทำให้ใช้งานได้ง่ายขึ้นในชุมชนต่างๆ ปัจจุบันได้มีการบูรณาการเข้ากับscikit-learnสำหรับ ผู้ใช้ Pythonและแพ็กเกจ caret สำหรับ ผู้ใช้ Rนอกจากนี้ยังสามารถบูรณาการเข้ากับเฟรมเวิร์กการไหลของข้อมูล เช่นApache Spark , Apache HadoopและApache Flinkโดยใช้ Rabit [ 13 ]และ XGBoost4J [ 14 ] ที่ถูกทำให้เป็นนามธรรม XGBoost ยังมีให้บริการบนOpenCL สำหรับ FPGA [ 15 ] Tianqi Chen และ Carlos Guestrinได้เผยแพร่การใช้งาน XGBoost ที่มีประสิทธิภาพและปรับขนาดได้[ 16 ]
แม้ว่าโมเดล XGBoost มักจะให้ความแม่นยำสูงกว่าต้นไม้ตัดสินใจเดี่ยว แต่ก็ต้องแลกมาด้วยความสามารถในการตีความที่ลดลงของต้นไม้ตัดสินใจ ตัวอย่างเช่น การติดตามเส้นทางที่ต้นไม้ตัดสินใจใช้ในการตัดสินใจนั้นง่ายและเข้าใจได้เอง แต่การติดตามเส้นทางของต้นไม้หลายร้อยหรือหลายพันต้นนั้นยากกว่ามาก
คุณสมบัติ
คุณสมบัติเด่นของ XGBoost ที่ทำให้แตกต่างจากอัลกอริธึมการเพิ่มประสิทธิภาพแบบไล่ระดับอื่นๆ ได้แก่: [ 17 ] [ 18 ] [ 16 ]
- การลงโทษต้นไม้ที่ชาญฉลาด
- การหดตัวตามสัดส่วนของข้อใบ
- นิวตันบูสเตอร์
- พารามิเตอร์การสุ่มเพิ่มเติม
- การนำไปใช้งานบนระบบเดี่ยว ระบบ กระจายและการคำนวณนอกหน่วยความจำหลัก
- การเลือกคุณสมบัติอัตโนมัติ
- การร่างควอนไทล์แบบถ่วงน้ำหนักที่ได้รับการพิสูจน์ทางทฤษฎีเพื่อการคำนวณที่มีประสิทธิภาพ
- การเพิ่มประสิทธิภาพโครงสร้างต้นไม้แบบขนานด้วยความเบาบาง
- โครงสร้างบล็อกที่สามารถแคชได้อย่างมีประสิทธิภาพสำหรับการฝึกต้นไม้ตัดสินใจ
อัลกอริทึม
XGBoost ทำงานในลักษณะเดียวกับวิธีNewton–Raphsonในพื้นที่ฟังก์ชัน ซึ่งแตกต่างจากGradient Boosting ที่ทำงานในลักษณะเดียวกับ Gradient Descent ในพื้นที่ฟังก์ชัน โดยใช้ การประมาณค่า Taylorอันดับสองในฟังก์ชันความสูญเสียเพื่อให้เชื่อมโยงกับวิธี Newton–Raphson
อัลกอริทึม XGBoost ทั่วไปที่ไม่มีการปรับแต่งค่าใดๆ มีดังนี้:
อินพุต: ชุดข้อมูลฝึกฝน, ฟังก์ชันความสูญเสียที่สามารถหาอนุพันธ์ได้, จำนวนผู้เรียนรู้แบบอ่อนและอัตราการเรียนรู้
อัลกอริทึม:
- กำหนดค่าเริ่มต้นให้กับโมเดลด้วยค่าคงที่:
- โปรดทราบว่านี่คือการเริ่มต้นของแบบจำลอง ดังนั้นเราจึงกำหนดค่าคงที่ให้กับอินพุตทั้งหมด ดังนั้นแม้ว่าในการวนซ้ำครั้งต่อๆ ไปเราจะใช้การปรับให้เหมาะสมเพื่อค้นหาฟังก์ชันใหม่ แต่ในขั้นตอนที่ 0 เราต้องหาค่าที่เท่ากันสำหรับอินพุตทั้งหมด ซึ่งทำให้ฟังก์ชันความสูญเสียมีค่าน้อยที่สุด
- สำหรับm = 1 ถึงM :
- คำนวณ 'เกรเดียนต์' และ 'เฮสเซียน':
- สร้างแบบจำลองการเรียนรู้พื้นฐาน (หรือแบบจำลองการเรียนรู้แบบอ่อน เช่น ต้นไม้) โดยใช้ชุดข้อมูลฝึกฝนโดยแก้ปัญหาการหาค่าเหมาะสมที่สุดด้านล่างนี้:
- อัปเดตโมเดล:
- เอาต์พุต
พารามิเตอร์
XGBoost มีพารามิเตอร์ที่สามารถระบุได้เพื่อส่งผลต่อการทำงานและประสิทธิภาพ พารามิเตอร์บางส่วนได้แก่: [ 19 ]
- อัตราการเรียนรู้ (หรือที่เรียกว่า "ขนาดขั้นตอน" หรือ "การหดตัว") คือตัวเลขระหว่าง 0 ถึง 1 (ค่าเริ่มต้นคือ 0.3) ซึ่งกำหนดอัตราที่อัลกอริทึมเรียนรู้จากแต่ละรอบการทำงาน
- n_estimators กำหนดจำนวนต้นไม้ที่จะสร้างในแบบจำลองกลุ่ม โดยทั่วไปแล้วจำนวนต้นไม้ที่มากขึ้นจะเพิ่มความซับซ้อนของแบบจำลอง แต่ก็อาจนำไปสู่การโอเวอร์ฟิตติ้งได้หากมีต้นไม้มากเกินไป
- แกมมา (หรือที่รู้จักกันในชื่อตัวคูณลากรางจ์ หรือพารามิเตอร์ลดการสูญเสียขั้นต่ำ) ควบคุมปริมาณการลดการสูญเสียขั้นต่ำที่จำเป็นในการแบ่งเพิ่มเติมบนโหนดใบของต้นไม้ ค่าเริ่มต้นใน XGBoost คือ 0
- max_depth แสดงถึงความลึกที่แต่ละต้นไม้ในกระบวนการบูสติ้งสามารถเติบโตได้ระหว่างการฝึก โดยค่าเริ่มต้นคือ 6
รางวัล
- รางวัลจอห์น แชมเบอร์ส(2016) [ 20 ]
- รางวัลฟิสิกส์พลังงานสูงพบกับการเรียนรู้ของเครื่อง (HEP meets ML) (2016) [ 21 ]
ดูเพิ่มเติม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ เอ็กซ์จีบูสต์
XGBoost [ 2 ] (eXtreme Gradient Boosting) เป็น ไลบรารี ซอฟต์แวร์โอเพน ซอร์ส ที่ให้เฟรม เวิร์ก การเพิ่มประสิทธิภาพแบบไล่ ระดับ สำหรับ C++ , Java , Python , [ 3 ] R , [ 4 ] Julia ,...
ประวัติศาสตร์
XGBoost เริ่มต้นจากการเป็นโครงการวิจัยโดย Tianqi Chen [ 12 ] ซึ่งเป็นส่วนหนึ่งของกลุ่ม Distributed (Deep) Machine Learning Community (DMLC) ที่ มหาวิทยาลัยวอชิงตัน ในตอนแรกมันเริ่มต้นจากการเป็นแอปพลิเคชันเทอร์มินัลที่สามารถกำหนดค่าได้โดยใช้ ไฟล์การกำหนดค่า...
คุณสมบัติ
คุณสมบัติเด่นของ XGBoost ที่ทำให้แตกต่างจากอัลกอริธึมการเพิ่มประสิทธิภาพแบบไล่ระดับอื่นๆ ได้แก่: [ 17 ] [ 18 ] [ 16 ]
อัลกอริทึม
XGBoost ทำงานในลักษณะเดียวกับวิธี Newton–Raphson ในพื้นที่ฟังก์ชัน ซึ่งแตกต่างจาก Gradient Boosting ที่ทำงานในลักษณะเดียวกับ Gradient Descent ในพื้นที่ฟังก์ชัน โดยใช้ การประมาณค่า Taylor อันดับสองในฟังก์ชันความสูญเสียเพื่อให้เชื่อมโยงกับวิธี Newton–Raphson