วิศวกรรมคุณลักษณะด้วย 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 สำหรับใช้งานจริงโดยทั่วไปจะเรียงลำดับดังนี้:
- การแทนค่าที่หายไป (แก้ไข NA ก่อน)
- การสร้างคุณลักษณะ (ปฏิสัมพันธ์ พหุนาม)
- การเข้ารหัสตัวแปรจำลอง (แปลงแฟกเตอร์)
- การลบความแปรปรวนเป็นศูนย์
- การปรับมาตรฐาน (ปรับขนาดเป็นขั้นตอนสุดท้าย)
ลำดับนี้มีความสำคัญ เช่น การปรับมาตรฐานก่อนการเข้ารหัสตัวแปรจำลองจะให้ผลลัพธ์ไม่ถูกต้อง
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- วิศวกรรมคุณลักษณะด้วย recipes
- การกำหนดรายละเอียดโมเดลด้วย parsnip
- เวิร์กโฟลว์: การรวมสูตรกับโมเดล
- การสุ่มตัวอย่างใหม่และการตรวจสอบไขว้ด้วย rsample