0Pricing
Learn AI with Python · บทเรียน

ป่าสุ่มและแบ็กกิง

แนวคิดการรวมโมเดล 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ต้นไม้ตัดสินใจ: ทฤษฎีและการนำไปใช้
  2. ป่าสุ่มและแบ็กกิง
  3. การเพิ่มแบบไล่ระดับ: GBM และ XGBoost
  4. LightGBM และ CatBoost
← กลับไปที่ Learn AI with Python