0Pricing
R Academy · Pelajaran

Rekayasa Fitur dengan recipes

Tentukan langkah prapemrosesan untuk normalisasi, pengodean, dan imputasi.

Rekayasa Fitur dengan recipes adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.

Apa Itu Recipe?

Dalam tidymodels, recipe adalah cetak biru untuk prapemrosesan data. Recipe mencatat langkah-langkah yang diperlukan untuk mengubah data mentah menjadi fitur yang siap digunakan model—tanpa langsung menerapkannya.

Fungsi utamanya adalah recipe(outcome ~ ., data = train), yang menentukan formula dan kumpulan data acuan yang digunakan untuk mengestimasi statistik apa pun yang diperlukan selama prapemrosesan.

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()) memusatkan setiap prediktor numerik sehingga memiliki rata-rata 0 dan menskalakannya ke simpangan baku 1. Hal ini penting untuk algoritme yang sensitif terhadap skala fitur, seperti regresi logistik, SVM, atau jaringan saraf.

Rata-rata dan SD dihitung dari kumpulan data pelatihan, lalu diterapkan secara konsisten pada data pengujian melalui 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()) mengubah variabel kategorikal (faktor/karakter) menjadi kolom dummy numerik (dengan pengodean one-hot). Secara bawaan, fungsi ini membuat k-1 kolom untuk faktor dengan k tingkat guna menghindari multikolinearitas sempurna.

Gunakan one_hot = TRUE untuk model berbasis pohon yang diuntungkan oleh pengodean one-hot lengkap.

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()

Nilai yang hilang akan menyebabkan sebagian besar mesin model gagal. step_impute_median(all_numeric_predictors()) mengganti nilai NA dengan median yang dihitung dari kumpulan data pelatihan. Dibandingkan imputasi dengan rata-rata, median lebih tahan terhadap pencilan.

Untuk variabel kategorikal, gunakan step_impute_mode() untuk mengisi nilai yang paling sering muncul.

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

print(rec)

step_zv() — Menghapus Varians Nol

step_zv(all_predictors()) menghapus prediktor apa pun yang hanya memiliki satu nilai unik (varians nol). Kolom seperti itu tidak membawa informasi dan dapat menyebabkan error pada beberapa mesin model.

Untuk varians mendekati nol, gunakan step_nzv(all_predictors()), yang juga menghapus kolom ketika satu nilai sangat mendominasi.

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() — Melatih Recipe

prep(recipe) mengestimasi semua parameter yang diperlukan oleh langkah-langkah tersebut—misalnya rata-rata/SD untuk normalisasi dan median untuk imputasi—menggunakan data pelatihan. Hasilnya adalah recipe yang telah dipersiapkan dan mengetahui semua parameter transformasi.

Selalu lakukan prep hanya pada data pelatihan untuk menghindari kebocoran data dari kumpulan data pengujian.

# 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() — Menerapkan pada Data Baru

bake(prepped_recipe, new_data = test_data) menerapkan semua langkah prapemrosesan menggunakan parameter yang telah diestimasi sebelumnya ke kumpulan data apa pun. Hal ini memastikan transformasi tetap konsisten antara data pelatihan dan pengujian.

Berikan new_data = NULL untuk menerapkannya pada data pelatihan yang digunakan selama 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() — Mengekstrak Data Pelatihan yang Diproses

juice(prepped_recipe) adalah fungsi praktis yang setara dengan bake(prepped_recipe, new_data = NULL). Fungsi ini mengembalikan versi prapemrosesan dari data pelatihan yang digunakan selama prep().

Catatan: juice() sedikit tidak digunakan lagi dan digantikan oleh bake(prep, new_data = NULL), tetapi Anda masih akan menemukannya dalam kode tidymodels lama.

# 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

Menggabungkan Beberapa Langkah

Langkah-langkah diterapkan sesuai urutan penambahannya. Recipe produksi biasanya mengikuti urutan berikut:

  1. Imputasi (perbaiki NA terlebih dahulu)
  2. Pembuatan fitur (interaksi, polinomial)
  3. Pengodean dummy (ubah faktor)
  4. Penghapusan varians nol
  5. Normalisasi (lakukan penskalaan di akhir)

Urutan ini penting—misalnya, melakukan normalisasi sebelum pengodean dummy akan menghasilkan hasil yang keliru.

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)

Memeriksa Hasil prep

Setelah memanggil prep(), Anda dapat memeriksa tindakan setiap langkah menggunakan tidy(prepped_rec). Setiap langkah memiliki id numerik, dan Anda dapat memeriksanya lebih lanjut dengan tidy(prepped_rec, number = 1) untuk melihat parameter yang diestimasi.

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 dalam Praktik

Recipe sangat bermanfaat jika digabungkan dengan alur kerja. Daripada memanggil prep() dan bake() secara manual, tambahkan recipe ke alur kerja, lalu tidymodels akan menangani prep/bake secara otomatis selama fit() dan predict().

Hal ini menghilangkan sumber bug yang umum, yaitu prapemrosesan diterapkan secara berbeda saat pelatihan dan saat inferensi.

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)

Pemeriksaan Cepat

Apa yang dilakukan pemanggilan prep(recipe) dalam kerangka kerja recipe tidymodels?

Ikhtisar Recipe

Inti pembelajaran dari Rekayasa Fitur dengan Recipe:

  • recipe(outcome ~ ., data = train) menentukan cetak biru prapemrosesan.
  • step_normalize(), step_dummy(), step_impute_median(), step_zv() adalah langkah yang paling umum digunakan.
  • prep() mengestimasi parameter hanya dari data pelatihan—jangan pernah dari data pengujian.
  • bake(prepped, new_data) menerapkan recipe terlatih ke kumpulan data apa pun.
  • Urutan langkah penting: imputasi → buat → kodekan → hapus → skalakan.
  • Dalam produksi, bungkus recipe dalam workflow() untuk mengotomatiskan prep/bake selama fit dan 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)

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Rekayasa Fitur dengan recipes” gratis?

Ya — teks lengkap “Rekayasa Fitur dengan recipes” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Rekayasa Fitur dengan recipes”?

Tentukan langkah prapemrosesan untuk normalisasi, pengodean, dan imputasi. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai R Academy?

Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Rekayasa Fitur dengan recipes” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Rekayasa Fitur dengan recipes
  2. Spesifikasi Model dengan parsnip
  3. Alur Kerja: Menggabungkan Resep dan Model
  4. Pengambilan Sampel Ulang dan Validasi Silang dengan rsample
← Kembali ke R Academy