Качество регрессионной модели определяется расхождением между предсказанными и наблюдаемыми значениями или, на статистическом языке, величиной ошибок:

  • среднеквадратическая ошибка RMSE (Root mean square error)
  • остаточная стандартная ошибка RSE (residual standard error)
  • коэффициент детерминации R^2 (R-squared)

Рассмотрим каким образом вычисляются эти значения и что они означают на примере зависимости з/п профессоров в США от количества лет, прошедших с момента получения степени PhD.

library(car)
library(ggplot2)
head(Salaries)
##        rank discipline yrs.since.phd yrs.service  sex salary
## 1      Prof          B            19          18 Male 139750
## 2      Prof          B            20          16 Male 173200
## 3  AsstProf          B             4           3 Male  79750
## 4      Prof          B            45          39 Male 115000
## 5      Prof          B            40          41 Male 141500
## 6 AssocProf          B             6           6 Male  97000
summary(Salaries)
##         rank     discipline yrs.since.phd    yrs.service        sex     
##  AsstProf : 67   A:181      Min.   : 1.00   Min.   : 0.00   Female: 39  
##  AssocProf: 64   B:216      1st Qu.:12.00   1st Qu.: 7.00   Male  :358  
##  Prof     :266              Median :21.00   Median :16.00               
##                             Mean   :22.31   Mean   :17.61               
##                             3rd Qu.:32.00   3rd Qu.:27.00               
##                             Max.   :56.00   Max.   :60.00               
##      salary      
##  Min.   : 57800  
##  1st Qu.: 91000  
##  Median :107300  
##  Mean   :113706  
##  3rd Qu.:134185  
##  Max.   :231545
lmfit <- lm(salary ~ yrs.since.phd, data=Salaries)
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary)) +
        geom_point() +
        geom_smooth(method="lm")

plot of chunk unnamed-chunk-1

Поученная зависимость находится в объекте lmfit:

summary(lmfit)
## 
## Call:
## lm(formula = salary ~ yrs.since.phd, data = Salaries)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -84171 -19432  -2858  16086 102383 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    91718.7     2765.8  33.162   <2e-16 ***
## yrs.since.phd    985.3      107.4   9.177   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 27530 on 395 degrees of freedom
## Multiple R-squared:  0.1758, Adjusted R-squared:  0.1737 
## F-statistic: 84.23 on 1 and 395 DF,  p-value: < 2.2e-16

Как мы видим, стандартный R использует RSE (residual standard error) и R^2 для оценки качества подгонки полученной модели. Прикладные пакеты, например caret, могут использовать другие показатели, например RMSE.

library(caret)
svmfit <- train(salary ~ yrs.since.phd,
                data=Salaries[,c("salary", "yrs.since.phd")],
                method="svmRadial",
                tuneLength=15,
                preProc=c("center", "scale"),
                trControl = trainControl(method= "cv"))
svmfit
## Support Vector Machines with Radial Basis Function Kernel 
## 
## 397 samples
##   1 predictors
## 
## Pre-processing: centered, scaled 
## Resampling: Cross-Validated (10 fold) 
## 
## Summary of sample sizes: 357, 358, 357, 358, 357, 357, ... 
## 
## Resampling results across tuning parameters:
## 
##   C        RMSE      Rsquared   RMSE SD   Rsquared SD
##      0.25  25696.45  0.2956169  3050.617  0.08824299 
##      0.50  25793.24  0.2895044  3242.971  0.09713584 
##      1.00  26160.61  0.2738394  3496.230  0.10339060 
##      2.00  26308.42  0.2651080  3488.507  0.09658318 
##      4.00  26690.32  0.2451418  3605.666  0.08707542 
##      8.00  27042.29  0.2301844  3818.971  0.08914531 
##     16.00  27052.46  0.2296120  3734.621  0.08607726 
##     32.00  27205.15  0.2244112  3642.223  0.08482832 
##     64.00  27298.40  0.2216864  3591.845  0.08491456 
##    128.00  27290.94  0.2256738  3701.271  0.09252096 
##    256.00  27551.34  0.2207704  3982.652  0.09611490 
##    512.00  27978.43  0.2143761  4653.012  0.09535732 
##   1024.00  28218.76  0.2115758  4976.205  0.09446334 
##   2048.00  28356.10  0.2091885  5094.988  0.09599632 
##   4096.00  28329.98  0.2094448  5049.018  0.09733760 
## 
## Tuning parameter 'sigma' was held constant at a value of 9.318645
## RMSE was used to select the optimal model using  the smallest value.
## The final values used for the model were sigma = 9.318645 and C = 0.25.

