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

การค้นหาแบบกริดและการค้นหาแบบสุ่ม

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

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

  1. กลยุทธ์การตรวจสอบไขว้
  2. เจาะลึกเมตริกการจำแนกประเภท
  3. การค้นหาแบบกริดและการค้นหาแบบสุ่ม
  4. การหาค่าเหมาะที่สุดแบบเบย์ด้วย Optuna
← กลับไปที่ Learn AI with Python