0Pricing
Python Academy · บทเรียน

โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม

สร้างและปรับแต่งโมเดลต้นไม้ตัดสินใจและโมเดลป่าแบบรวมกลุ่ม

โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

แนวคิดเกี่ยวกับต้นไม้ตัดสินใจ

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

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
model = DecisionTreeClassifier(max_depth=3, random_state=0).fit(X, y)
print("Depth:", model.get_depth())
print("Leaves:", model.get_n_leaves())

DecisionTreeClassifier

ไฮเปอร์พารามิเตอร์สำคัญ ได้แก่ max_depth, min_samples_split และ min_samples_leaf ต้นไม้ที่ลึกเกินไปจะปรับเข้ากับข้อมูลมากเกินไป ส่วนต้นไม้ที่ตื้นเกินไปจะปรับเข้ากับข้อมูลน้อยเกินไป

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)

model = DecisionTreeClassifier(max_depth=5, min_samples_leaf=5)
model.fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))

DecisionTreeRegressor

ต้นไม้ตัดสินใจยังรองรับการถดถอยด้วยการทำนายค่าเป้าหมายเฉลี่ยในใบไม้แต่ละใบ

from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import make_regression
from sklearn.metrics import mean_squared_error

X, y = make_regression(noise=15, random_state=0)
model = DecisionTreeRegressor(max_depth=4).fit(X, y)
print("RMSE:", mean_squared_error(y, model.predict(X))**0.5)

ความสำคัญของคุณลักษณะ

model.feature_importances_ แสดงความสำคัญสัมพัทธ์ของคุณลักษณะแต่ละรายการ โดยพิจารณาจากการลดความไม่บริสุทธิ์

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import numpy as np

X, y = load_iris(return_X_y=True)
feature_names = load_iris().feature_names
model = DecisionTreeClassifier().fit(X, y)
for name, imp in sorted(zip(feature_names, model.feature_importances_), key=lambda x: -x[1]):
    print(f"{name}: {imp:.3f}")

ภาพรวมของป่าสุ่ม

ป่าสุ่มฝึกต้นไม้ตัดสินใจหลายต้นที่ไม่สัมพันธ์กันบนตัวอย่างบูตสแตรป แล้วหาค่าเฉลี่ยของค่าทำนาย ซึ่งช่วยลดความแปรปรวนโดยไม่เพิ่มอคติ

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)

model = RandomForestClassifier(n_estimators=100, random_state=0)
model.fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))

RandomForestRegressor

ป่าสุ่มทำงานได้ดีไม่แพ้กันสำหรับการถดถอย

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
from sklearn.metrics import r2_score

X, y = make_regression(noise=10, random_state=0)
model = RandomForestRegressor(n_estimators=100, random_state=0).fit(X, y)
print("R²:", r2_score(y, model.predict(X)))

คะแนนนอกถุง

กำหนด oob_score=True เพื่อรับคะแนนการตรวจสอบความถูกต้องโดยไม่ต้องดำเนินการเพิ่มเติม โดยใช้ตัวอย่างที่ไม่ได้อยู่ในตัวอย่างบูตสแตรปของต้นไม้แต่ละต้น จึงไม่จำเป็นต้องมีชุดทดสอบแยกต่างหาก

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
model = RandomForestClassifier(n_estimators=100, oob_score=True, random_state=0).fit(X, y)
print("OOB score:", model.oob_score_)

การเพิ่มแบบไล่ระดับ

การเพิ่มแบบไล่ระดับ (GBM) ฝึกต้นไม้ตามลำดับ โดยแต่ละต้นจะแก้ไขข้อผิดพลาดของต้นก่อนหน้า วิธีนี้มักแม่นยำกว่าป่าสุ่ม แต่ใช้เวลาฝึกนานกว่า

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = GradientBoostingClassifier(n_estimators=100).fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))

XGBoost / LightGBM

XGBoost และ LightGBM เป็นไลบรารีการเพิ่มแบบไล่ระดับที่ได้รับการปรับให้เหมาะสม จึงเร็วกว่า รองรับการขยายขนาดได้ดีกว่า และมักแม่นยำกว่า GBM ของไลบรารี sklearn

# pip install xgboost lightgbm
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)

xgb = XGBClassifier(n_estimators=100, eval_metric="logloss").fit(X_tr, y_tr)
print("XGB acc:", xgb.score(X_te, y_te))

การปรับค่า n_estimators

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

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_classification
import numpy as np

X, y = make_classification(random_state=0)
for n in [10, 50, 100, 200]:
    scores = cross_val_score(RandomForestClassifier(n_estimators=n, random_state=0), X, y, cv=5)
    print(f"n={n}: {scores.mean():.3f}")

การแสดงภาพต้นไม้ตัดสินใจ

ใช้ sklearn.tree.plot_tree หรือ export_text เพื่อตรวจสอบว่าต้นไม้เรียนรู้อะไร

from sklearn.tree import DecisionTreeClassifier, export_text, plot_tree
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
model = DecisionTreeClassifier(max_depth=2).fit(X, y)
print(export_text(model, feature_names=load_iris().feature_names.tolist()))

ตรวจสอบความเข้าใจ

ป่าสุ่มช่วยลดการปรับเข้ากับข้อมูลมากเกินไปเมื่อเทียบกับต้นไม้ตัดสินใจต้นเดียวได้อย่างไร

สรุปทบทวน

ต้นไม้ตัดสินใจแบ่งข้อมูลตามเกณฑ์ของคุณลักษณะและทำนายด้วยค่าที่ใบไม้ ปรับค่า max_depth เพื่อควบคุมการปรับเข้ากับข้อมูลมากเกินไป ป่าสุ่มหาค่าเฉลี่ยจากต้นไม้หลายต้นเพื่อลดความแปรปรวน การเพิ่มแบบไล่ระดับฝึกต้นไม้ตามลำดับเพื่อให้ได้ความแม่นยำสูง สำหรับการใช้งานจริง ควรเลือกใช้ XGBoost หรือ LightGBM

คำถามที่พบบ่อย

บทเรียน “โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม”

สร้างและปรับแต่งโมเดลต้นไม้ตัดสินใจและโมเดลป่าแบบรวมกลุ่ม คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. API ของ scikit-learn: fit, transform, predict
  2. โมเดลเชิงเส้น: การถดถอยและการจำแนกประเภท
  3. โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม
  4. การประเมินโมเดลและการตรวจสอบไขว้
← กลับไปที่ Python Academy