2016-07-26 3 views
2

Я хочу построить кривую обучения в своем приложении.Как построить кривую обучения в R?

Образец кривой изображения показан ниже.

enter image description here

Изучения кривой представляет собой график между следующим дисперсионным,

  • Ось X: Количество образцов (Обучение размера набора).
  • Y-ось: Ошибка (RSS/J (тета)/функция стоимости)

Это помогает в наблюдении ли наша модель, имеющая высокий уклон или высокую проблему дисперсии.

Есть ли какой-либо пакет в R, который может помочь в получении этого участка?

+0

Привет, пожалуйста, любезно показать признательность по upvoting и нажмите на зеленую стрелку, чтобы выбрать ответ, который был полезным в любом случае. Благодарю. –

ответ

1

Вы можете сделать такой участок, используя отличный пакет Caret. Раздел Customizing the tuning process будет очень полезен.

Кроме того, вы можете проверить хорошо написанные сообщения в блогах на R-Bloggers Джозефом Рикерт. Они имеют название "Why Big Data? Learning Curves" и "Learning from Learning Curves".

UPDATE
Я просто сделал сообщение по этому вопросу Plot learning curves with caret package and R. Я думаю, что мой ответ будет более полезен для вас. Для удобства я воспроизвел здесь один и тот же ответ при построении кривой обучения с R. Однако я использовал популярный пакет caret для обучения моей модели и получения ошибки RMSE для набора для обучения и тестирования.

# set seed for reproducibility 
set.seed(7) 

# randomize mtcars 
mtcars <- mtcars[sample(nrow(mtcars)),] 

# split iris data into training and test sets 
mtcarsIndex <- createDataPartition(mtcars$mpg, p = .625, list = F) 
mtcarsTrain <- mtcars[mtcarsIndex,] 
mtcarsTest <- mtcars[-mtcarsIndex,] 

# create empty data frame 
learnCurve <- data.frame(m = integer(21), 
        trainRMSE = integer(21), 
        cvRMSE = integer(21)) 

# test data response feature 
testY <- mtcarsTest$mpg 

# Run algorithms using 10-fold cross validation with 3 repeats 
trainControl <- trainControl(method="repeatedcv", number=10, repeats=3) 
metric <- "RMSE" 

# loop over training examples 
for (i in 3:21) { 
    learnCurve$m[i] <- i 

    # train learning algorithm with size i 
    fit.lm <- train(mpg~., data=mtcarsTrain[1:i,], method="lm", metric=metric, 
      preProc=c("center", "scale"), trControl=trainControl)   
    learnCurve$trainRMSE[i] <- fit.lm$results$RMSE 

    # use trained parameters to predict on test data 
    prediction <- predict(fit.lm, newdata = mtcarsTest[,-1]) 
    rmse <- postResample(prediction, testY) 
    learnCurve$cvRMSE[i] <- rmse[1] 
} 

pdf("LinearRegressionLearningCurve.pdf", width = 7, height = 7, pointsize=12) 

# plot learning curves of training set size vs. error measure 
# for training set and test set 
plot(log(learnCurve$trainRMSE),type = "o",col = "red", xlab = "Training set size", 
      ylab = "Error (RMSE)", main = "Linear Model Learning Curve") 
lines(log(learnCurve$cvRMSE), type = "o", col = "blue") 
legend('topright', c("Train error", "Test error"), lty = c(1,1), lwd = c(2.5, 2.5), 
     col = c("red", "blue")) 

dev.off() 

Выходной участок, как показано ниже:
MtCarsLearningCurve.png