R Academy · บทเรียน

การกำหนดรายละเอียดโมเดลด้วย parsnip

ระบุประเภทโมเดลและกลไกการทำงานโดยแยกจากขั้นตอนการฝึก

บทเรียน 2 จาก 413 ขั้นตอน

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

parsnip คืออะไร

parsnip มีส่วนติดต่อแบบรวมสำหรับกลไกของโมเดลนับร้อย แทนที่จะต้องเรียนรู้ไวยากรณ์เฉพาะของแต่ละแพ็กเกจ (glm(), randomForest(), e1071::svm()) คุณสามารถเขียนข้อกำหนดที่มีรูปแบบเดียวกัน แล้วบอก parsnip ว่าต้องการใช้กลไกใดอยู่เบื้องหลัง

ซึ่งหมายความว่าคุณสามารถสลับกลไกได้ เช่น จาก glm เป็น stan สำหรับการถดถอยโลจิสติกแบบเบย์ โดยเปลี่ยนอาร์กิวเมนต์เพียงตัวเดียว

library(parsnip)

# The same interface, different engines
logistic_reg() |> set_engine('glm')    # base R
logistic_reg() |> set_engine('glmnet') # regularized
logistic_reg() |> set_engine('stan')   # Bayesian

logistic_reg() สำหรับการจำแนกประเภท

logistic_reg() ใช้ระบุโมเดลการถดถอยโลจิสติกสำหรับการจำแนกประเภทแบบทวิภาค เชื่อมต่อ set_engine('glm') เพื่อใช้กลไก GLM ในตัวของ R และใช้ set_mode('classification') เพื่อประกาศประเภทงานอย่างชัดเจน

ต้องระบุโหมด ('classification' หรือ 'regression') สำหรับประเภทโมเดลที่รองรับทั้งสองแบบ

log_spec <- logistic_reg() |>
  set_engine('glm') |>
  set_mode('classification')

print(log_spec)
# Logistic Regression Model Specification (classification)
# Computational engine: glm

rand_forest() กับ tune()

rand_forest() ใช้ระบุ Random Forest พารามิเตอร์อย่าง mtry (จำนวนคุณลักษณะต่อการแบ่งแต่ละครั้ง) และ trees สามารถกำหนดค่าแน่นอน หรือกำหนดเป็น tune() เพื่อใช้เป็นตัวยึดตำแหน่งสำหรับการค้นหาพารามิเตอร์ไฮเปอร์

เมื่อส่ง tune() tidymodels จะค้นหาค่าต่าง ๆ ในกริดระหว่างการปรับแต่งด้วยการตรวจสอบไขว้

rf_spec <- rand_forest(
  mtry  = tune(),
  trees = 500,
  min_n = tune()
) |>
  set_engine('ranger', importance = 'impurity') |>
  set_mode('classification')

print(rf_spec)

linear_reg() สำหรับการถดถอย

linear_reg() ใช้ระบุแบบจำลองการถดถอยเชิงเส้น การใช้ set_engine('lm') จะใช้วิธีกำลังสองน้อยที่สุดแบบธรรมดา ส่วน set_engine('glmnet') จะเปิดใช้การทำให้เป็นปกติแบบ L1/L2 ผ่านพารามิเตอร์ penalty และ mixture

# OLS linear regression
lm_spec <- linear_reg() |>
  set_engine('lm')

# Ridge regression (penalty > 0, mixture = 0)
ridge_spec <- linear_reg(penalty = 0.01, mixture = 0) |>
  set_engine('glmnet')

# Lasso (penalty > 0, mixture = 1)
lasso_spec <- linear_reg(penalty = tune(), mixture = 1) |>
  set_engine('glmnet')

boost_tree() — การเพิ่มต้นไม้แบบเกรเดียนต์

boost_tree() ใช้ระบุแบบจำลองต้นไม้ที่เพิ่มแบบเกรเดียนต์ คุณสามารถเลือกเครื่องยนต์ xgboost, lightgbm หรือ C5.0 ได้ พารามิเตอร์ที่ปรับได้ ได้แก่ tree_depth, learn_rate และ loss_reduction

xgb_spec <- boost_tree(
  trees      = 500,
  tree_depth = tune(),
  learn_rate = tune(),
  loss_reduction = tune()
) |>
  set_engine('xgboost') |>
  set_mode('classification')

print(xgb_spec)

fit() — ฝึกแบบจำลอง

fit(spec, formula, data) ใช้ฝึกข้อกำหนดแบบจำลองกับข้อมูลจริง โดยภายใน parsnip จะแปลงข้อกำหนดให้เป็นการเรียกใช้เครื่องยนต์ที่เหมาะสม ผลลัพธ์คือออบเจ็กต์แบบจำลอง parsnip ที่ผ่านการฝึกแล้ว

lm_spec <- linear_reg() |> set_engine('lm')

# Fit the model on training data
lm_fit <- fit(lm_spec, mpg ~ wt + hp + cyl, data = mtcars)

# The fitted object wraps the engine result
print(lm_fit)

# Access the underlying lm object
extract_fit_engine(lm_fit)

fit_xy() — ส่วนติดต่อแบบเมทริกซ์

fit_xy(spec, x, y) เป็นอีกทางเลือกหนึ่งนอกเหนือจาก fit(spec, formula, data) โดยรับเมทริกซ์ตัวทำนาย x และเวกเตอร์คำตอบ y โดยตรง เหมาะเมื่อข้อมูลของคุณถูกเตรียมให้อยู่ในรูปเมทริกซ์ตัวเลขแล้ว ซึ่งมักพบในการใช้โครงข่ายประสาทเทียมหรือ XGBoost

x_train <- train_baked |> select(-price)
y_train <- train_baked$price