RMSE

Корень из среднего арифметического квадрата ошибок:

RMSE.lmfit = sqrt(mean(lmfit$resid^2))
RMSE.lmfit
## [1] 27464.14
RMSE.svmfit = sqrt(mean(
        (predict(svmfit) - Salaries[, "salary"])^2)
        )
RMSE.svmfit
## [1] 24909.3

RMSE усредняет ошибки посредством деления на общее количество наблюдений (n) и показывает насколько в среднем мы ошибаемся при предсказании з/п профессора. Единица измерения та же, что и у предсказываемой величины. Соответственно, если сравнить RMSE со средней з/п, мы получим среднюю ошибку в процентах:

#Linear regression
RMSE.lmfit/mean(Salaries$salary)
## [1] 0.2415355
#SVM
RMSE.svmfit/mean(Salaries$salary)
## [1] 0.2190668

RSE

R в стандартной функции summary(*fit) выдает не RMSE а RSE, которая отличается способом усреднения: величина среднеквадратического отклонения усредняется не путем делением на n (арифметически), а путем деления на n-2 (количество степеней свободы)

#RSE
RSE <- sqrt((sum(lmfit$resid^2))/lmfit$df.resid)
RSE
## [1] 27533.59

Как и RMSE, единицы измерения такие же как и у предсказываемой величины, интерпретация точно такая же. Единственное отличие в том, на какую величину мы делим чтобы получить среднее: количество наблюдений или количество степеней свободы. С практической точки зрения, при большом количестве наблюдений, разницей между RSE и RMSE можно пренебречь.

R-квадрат

RMSE и RSE измеряются в единицах измерения величины, которую мы хотим предсказать. Ошибку в 10’000 долларов при предсказании з/п профессора невозможно сравнить с ошибкой в 10 градусов Цельсия при предсказании температуры. Для того, чтобы сравнивать точность моделей для различных показателей используют R^2 .

 R^2 = \frac{TSS-RSS}{TSS}
 TSS = \sum (y_i-\bar{y})^2) — сумма квадратов отклонений
 RSS = \sum (y_i-\hat{y_i})^2) — сумма квадратов ошибок

R^2 сравнивает дисперсию предсказываемой величины с дисперсией ошибок.

R^2 находится в диапазоне от 0 до 1: чем ближе значение R^2 к 1, тем меньше дисперсия ошибок, по сравнению с дисперсией самой предсказываемой величины (тем лучше модель).

TSS <- sum((mean(Salaries$salary) - Salaries$salary)^2)
RSS <- sum((Salaries$salary - lmfit$fitted)^2)
R2 <- 1 - RSS/TSS
R2
## [1] 0.1757547

Вычисление RMSE и R-квадрат в пакете caret

Пакет caret имеет встроенные функции для вычисления RMSE и R-квадрат Для того, чтобы вычислить данные показатели необходимы предсказанные моделью величины и величины наблюдаемые, под которые подгоняется модель.

library(caret)
R2(lmfit$fit, Salaries$salary)
## [1] 0.1757547
RMSE(lmfit$fit, Salaries$salary)
## [1] 27464.14
© 2014 In R we trust.
Top
Follow us: