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

วิศวกรรมคุณลักษณะด้วย recipes

กำหนดขั้นตอนการเตรียมข้อมูลสำหรับการทำให้เป็นมาตรฐาน การเข้ารหัส และการเติมค่าที่หายไป

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

Recipe คืออะไร

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

ฟังก์ชันสำคัญคือ recipe(outcome ~ ., data = train) ซึ่งกำหนดสูตรและชุดข้อมูลอ้างอิงที่ใช้ประมาณค่าสถิติใด ๆ ที่จำเป็นระหว่างการเตรียมข้อมูล

library(recipes)
library(tidymodels)

# Create a recipe using the training data
rec <- recipe(price ~ ., data = train_data)
print(rec)

step_normalize()

step_normalize(all_numeric_predictors()) จะปรับค่าตัวแปรทำนายเชิงตัวเลขแต่ละตัวให้อยู่กึ่งกลางที่ค่าเฉลี่ย 0 และปรับขนาดให้มีส่วนเบี่ยงเบนมาตรฐานเป็น 1 ขั้นตอนนี้จำเป็นสำหรับอัลกอริทึมที่ไวต่อมาตราส่วนของคุณลักษณะ เช่น การถดถอยโลจิสติก, SVM หรือโครงข่ายประสาทเทียม

ค่าเฉลี่ยและ SD จะคำนวณจากชุดข้อมูลฝึก และนำไปใช้กับข้อมูลทดสอบอย่างสอดคล้องกันผ่าน bake()

rec <- recipe(price ~ ., data = train_data) |>
  step_normalize(all_numeric_predictors())

# Check what steps are recorded
print(rec)

step_dummy()

step_dummy(all_nominal_predictors()) จะแปลงตัวแปรเชิงหมวดหมู่ (แฟกเตอร์/อักขระ) เป็นคอลัมน์ตัวแปรจำลองเชิงตัวเลข (เข้ารหัสแบบ one-hot) โดยค่าเริ่มต้นจะสร้าง k-1 คอลัมน์สำหรับแฟกเตอร์ที่มี k ระดับ เพื่อหลีกเลี่ยงพหุสัมพันธ์เชิงเส้นอย่างสมบูรณ์

ใช้ one_hot = TRUE สำหรับโมเดลแบบต้นไม้ที่ได้ประโยชน์จากการเข้ารหัสแบบ one-hot ครบทุกระดับ

rec <- recipe(price ~ ., data = train_data) |>
  step_dummy(all_nominal_predictors())

# After prep and bake, factor columns become 0/1 numeric columns
prepped <- prep(rec)
baked <- bake(prepped, new_data = NULL)
names(baked)

step_impute_median()

ค่าที่หายไปจะทำให้กลไกของโมเดลส่วนใหญ่ทำงานล้มเหลว step_impute_median(all_numeric_predictors()) จะแทนค่า NA ด้วยค่ามัธยฐานที่คำนวณจากชุดข้อมูลฝึก ค่ามัธยฐานได้รับผลกระทบจากค่าผิดปกติน้อยกว่าการแทนค่าด้วยค่าเฉลี่ย

สำหรับตัวแปรเชิงหมวดหมู่ ให้ใช้ step_impute_mode() เพื่อเติมค่าที่ปรากฏบ่อยที่สุด

rec <- recipe(price ~ ., data = train_data) |>
  step_impute_median(all_numeric_predictors()) |>
  step_impute_mode(all_nominal_predictors())

print(rec)

step_zv() — ลบความแปรปรวนเป็นศูนย์

step_zv(all_predictors()) จะลบตัวแปรทำนายที่มีค่าที่ไม่ซ้ำกันเพียงค่าเดียว (ความแปรปรวนเป็นศูนย์) คอลัมน์ดังกล่าวไม่มีข้อมูลที่เป็นประโยชน์ และอาจทำให้กลไกของโมเดลบางชนิดเกิดข้อผิดพลาด

สำหรับความแปรปรวนเกือบเป็นศูนย์ ให้ใช้ step_nzv(all_predictors()) ซึ่งจะลบคอลัมน์ที่ค่าหนึ่งมีสัดส่วนสูงมากจนเกินไปด้วย

rec <- recipe(price ~ ., data = train_data) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

print(rec)

prep() — ฝึก Recipe

prep(recipe) จะประมาณค่าพารามิเตอร์ทั้งหมดที่ขั้นตอนต่าง ๆ ต้องใช้ เช่น ค่าเฉลี่ย/SD สำหรับการปรับมาตรฐาน และค่ามัธยฐานสำหรับการแทนค่า โดยใช้ข้อมูลฝึก ผลลัพธ์คือ Recipe ที่ผ่านการเตรียมแล้ว ซึ่งทราบพารามิเตอร์การแปลงทั้งหมด

ให้เรียกใช้ prep กับข้อมูลฝึกเท่านั้นเสมอ เพื่อหลีกเลี่ยงการรั่วไหลของข้อมูลจากชุดข้อมูลทดสอบ

# Build the full recipe
rec <- recipe(price ~ ., data = train_data) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

# Estimate parameters from training data
prepped_rec <- prep(rec)
print(prepped_rec)

bake() — นำไปใช้กับข้อมูลใหม่

bake(prepped_recipe, new_data = test_data) จะใช้ขั้นตอนการเตรียมข้อมูลทั้งหมดกับชุดข้อมูลใด ๆ โดยอาศัยพารามิเตอร์ที่ประมาณค่าไว้แล้ว วิธีนี้ช่วยให้การแปลงข้อมูลระหว่างชุดข้อมูลฝึกและชุดข้อมูลทดสอบสอดคล้องกัน

