Fits a scaler on the training set and applies the same parameters to both train and test sets, preventing data leakage.
Arguments
- split_result
The list returned by
split_data().- method
Character. One of
"auto"(default),"minmax","zscore", or"robust". Use"auto"to let the function choose.- cols
Character vector. Names of numeric columns to scale.
NULL(default) scales all numeric columns.- verbose
Logical (default
TRUE).
Value
An invisible list with elements:
train_scaledScaled training
data.frame.test_scaledScaled test
data.frame.paramsPer-column scaling parameters (fitted on train only).
methodThe scaling method used.
method_reasonWhy the method was selected (auto mode only).
outlier_ratioNamed numeric vector of outlier ratios per column.
colsCharacter vector of scaled column names.
Details
When method = "auto" (default), the scaling method is chosen
automatically based on per-column outlier detection (IQR method) and a
normality test (Shapiro-Wilk):
robust – any outlier found in any column (IQR fence)
zscore – no outliers + majority of columns approximately normal
minmax – no outliers + majority of columns not normal
Methods
minmaxScales each feature to \([0, 1]\).
zscoreStandardises to zero mean and unit variance.
robustUses median and IQR, robust to outliers.
Examples
data(airquality)
clean <- airquality[complete.cases(airquality), ]
sp <- split_data(clean, verbose = FALSE)
sc <- scale_data(sp)
#>
#> ============================================================
#> STEP 7/7 : Feature Scaling [ROBUST]
#> ============================================================
#>
#> Auto-selected : outlier detected in 2 column(s) [Ozone, Wind] -> robust
#> Columns : 6 (Ozone, Solar.R, Wind, ...)
#> Fitted on TRAIN only | Columns with outliers: 2 / 6
#>
#> ------------------------------------------------------------
#> Outlier ratio per column (IQR)
#> ------------------------------------------------------------
#> column outlier_pct
#> Wind 3.41%
#> Ozone 1.14%
#>
#> [OK] Outliers found in [Ozone, Wind] -> robust scaling applied
#>
sc$method
#> [1] "robust"
sc$method_reason
#> [1] "outlier detected in 2 column(s) [Ozone, Wind] -> robust"