lm_spec <- linear_reg() |> set_engine('lm')

# Matrix-style fit
lm_fit_xy <- fit_xy(lm_spec, x = x_train, y = y_train)

print(lm_fit_xy)

translate() — ดูโค้ดของเครื่องยนต์

translate(spec) แสดงให้เห็นอย่างชัดเจนว่า parsnip จะเรียกใช้อะไรภายในสำหรับเครื่องยนต์ที่กำหนด ฟังก์ชันนี้มีประโยชน์อย่างยิ่งสำหรับการแก้ไขข้อผิดพลาดหรือทำความเข้าใจว่าข้อกำหนด parsnip ของคุณเชื่อมโยงกับส่วนติดต่อดั้งเดิมของเครื่องยนต์อย่างไร

rf_spec <- rand_forest(mtry = 3, trees = 500) |>
  set_engine('ranger') |>
  set_mode('classification')

# See what ranger() call will be generated
translate(rf_spec)

# ranger::ranger(formula = ..., data = ...,
#   num.trees = 500, mtry = 3, ...)

predict() กับ parsnip

แบบจำลอง parsnip ที่ผ่านการฝึกทั้งหมดใช้ส่วนติดต่อ predict() เดียวกัน สำหรับการจำแนกประเภท type = 'class' จะส่งคืนประเภทที่คาดการณ์ และ type = 'prob' จะส่งคืนความน่าจะเป็นของแต่ละประเภท ความสอดคล้องนี้เป็นข้อได้เปรียบสำคัญประการหนึ่งของ parsnip

log_fit <- fit(logistic_reg() |> set_engine('glm') |> set_mode('classification'),
               species ~ ., data = train_df)

# Predicted classes
predict(log_fit, new_data = test_df, type = 'class')

# Predicted probabilities
predict(log_fit, new_data = test_df, type = 'prob')

augment() — เพิ่มค่าคาดการณ์ลงในข้อมูล

augment(fitted_model, new_data) จะเพิ่มคอลัมน์ค่าคาดการณ์ลงในกรอบข้อมูลนำเข้าโดยตรง วิธีนี้สะดวกสำหรับการประเมินผล เพราะผลลัพธ์จะมีทั้งค่าจริงและค่าคาดการณ์วางเคียงกัน พร้อมสำหรับการคำนวณตัวชี้วัด

log_fit <- fit(
  logistic_reg() |> set_engine('glm') |> set_mode('classification'),
  species ~ ., data = train_df
)

# Get predictions joined to test data
results <- augment(log_fit, new_data = test_df)
head(results[, c('species', '.pred_class', '.pred_setosa')])

การเปรียบเทียบข้อกำหนดแบบจำลอง

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

specs <- list(
  lm    = linear_reg() |> set_engine('lm'),
  ridge = linear_reg(penalty = 0.01, mixture = 0) |> set_engine('glmnet'),
  rf    = rand_forest(trees = 200) |> set_engine('ranger') |> set_mode('regression')
)

fits <- lapply(specs, fit, mpg ~ ., data = train_mtcars)

preds <- lapply(fits, predict, new_data = test_mtcars)

rmse_vals <- sapply(preds, function(p) {
  sqrt(mean((p$.pred - test_mtcars$mpg)^2))
})
print(rmse_vals)

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

ใน parsnip translate(spec) ส่งคืนอะไร

สรุป parsnip

ประเด็นสำคัญจากข้อกำหนดแบบจำลองด้วย parsnip:

  • parsnip มีส่วนติดต่อแบบรวมเป็นหนึ่งเดียว โดยแยกการระบุประเภทแบบจำลอง เครื่องยนต์ และโหมดออกจากกัน
  • set_engine() ใช้เลือกแพ็กเกจพื้นฐาน ส่วน set_mode() ใช้เลือกการจำแนกประเภทหรือการถดถอย
  • ใช้ tune() เป็นตัวยึดตำแหน่งสำหรับพารามิเตอร์ไฮเปอร์ที่ต้องค้นหาในภายหลัง
  • fit(spec, formula, data) ใช้ฝึกแบบจำลอง ส่วน fit_xy(spec, x, y) ใช้รับเมทริกซ์
  • predict(fit, new_data, type) ทำงานสอดคล้องกันในทุกเครื่องยนต์
  • translate(spec) แสดงการเรียกใช้เครื่องยนต์เพื่อช่วยแก้ไขข้อผิดพลาด
  • augment(fit, new_data) เพิ่มค่าคาดการณ์ลงในกรอบข้อมูล
# Parsnip model comparison template
spec <- rand_forest(trees = 500, mtry = tune()) |>
  set_engine('ranger', importance = 'impurity') |>
  set_mode('classification')

print(translate(spec))

# When mtry is fixed:
spec_fixed <- rand_forest(trees = 500, mtry = 5) |>
  set_engine('ranger') |>
  set_mode('classification')
fit_fixed <- fit(spec_fixed, label ~ ., data = train_df)
เริ่มต้นได้ฟรี

เรียนรู้ R ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
43
บทเรียน
159

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

บทเรียน “การกำหนดรายละเอียดโมเดลด้วย parsnip” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดรายละเอียดโมเดลด้วย parsnip”

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

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

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

บทเรียน “การกำหนดรายละเอียดโมเดลด้วย parsnip” ใช้เวลานานแค่ไหน

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

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

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

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

  1. วิศวกรรมคุณลักษณะด้วย recipes
  2. การกำหนดรายละเอียดโมเดลด้วย parsnip
  3. เวิร์กโฟลว์: การรวมสูตรกับโมเดล
  4. การสุ่มตัวอย่างใหม่และการตรวจสอบไขว้ด้วย rsample
← กลับไปที่ R Academy