Подготовим выборку, с которой будем работать.
str(randf)
## 'data.frame': 2166 obs. of 10 variables:
## $ States : int 10 3 9 10 10 5 5 9 9 4 ...
## $ Params : int 14 3 10 15 13 4 4 14 5 5 ...
## $ Trial : int 1710 92 13 5 1695 318 2 8 2 12 ...
## $ Time : num 159.29 45.89 30.34 40.89 5.56 ...
## $ Distance : num 0.08 0.05 0.641 0.785 0.024 ...
## $ Iterations : int 270 1135 5 5 9 438 3 4 1 17 ...
## $ ResFit : num 0.988 0.297 0.842 0.752 0.83 ...
## $ GoalFit : num 0.99 0.297 0.9 1 0.99 0.495 0.5 0.9 0.9 0.4 ...
## $ MissFitFlag: int 0 0 0 0 0 0 0 0 0 0 ...
## $ Alg : int 0 0 3 3 0 0 2 3 4 1 ...
Имеем: 2166 наблюдений, 10 переменных, числовых (целочисленных и вещественных), 2 переменные - факторы (известно из постановки задачи).
table(complete.cases(randf))
##
## TRUE
## 2166
Пропущенных значений нет.
randf$MissFitFlag=as.factor(randf$MissFitFlag)
levels(randf$MissFitFlag)<-c("Идентифицировано","Не идентифицировано")
randf$Alg=as.factor(randf$Alg)
levels(randf$Alg)<-c("Градиентный метод","Полный перебор","Перебор 2 параметров","Перебор 3 параметров","Перебор 4 параметров")
hist(randf$Time)
hist(randf$Iterations,xlim=range(0,5000),ylim=range(0,2500))
hist(randf$Distance,xlim=range(0,2.5),ylim=range(0,1400))
pairs(~States+Params+Time+Distance+Iterations+ResFit, data=randf)
cor(randf$Time,randf$States)
## [1] 0.2905
Наблюдается умеренная зависимость.
boxplot(randf$Time~randf$States, xlab="States", ylab="Time")
boxplot(randf$Time~randf$Params, xlab="Params", ylab="Time")
table(randf$Alg)
##
## Градиентный метод Полный перебор Перебор 2 параметров
## 533 298 490
## Перебор 3 параметров Перебор 4 параметров
## 449 396
table(randf$Alg,randf$Params)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
## Градиентный метод 48 52 45 53 48 37 34 34 30 35 20 23 18 16 11 15 7
## Полный перебор 61 42 50 49 50 46 0 0 0 0 0 0 0 0 0 0 0
## Перебор 2 параметров 0 58 42 44 40 47 29 40 24 33 26 24 18 25 12 15 7
## Перебор 3 параметров 0 0 48 49 43 41 39 34 31 38 23 27 20 23 10 14 5
## Перебор 4 параметров 0 0 0 48 35 44 47 46 29 26 23 27 19 17 9 12 6
##
## 18
## Градиентный метод 7
## Полный перебор 0
## Перебор 2 параметров 6
## Перебор 3 параметров 4
## Перебор 4 параметров 8
Определить лучший алгоритм в смысле общего количества успешно подогнанных за 200 секунд моделей.
table(randf$Alg,randf$MissFitFlag)
##
## Идентифицировано Не идентифицировано
## Градиентный метод 392 141
## Полный перебор 253 45
## Перебор 2 параметров 422 68
## Перебор 3 параметров 409 40
## Перебор 4 параметров 373 23
sort(table(randf$Alg,randf$MissFitFlag)[,1]/table(randf$Alg),decreasing=T)
##
## Перебор 4 параметров Перебор 3 параметров Перебор 2 параметров
## 0.9419 0.9109 0.8612
## Полный перебор Градиентный метод
## 0.8490 0.7355
Как можно увидеть, лучшим алгоритмом является перебор 4 параметров.
Построить график зависимости числа ошибок лучшего алгоритма от числа состояний модели.
plot(table(randf$States,randf$MissFitFlag, randf$Alg)[,2,5],xlab="States",ylab="MisFits", type="l")
Построить график зависимости числа ошибок лучшего алгоритма от числа параметров модели.
plot(table(randf$Params,randf$MissFitFlag, randf$Alg)[,2,5],xlab="Params",ylab="MisFits", type="l")
Определить лучший алгоритм в смысле среднего времени вычислений.
sort(sapply(split(randf,randf$Alg), function(x) colMeans(x[,c("Time","ResFit")]))[1,])
## Перебор 3 параметров Полный перебор Перебор 4 параметров
## 38.58 41.13 44.84
## Перебор 2 параметров Градиентный метод
## 49.69 73.16
Лучшим алгоритмом считаем перебор 3 параметров.
Построить график зависимости времени вычислений лучшего алгоритма от числа параметров модели.
plot(1:18,sapply(split(split(randf,randf$Alg)[[4]],randf$Params), function(x) colMeans(x[,c("Time","ResFit")]))[1,],type="l",xlab="Params",ylab="Mean time",main="Перебор 3 параметров")
Построить графики зависимости времени вычислений всех алгоритмов от числа параметров модели.
for(i in 1:5)
{
plot(1:18,sapply(split(split(randf,randf$Alg)[[i]],randf$Params),
function(x) colMeans(x[,c("Time","ResFit")]))[1,],type="l",
xlab="Params",ylab="Mean time",main=levels(randf$Alg)[i])
}