Подготовка к работе

Значение параметра S = 90294

Загружаем таблицу

df=read.csv("F://ML/ML Block 4/Рубежный контроль 1/Optimization.txt", header = TRUE, sep = "\t")

Формируем случайную выборку случайного размера из исходной таблицы df.

set.seed(90294) 
n = 600+sample(nrow(df)-600,1) 
set.seed(90294) 
rand_sample=df[sample(nrow(df), n), ]

Задание 1

Определить размер выборки, количество переменных, типы переменных, наличие факторов(категориальных признаков) и пропущенных значений

str(rand_sample)
## 'data.frame':    5112 obs. of  10 variables:
##  $ States     : int  5 9 4 10 8 10 10 8 9 2 ...
##  $ Params     : int  8 6 3 11 7 8 12 8 16 2 ...
##  $ Trial      : int  17 2 3 12 4 14 17 2 11 25 ...
##  $ Time       : num  3.098 0 0.672 60.163 8.762 ...
##  $ Distance   : num  0.54 0.7137 0.0461 0.7783 0.4083 ...
##  $ Iterations : int  2 1 2 3 2 21 4 4 10 283 ...
##  $ ResFit     : num  0.432 0.11 0.251 0.773 0.126 ...
##  $ GoalFit    : num  0.5 0.9 0.4 1 0.8 1 1 0.8 0.9 0.198 ...
##  $ MissFitFlag: int  0 0 0 0 0 1 0 0 0 0 ...
##  $ Alg        : int  3 4 2 4 4 2 4 2 3 0 ...

Выборка состоит из 5112 наблюдений, 10 переменных, числовых (целочисленных и вещественных).

length(complete.cases(rand_sample))
## [1] 5112

Функция вернула логический вектор длиной = 5112, следовательно пропущенные значения в выборке отсутствуют.

Проверим, какие переменные в таблице - факторы

lapply(rand_sample, is.factor)
## $States
## [1] FALSE
## 
## $Params
## [1] FALSE
## 
## $Trial
## [1] FALSE
## 
## $Time
## [1] FALSE
## 
## $Distance
## [1] FALSE
## 
## $Iterations
## [1] FALSE
## 
## $ResFit
## [1] FALSE
## 
## $GoalFit
## [1] FALSE
## 
## $MissFitFlag
## [1] FALSE
## 
## $Alg
## [1] FALSE

Функция вернула список с FALSE, однако, исходя из описания признаков, можно сказать что факторами являются признаки - MissFitFlag и Alg

Задание 2

При наличии категориальных признаков следует изменить тип соответствующих столбцов таблицы на factor, указав все предусмотренные уровни факторов

factor_alg = rand_sample$Alg
factor_alg=as.factor(factor_alg)
levels(factor_alg)<-c("Градиентный метод","Полный перебор","Перебор 2 параметров","Перебор 3 параметров","Перебор 4 параметров")

factor_mff = rand_sample$MissFitFlag
factor_mff=as.factor(factor_mff)
levels(factor_mff)<-c("Идентифицировано","Не идентифицировано")

Задание 3

Построить выборочные гистограммы распределения времени вычислений, числа итераций и значение меры расхождения модели и наблюдений

time=rand_sample$Time
hist(time,main = "Time",ylim=range(0,3000))

Исследуя график, можно сказать, что большинство задач решаются от о до 20 секунд.

iterations=rand_sample$Iterations
hist(iterations,xlim=range(0,2500),ylim=range(0,5000),main = "Iterations")

Исследуя график, можно сказать, что большинство задач выполняюся от 0 до 500 итераций.

resfit=rand_sample$ResFit
hist(resfit,xlim=range(0,6),main = "ResFit")

Исследуя график, можно сказать, что значение меры расхождения модели и наблюдений для большинства задач находится в интервале от 0 до 2.

Задание 4

Построить диаграмму рассеяния для всех пар числовых признаков

params=rand_sample$Params
states=rand_sample$States
distance=rand_sample$Distance
trial=rand_sample$Trial
goalfit=rand_sample$GoalFit

pairs(~time+iterations+resfit+params+states+distance+trial+goalfit)

Исследуя диаграмму рассеяния, можно сделать вывод, что между числом состояний модели и целевой величиной меры расхождения наблюдается четкая линейная связь.

Задание 5