ส่ง new_data = NULL เพื่อใช้กับข้อมูลฝึกที่ใช้ระหว่าง prep()

# Apply recipe to test data
baked_test <- bake(prepped_rec, new_data = test_data)
head(baked_test)

# Apply to training data (same as juice())
baked_train <- bake(prepped_rec, new_data = NULL)
dim(baked_train)

juice() — ดึงข้อมูลฝึกที่ประมวลผลแล้ว

juice(prepped_recipe) เป็นฟังก์ชันอำนวยความสะดวกที่เทียบเท่ากับ bake(prepped_recipe, new_data = NULL) โดยคืนค่าข้อมูลฝึกที่ผ่านการเตรียมแล้วและใช้ระหว่าง prep()

หมายเหตุ: juice() กำลังถูกลดการใช้งานลงเล็กน้อยเพื่อสนับสนุน bake(prep, new_data = NULL) แต่คุณอาจพบฟังก์ชันนี้ในโค้ด tidymodels รุ่นเก่า

# juice() extracts the processed training data
train_processed <- juice(prepped_rec)
glimpse(train_processed)

# Equivalent modern approach
train_modern <- bake(prepped_rec, new_data = NULL)
identical(train_processed, train_modern)  # TRUE

การรวมหลายขั้นตอน

ขั้นตอนต่าง ๆ จะทำงานตามลำดับที่เพิ่มเข้าไป Recipe สำหรับใช้งานจริงโดยทั่วไปจะเรียงลำดับดังนี้:

  1. การแทนค่าที่หายไป (แก้ไข NA ก่อน)
  2. การสร้างคุณลักษณะ (ปฏิสัมพันธ์ พหุนาม)
  3. การเข้ารหัสตัวแปรจำลอง (แปลงแฟกเตอร์)
  4. การลบความแปรปรวนเป็นศูนย์
  5. การปรับมาตรฐาน (ปรับขนาดเป็นขั้นตอนสุดท้าย)

ลำดับนี้มีความสำคัญ เช่น การปรับมาตรฐานก่อนการเข้ารหัสตัวแปรจำลองจะให้ผลลัพธ์ไม่ถูกต้อง

full_rec <- recipe(sale_price ~ ., data = housing_train) |>
  step_impute_median(all_numeric_predictors()) |>
  step_impute_mode(all_nominal_predictors()) |>
  step_log(sale_price, base = 10) |>
  step_other(all_nominal_predictors(), threshold = 0.05) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

print(full_rec)

การตรวจสอบผลลัพธ์จาก prep

หลังจากเรียกใช้ prep() แล้ว คุณสามารถตรวจสอบว่าแต่ละขั้นตอนทำอะไรได้ด้วย tidy(prepped_rec) แต่ละขั้นตอนจะมีหมายเลขประจำตัว และคุณสามารถตรวจสอบรายละเอียดด้วย tidy(prepped_rec, number = 1) เพื่อดูพารามิเตอร์ที่ประมาณค่าไว้

prepped_rec <- prep(full_rec)

# View all steps and their status
tidy(prepped_rec)

# Inspect normalization parameters (mean, sd per column)
tidy(prepped_rec, number = 5)  # step_normalize is step 5

การใช้ Recipe ในทางปฏิบัติ

Recipe มีประโยชน์อย่างมากเมื่อใช้ร่วมกับเวิร์กโฟลว์ แทนที่จะเรียกใช้ prep() และ bake() ด้วยตนเอง คุณสามารถเพิ่ม Recipe ลงในเวิร์กโฟลว์ แล้วให้ tidymodels จัดการ prep/bake โดยอัตโนมัติระหว่าง fit() และ predict()

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

library(workflows)

# Recipe + model spec combined in a workflow
wf <- workflow() |>
  add_recipe(full_rec) |>
  add_model(linear_reg() |> set_engine('lm'))

# fit() internally calls prep() + bake() on training data
fitted_wf <- fit(wf, data = housing_train)

# predict() applies bake() to new data automatically
predictions <- predict(fitted_wf, new_data = housing_test)
head(predictions)

ตรวจสอบอย่างรวดเร็ว

การเรียกใช้ prep(recipe) ในกรอบงาน Recipe ของ tidymodels ทำอะไร

ทบทวน Recipe

ประเด็นสำคัญจากบทวิศวกรรมคุณลักษณะด้วย Recipe:

  • recipe(outcome ~ ., data = train) กำหนดพิมพ์เขียวการเตรียมข้อมูล
  • step_normalize(), step_dummy(), step_impute_median(), step_zv() เป็นขั้นตอนที่ใช้บ่อยที่สุด
  • prep() จะประมาณค่าพารามิเตอร์จากข้อมูลฝึกเท่านั้น — ห้ามใช้ข้อมูลทดสอบ
  • bake(prepped, new_data) นำ Recipe ที่ฝึกแล้วไปใช้กับชุดข้อมูลใด ๆ
  • ลำดับขั้นตอนมีความสำคัญ: แทนค่า → สร้าง → เข้ารหัส → ลบ → ปรับขนาด
  • ในการใช้งานจริง ให้ห่อ Recipe ไว้ใน workflow() เพื่อทำให้ prep/bake เป็นอัตโนมัติระหว่าง fit และ predict
# Full pipeline in 6 lines
rec <- recipe(target ~ ., data = train) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

prepped <- prep(rec)
train_baked <- bake(prepped, new_data = NULL)
test_baked  <- bake(prepped, new_data = test)

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

บทเรียน “วิศวกรรมคุณลักษณะด้วย recipes” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “วิศวกรรมคุณลักษณะด้วย recipes”

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

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

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

บทเรียน “วิศวกรรมคุณลักษณะด้วย recipes” ใช้เวลานานแค่ไหน

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

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

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

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

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