การค้นหาแบบกริดและการค้นหาแบบสุ่ม
GridSearchCV, RandomizedSearchCV การออกแบบ param_grid และการฟิตใหม่ด้วยพารามิเตอร์ที่ดีที่สุด
การค้นหาแบบกริดและการค้นหาแบบสุ่ม เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องปรับไฮเปอร์พารามิเตอร์
โมเดลมีไฮเปอร์พารามิเตอร์ เช่น max_depth หรือ C ซึ่งไม่ได้เรียนรู้จากข้อมูล แต่กำหนดไว้ก่อนการฝึก ค่าเหล่านี้ที่เหมาะสมสามารถเพิ่มประสิทธิภาพได้อย่างมาก เราจึงค้นหาค่าดังกล่าวอย่างเป็นระบบ
การปรับด้วยตนเองมีโอกาสเกิดข้อผิดพลาด
การลองค่าต่าง ๆ ด้วยตนเองใช้เวลานานและทำให้เกิดอคติได้ง่าย การค้นหาแบบอัตโนมัติร่วมกับการตรวจสอบไขว้จะประเมินตัวเลือกแต่ละรายการอย่างเป็นธรรม และค้นหาชุดค่าที่ดีที่สุดได้อย่างทำซ้ำได้
พื้นฐานของ GridSearchCV
GridSearchCV จะลองทุกชุดผสมในกริดพารามิเตอร์ พร้อมให้คะแนนแต่ละชุดด้วยการตรวจสอบไขว้ วิธีนี้ค้นหาอย่างครบถ้วนและรับประกันว่าจะได้จุดที่ดีที่สุดในกริด
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
param_grid = {
"n_estimators": [100, 200, 300],
"max_depth": [4, 8, None],
}
gs = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)
gs.fit(X, y)จำนวนชุดผสมที่เพิ่มขึ้นอย่างรวดเร็ว
ต้นทุนของการค้นหาแบบกริดเพิ่มขึ้นตามผลคูณของจำนวนตัวเลือกทั้งหมด คูณด้วยจำนวนส่วนที่ใช้ตรวจสอบ สามพารามิเตอร์ที่มีค่าละ 5 ค่า และใช้ CV แบบ 5 ส่วน จะต้องทำ fit จำนวน 5*5*5*5 = 625 ครั้ง กริดจะมีค่าใช้จ่ายสูงขึ้นอย่างรวดเร็ว
การให้คะแนนใน GridSearchCV
พารามิเตอร์ scoring ใช้เลือกตัวชี้วัดที่จะปรับให้เหมาะที่สุด สำหรับข้อมูลที่ไม่สมดุล ให้เลือก f1 หรือ roc_auc แทนความแม่นยำเริ่มต้น
from sklearn.model_selection import GridSearchCV
gs = GridSearchCV(
RandomForestClassifier(),
param_grid,
cv=5,
scoring="roc_auc",
)
gs.fit(X, y)การทำงานแบบขนานด้วย n_jobs
การทำ fit ของตัวเลือกแต่ละรายการเป็นอิสระต่อกัน ดังนั้นให้ตั้งค่า n_jobs=-1 เพื่อให้ทำงานบนแกนประมวลผล CPU ทั้งหมด วิธีนี้ลดเวลาจริงที่ใช้ไปกับกริดขนาดใหญ่ได้อย่างมาก
from sklearn.model_selection import GridSearchCV
gs = GridSearchCV(
RandomForestClassifier(),
param_grid,
cv=5,
n_jobs=-1,
verbose=1,
)การอ่านผลลัพธ์ที่ดีที่สุด
หลังจากฝึกโมเดลแล้ว ให้ตรวจสอบ best_params_ เพื่อดูชุดค่าที่ชนะ ตรวจสอบ best_score_ เพื่อดูคะแนน CV ของชุดนั้น และตรวจสอบ best_estimator_ เพื่อดูโมเดลที่ฝึกใหม่และพร้อมใช้ predict
gs.fit(X, y)
print("Best params:", gs.best_params_)
print("Best CV score:", gs.best_score_)
best_model = gs.best_estimator_
best_model.predict(X_new)การตรวจสอบผลลัพธ์ทั้งหมด
cv_results_ เป็นพจนานุกรม ซึ่งเหมาะอย่างยิ่งสำหรับแปลงเป็น DataFrame และแสดงคะแนนกับอันดับของตัวเลือกทุกชุด ใช้เพื่อทำความเข้าใจว่าพารามิเตอร์ใดสำคัญ และคะแนนมีความคงที่เพียงใด
import pandas as pd
results = pd.DataFrame(gs.cv_results_)
print(results[["params", "mean_test_score", "rank_test_score"]].head())RandomizedSearchCV
เมื่อพื้นที่ค้นหามีขนาดใหญ่มาก RandomizedSearchCV จะสุ่มตัวอย่างชุดค่าผสมตามจำนวนที่กำหนด แทนการลองทั้งหมด คุณควบคุมงบประมาณได้ด้วย n_iter
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
param_dist = {
"n_estimators": randint(100, 500),
"max_depth": randint(3, 20),
}
rs = RandomizedSearchCV(
RandomForestClassifier(), param_dist,
n_iter=30, cv=5, random_state=0,
)
rs.fit(X, y)เหตุใดการค้นหาแบบสุ่มจึงมักให้ผลดีกว่า
ในปัญหาหลายประเภท มีไฮเปอร์พารามิเตอร์เพียงไม่กี่ตัวที่สำคัญจริง ๆ การค้นหาแบบสุ่มสำรวจมิติสำคัญเหล่านั้นได้มีประสิทธิภาพกว่ากริดตายตัว จึงค้นหาคำตอบที่ดีได้ด้วยการทดลองจำนวนน้อยกว่ามาก
แนวทางเลือกระหว่างกริดกับการสุ่ม
ใช้ GridSearchCV เมื่อมีตัวเลือกจำนวนน้อยและเป็นค่าที่แยกจากกันชัดเจน ใช้ RandomizedSearchCV เมื่อพื้นที่ค้นหามีขนาดใหญ่หรือต่อเนื่อง และคุณกำหนดงบประมาณ n_iter เอง ทั้งสองวิธีจะฝึกโมเดลที่ดีที่สุดใหม่โดยอัตโนมัติเมื่อ refit=True
ตรวจสอบความเข้าใจ
ตรวจสอบความรู้เกี่ยวกับการค้นหาไฮเปอร์พารามิเตอร์ของคุณ
สรุป
สรุป: GridSearchCV จะทดสอบทุกชุดผสมใน param_grid อย่างครบถ้วน และต้นทุนจะเพิ่มขึ้นอย่างรวดเร็วตามขนาด RandomizedSearchCV จะสุ่มตัวอย่างชุดผสมจำนวน n_iter ชุดสำหรับพื้นที่ขนาดใหญ่ ตั้งค่า scoring เพื่อเลือกตัวชี้วัด ตั้งค่า n_jobs=-1 เพื่อเพิ่มความเร็ว และอ่านค่า best_params_, best_score_ กับ best_estimator_ หลังจากฝึกโมเดล
คำถามที่พบบ่อย
บทเรียน “การค้นหาแบบกริดและการค้นหาแบบสุ่ม” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การค้นหาแบบกริดและการค้นหาแบบสุ่ม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การค้นหาแบบกริดและการค้นหาแบบสุ่ม”
GridSearchCV, RandomizedSearchCV การออกแบบ param_grid และการฟิตใหม่ด้วยพารามิเตอร์ที่ดีที่สุด คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การค้นหาแบบกริดและการค้นหาแบบสุ่ม” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กลยุทธ์การตรวจสอบไขว้
- เจาะลึกเมตริกการจำแนกประเภท
- การค้นหาแบบกริดและการค้นหาแบบสุ่ม
- การหาค่าเหมาะที่สุดแบบเบย์ด้วย Optuna