โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม
สร้างและปรับแต่งโมเดลต้นไม้ตัดสินใจและโมเดลป่าแบบรวมกลุ่ม
โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- API ของ scikit-learn: fit, transform, predict
- โมเดลเชิงเส้น: การถดถอยและการจำแนกประเภท
- โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม
- การประเมินโมเดลและการตรวจสอบไขว้