使用 tidymodels 進行線性迴歸

在 R 中使用 tidymodels 建立模型

David Svancer

Data Scientist

用 parsnip 擬合模型

使用 parsnip 擬合模型

在 R 中使用 tidymodels 建立模型

線性迴歸模型

cty 預測 hwy  

$$hwy = \beta_{0} + \beta_{1} cty$$

模型參數

  • $ \beta_{0} $:截距
  • $ \beta_{1} $:斜率

 

高速公路與市區油耗

在 R 中使用 tidymodels 建立模型

線性迴歸模型

cty 預測 hwy  

$$hwy = \beta_{0} + \beta_{1} cty$$

模型參數

  • $ \beta_{0} $:截距
  • $ \beta_{1} $:斜率

 

由訓練資料估計的參數

$$\small hwy = 0.77 + 1.35(cty)$$

 

Mpg 資料與線性回歸線

在 R 中使用 tidymodels 建立模型

模型公式

parsnip 中的模型公式

  • 用來指定欄位角色
    • 目標變數
    • 預測變數

一般形式

outcome ~ predictor_1 + predictor_2 + ...

速記寫法

outcome ~ .

cty 作為預測變數來預測 hwy

hwy ~ cty
在 R 中使用 tidymodels 建立模型

parsnip 套件

R 中統一的模型規格語法

  1. 指定模型類型

    • 線性迴歸或其他模型類型
  2. 指定引擎

    • 不同引擎對應不同的 R 套件
  3. 指定模式

    • 回歸或分類二選一

Parsnip 套件

在 R 中使用 tidymodels 建立模型

擬合線性迴歸模型

 

parsnip 定義模型規格

  • linear_reg()

 

lm_model 傳入 fit() 函式

  • 指定模型公式
  • 指定用於擬合的 data

 

lm_model <- linear_reg() %>%

set_engine('lm') %>%
set_mode('regression')

 

lm_fit <- lm_model %>% 
  fit(hwy ~ cty, data = mpg_training)
在 R 中使用 tidymodels 建立模型

取得參數估計值

 

tidy() 函式

  • 接受已訓練的 parsnip 模型物件
  • 產生模型摘要 tibble
  • termestimate 欄提供參數估計值

 

tidy(lm_fit)
# A tibble: 2 x 5
  term        estimate std.error statistic  p.value
  <chr>          <dbl>     <dbl>     <dbl>    <dbl>
1 (Intercept)    0.769    0.528       1.46 1.47e- 1
2 cty            1.35     0.0305     44.2  6.32e-97
在 R 中使用 tidymodels 建立模型

進行預測

將已訓練的 parsnip 模型傳給 predict() 函式

  • new_data 指定要預測的新資料集

 

predict() 的標準化輸出

  1. 回傳 tibble
  2. 保持列順序與 new_data 一致
  3. 預測欄名為 .pred
hwy_predictions <- lm_fit %>% 
  predict(new_data = mpg_test)

hwy_predictions
# A tibble: 57 x 1
   .pred
   <dbl>
 1  25.0
 2  27.7
 3  25.0
 4  25.0
 5  22.3
# ... with 47 more rows
在 R 中使用 tidymodels 建立模型

將預測加入測試資料

bind_cols() 函式

  • 沿欄方向合併兩個以上的 tibble
  • 用來建立模型結果的 tibble 很實用

步驟

  • mpg_test 選出 hwycty
  • 傳入 bind_cols() 並加入預測欄
mpg_test_results <- mpg_test %>%
  select(hwy, cty) %>%

bind_cols(hwy_predictions) mpg_test_results
# A tibble: 57 x 3
     hwy   cty .pred
   <int> <int> <dbl>
 1    29    18  25.0
 2    31    20  27.7
 3    27    18  25.0
 4    26    18  25.0
 5    25    16  22.3
# ... with 47 more rows
在 R 中使用 tidymodels 建立模型

開始建模!

在 R 中使用 tidymodels 建立模型

Preparing Video For Download...