С помощью функции cor(x, y) оценить величину линейной зависимости времени вычислений от числа параметров модели

cor(time,params)
## [1] 0.3966927

Наблюдается умеренная зависимость.

Задание 6

Построить ящичные графики для пары признаков Time и States , а также пары признаков Time и Params

boxplot(time~states, xlab="States", ylab="Time")

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

boxplot(time~params,xlab="Params", ylab="Time")

Исследуя график, можно сделать вывод, время выполнения задач повышается с увеличением количества параметров модели.

Задание 7

Определить количества наблюдений для каждого алгоритма

table(factor_alg)
## factor_alg
##    Градиентный метод       Полный перебор Перебор 2 параметров 
##                 1275                  701                 1192 
## Перебор 3 параметров Перебор 4 параметров 
##                 1038                  906

Задание 8

С помощью функции table(x,y) построить таблицу, содержащую в ячейках число наблюдений для соответствующего алгоритма (x) и соответствующего числа параметров (y)

table(factor_alg,params)
##                       params
## factor_alg               1   2   3   4   5   6   7   8   9  10  11  12  13
##   Градиентный метод    127 126 110 111 100  91  84  86  65  73  58  58  50
##   Полный перебор       131 136 112 118 105  99   0   0   0   0   0   0   0
##   Перебор 2 параметров   0 136 112 115 107 101  83  94  77  80  67  50  45
##   Перебор 3 параметров   0   0 117 111  95 110  88  88  73  73  59  60  37
##   Перебор 4 параметров   0   0   0 106  91  93  84  91  67  76  65  54  39
##                       params
## factor_alg              14  15  16  17  18
##   Градиентный метод     42  33  29  16  16
##   Полный перебор         0   0   0   0   0
##   Перебор 2 параметров  38  30  30  16  11
##   Перебор 3 параметров  40  31  29  12  15
##   Перебор 4 параметров  46  28  32  19  15

Задание 9

Определить лучший алгоритм в смысле общего количества успешно подогнанных за 200 секунд моделей

table(factor_alg,factor_mff)
##                       factor_mff
## factor_alg             Идентифицировано Не идентифицировано
##   Градиентный метод                 919                 356
##   Полный перебор                    596                 105
##   Перебор 2 параметров             1036                 156
##   Перебор 3 параметров              960                  78
##   Перебор 4 параметров              843                  63
a=table(factor_alg,factor_mff)[,1]
b= table(factor_alg)
a/b
## factor_alg
##    Градиентный метод       Полный перебор Перебор 2 параметров 
##            0.7207843            0.8502140            0.8691275 
## Перебор 3 параметров Перебор 4 параметров 
##            0.9248555            0.9304636

Можно сделать вывод, что лучший алгоритм - “Перебор 4 параметров”

Задание 10

Построить график зависимости числа ошибок лучшего алгоритма от числа состояний модели

plot(table(states,factor_alg,factor_mff)[,5,2],xlab="States",ylab="Не идентифицировано",type="l")

Задание 11

Построить график зависимости числа ошибок лучшего алгоритма от числа состояний модели

plot(table(params,factor_alg,factor_mff)[,5,2],xlab="States",ylab="Не идентифицировано",type="l")

Задание 12

Определить лучший алгоритм в смысле среднего времени вычислений.

algmean=function(x) colMeans(x[,c("Time","ResFit")])
sort(sapply(split(rand_sample,factor_alg), algmean)[1,])
##       Полный перебор Перебор 3 параметров Перебор 2 параметров 
##             36.65037             37.89457             45.65204 
## Перебор 4 параметров    Градиентный метод 
##             49.88202             76.51206

Лучшим алгоритмом является - полный перебор.

Задание 13

Построить график зависимости времени вычислений лучшего алгоритма от числа параметров модели Строим график для алгоритма полного перебора

plot(sapply(split(split(rand_sample,factor_alg)[[2]],params), algmean)[1,],type="l",xlab="Число параметров модели",ylab="Среднее время",main="Полный перебор")

Задание 14

Построить графики зависимости времени вычислений всех алгоритмов от числа параметров модели

for(i in 1:5)
{
  plot(sapply(split(split(rand_sample,factor_alg)[[i]],params), 
                   algmean)[1,],type="l",
       xlab="Число параметров модели",ylab="Среднее время",main=levels(factor_alg)[i])
}