ป่าสุ่มและแบ็กกิง
แนวคิดการรวมโมเดล RandomForestClassifier, n_estimators, ความสำคัญของคุณลักษณะ และคะแนน OOB
ป่าสุ่มและแบ็กกิง เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาของต้นไม้เดี่ยว
ต้นไม้ตัดสินใจต้นเดียวมีความแปรปรวนสูง: การฝึกใหม่ด้วยข้อมูลที่ต่างออกไปเพียงเล็กน้อยอาจสร้างต้นไม้ที่แตกต่างกันมาก วิธีรวมแบบจำลองแก้ปัญหานี้ด้วยการรวมต้นไม้หลายต้นเข้าด้วยกัน
Bagging (การรวมแบบบูตสแตรป)
Bagging ฝึกแบบจำลองหลายแบบด้วยชุดตัวอย่างบูตสแตรปที่แตกต่างกัน (การสุ่มตัวอย่างข้อมูลโดยให้เลือกซ้ำได้) แล้วหาค่าเฉลี่ยของผลการทำนาย
การหาค่าเฉลี่ยจากแบบจำลองที่มีความแปรปรวนสูงหลายแบบช่วยลดความแปรปรวนโดยรวม โดยแทบไม่เพิ่มอคติ
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
bag = BaggingClassifier(
estimator=DecisionTreeClassifier(),
n_estimators=100,
random_state=0,
)
bag.fit(Xtr, ytr)จาก Bagging สู่ป่าสุ่ม
ป่าสุ่มคือการทำ Bagging กับต้นไม้ พร้อมกลวิธีเพิ่มเติมหนึ่งอย่าง: ในการแบ่งแต่ละครั้ง จะพิจารณาเฉพาะชุดย่อยของคุณลักษณะที่สุ่มเลือกเท่านั้น
วิธีนี้ลดความสัมพันธ์ระหว่างต้นไม้ ทำให้ข้อผิดพลาดของต้นไม้หักล้างกันได้ดีขึ้น และช่วยปรับปรุงแบบจำลองรวม
พื้นฐาน RandomForestClassifier
ใช้ RandomForestClassifier พารามิเตอร์สำคัญ n_estimators กำหนดจำนวนต้นไม้ที่จะสร้าง ต้นไม้มากขึ้น = เสถียรมากขึ้นแต่ช้าลง
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=200, random_state=0)
rf.fit(Xtr, ytr)
print("Accuracy:", rf.score(Xte, yte))การฝึกแบบขนานด้วยจำนวนงาน
ต้นไม้ในป่าสุ่มเป็นอิสระต่อกัน จึงฝึกแบบขนานได้ ตั้งค่า n_jobs=-1 เพื่อใช้แกนประมวลผลทั้งหมดของ CPU และเร่งการฝึกให้เร็วขึ้นอย่างมาก
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(
n_estimators=500,
n_jobs=-1, # use all cores
random_state=0,
)
rf.fit(Xtr, ytr)คะแนนจากข้อมูลนอกถุง (OOB)
ต้นไม้แต่ละต้นจะไม่นำตัวอย่างประมาณหนึ่งในสามมาใช้ (เพราะการสุ่มแบบบูตสแตรปไม่ได้เลือกตัวอย่างเหล่านั้น) ตัวอย่างข้อมูลนอกถุงเหล่านี้จึงทำหน้าที่เป็นชุดตรวจสอบในตัว
ตั้งค่า oob_score=True เพื่อรับค่าประมาณความคลาดเคลื่อนในการใช้กับข้อมูลใหม่ได้ฟรี โดยไม่ต้องแบ่งข้อมูลแยกต่างหาก
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(
n_estimators=300,
oob_score=True,
random_state=0,
)
rf.fit(Xtr, ytr)
print("OOB score:", rf.oob_score_)การควบคุมความลึกของต้นไม้ในป่าสุ่ม
พารามิเตอร์ของต้นไม้แบบเดียวกันยังใช้ได้ ได้แก่ max_depth, min_samples_leaf และ max_features (จำนวนคุณลักษณะที่จะลองในการแบ่งแต่ละครั้ง)
max_features="sqrt" เป็นค่าเริ่มต้นที่ใช้กันทั่วไปสำหรับการจำแนกประเภท
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(
n_estimators=300,
max_depth=12,
max_features="sqrt",
random_state=0,
)ความสำคัญของคุณลักษณะในตัว
เช่นเดียวกับต้นไม้เดี่ยว ป่าสุ่มจะแสดงค่า feature_importances_ ซึ่งเป็นค่าเฉลี่ยจากต้นไม้ทั้งหมด ความสำคัญที่อิงความไม่บริสุทธิ์นี้คำนวณได้รวดเร็ว แต่อาจมีอคติต่อคุณลักษณะที่มีจำนวนค่าที่เป็นไปได้สูง
from sklearn.ensemble import RandomForestClassifier
import numpy as np
rf = RandomForestClassifier(n_estimators=200, random_state=0).fit(Xtr, ytr)
order = np.argsort(rf.feature_importances_)[::-1]
for i in order[:5]:
print(i, rf.feature_importances_[i])ความสำคัญจากการสับเปลี่ยน
ความสำคัญจากการสับเปลี่ยนน่าเชื่อถือกว่า โดยจะสับเปลี่ยนคอลัมน์ของคุณลักษณะหนึ่งรายการ แล้ววัดว่า score ลดลงเท่าใด หากลดลงมาก แสดงว่าคุณลักษณะนั้นสำคัญ
วิธีนี้ไม่ขึ้นกับแบบจำลองและหลีกเลี่ยงอคติจากความไม่บริสุทธิ์ได้
from sklearn.inspection import permutation_importance
result = permutation_importance(
rf, Xte, yte, n_repeats=10, random_state=0, n_jobs=-1
)
print(result.importances_mean)การตีความผลลัพธ์จากการสับเปลี่ยน
permutation_importance ส่งคืนค่า importances_mean และ importances_std จากการทำซ้ำหลายครั้ง ให้คำนวณค่าดังกล่าวบนชุดข้อมูลที่กันไว้ทดสอบ เพื่อวัดผลกระทบต่อการใช้กับข้อมูลใหม่ ไม่ใช่ความพอดีของการฝึก
import numpy as np
means = result.importances_mean
stds = result.importances_std
for i in np.argsort(means)[::-1]:
print(f"feature {i}: {means[i]:.3f} +/- {stds[i]:.3f}")ควรใช้ป่าสุ่มเมื่อใด
ป่าสุ่มเป็นตัวเลือกเริ่มต้นที่ดี: ทนทาน ต้องปรับแต่งน้อย รองรับความสัมพันธ์ที่ไม่เป็นเชิงเส้นและปฏิสัมพันธ์ระหว่างคุณลักษณะ และต้านทานการปรับเข้ากับข้อมูลมากเกินไป ข้อเสียคือใช้หน่วยความจำมากกว่าและทำนายช้ากว่าต้นไม้เดี่ยว อีกทั้งอธิบายได้ยากกว่า
ตรวจสอบความเข้าใจ
ตรวจสอบความเข้าใจเรื่อง Bagging และป่าสุ่ม
สรุป
สรุป: Bagging ฝึกแบบจำลองด้วยชุดตัวอย่างบูตสแตรป แล้วหาค่าเฉลี่ยเพื่อลดความแปรปรวน ป่าสุ่มเพิ่มชุดย่อยของคุณลักษณะที่สุ่มเลือกในการแบ่งแต่ละครั้ง ปรับแต่งด้วย n_estimators ใช้ n_jobs=-1 เพื่อเพิ่มความเร็ว รับการตรวจสอบความถูกต้องโดยไม่ต้องเสียค่าใช้จ่ายเพิ่มเติมผ่าน oob_score และเลือกใช้ permutation_importance แทนความสำคัญที่อิงความไม่บริสุทธิ์ เพื่อให้การจัดอันดับน่าเชื่อถือ
คำถามที่พบบ่อย
บทเรียน “ป่าสุ่มและแบ็กกิง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ป่าสุ่มและแบ็กกิง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ป่าสุ่มและแบ็กกิง”
แนวคิดการรวมโมเดล RandomForestClassifier, n_estimators, ความสำคัญของคุณลักษณะ และคะแนน OOB คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ป่าสุ่มและแบ็กกิง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ต้นไม้ตัดสินใจ: ทฤษฎีและการนำไปใช้
- ป่าสุ่มและแบ็กกิง
- การเพิ่มแบบไล่ระดับ: GBM และ XGBoost
- LightGBM และ CatBoost