Есть несколько проблем, если вы посмотрите на то, что вы пытаетесь предсказать, это действительно не имеет смысла:
library(gbm)
library(data.table)
library(caret)
trainSet <- fread("https://raw.githubusercontent.com/kyrios05/R-Machine-Learning/master/trainSet.csv")
table(trainSet$result)
1 8 9 10 11 14 15 16 17 18 19 20 22 23 24 26 28 30 31 33
3 3 3 2 24 3 8 3 4 2 12 5 41 5 3 63 5 3 4 3
36 38 39 42 43 44 46 47 48 49 50 51 52 53 54 55 56 57 58 59
3 3 2 5 6 2 2 3 28 14 4 3 5 3 3 10 8 2 6 6
60 61 62 65 67 70 72 73 74 75 76 77 79 80 81 82 83 85 87 88
5 9 10 3 5 4 813 257 6 3 9 9 2 3 3 6 2 5 3 6
90 92 93 94 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
3 2 20 13 5 3 3 9 42 2 2 3 7 2 2 4 2 13 2 3
112 113 114 115 116 117 118 119
3 12 3 2 4 5 3 2
Вы пытаетесь провести классификацию того, что выглядит как дискретные значения. И если я запускаю gbm, он запускается, но выдает ошибку, потому что слишком много классов меток и слишком мало данных!
trainSet$result = factor(trainSet$result)
model_gbm<-gbm(result~+size_delta+inserted_line+deleted_line+size, data=trainSet, cv.folds = 2)
Distribution not specified, assuming multinomial ...
Warning messages:
1: In predict.gbm(model, newdata = my.data, n.trees = best.iter.cv) :
NAs introduced by coercion
2: In predict.gbm(model, newdata = my.data, n.trees = best.iter.cv) :
NAs introduced by coercion
Если это действительно классификация, вы можете уменьшить ее до 3 классов:
trainSet$label = as.character(trainSet$result)
trainSet$label[!trainSet$label %in% c(72,73)] <- "others"
fitControl <- trainControl(method = "cv",number=2)
model_gbm_caret<-train(label~ +size_delta+inserted_line+deleted_line+size,
data = trainSet,
method='gbm',
trControl = fitControl,
verbose=TRUE,distribution="multinomial")
Или вы запустили регрессию (которая, я надеюсь, предназначена):
trainSet <- fread("https://raw.githubusercontent.com/kyrios05/R-Machine-Learning/master/trainSet.csv")
fitControl <- trainControl(method = "cv",number=2)
model_gbm_caret<-train(result ~ +size_delta+inserted_line+deleted_line+size,
data = trainSet,
method='gbm',
trControl = fitControl,
verbose=TRUE)