Модель охлаждения кофе в чашке с машинным обучением
Первым делом создадим векторы исходных данных: время Time = 1:40 и изменение температуры Temp. Далее выполняем конструкцию приведенную ниже (все необходимые пояснения приводятся по мере необходимости).
# Регрессия Temp ~ log(Time))
# остывание чашки кофе с машинным обучением
Time = 1:40
Temp = c(82.5, 77.7, 74.5, 71.8, 68.8, 66.5, 64.4, 62.6, 60.8, 59.1,
57.6, 56.2, 55, 53.8, 52.7, 51.6, 50.6, 49.9, 49, 48.2,
47.3, 46.6, 45.9, 45.2, 44.6, 44, 43.4, 42.9, 42.3, 41.8,
41.3, 40.9, 40.5, 40, 39.7, 39.3, 38.9,
38.6, 38.3, 37.9)
Tcoffee = data.frame(Time, Temp)
plot(Time, Temp, xlab = "Время", ylab = "Температура кофе в чашке")
grid(15, col = "black")
mdlog = lm(Temp ~ log(Time))
Timen = Time
xp = data.frame(Time = Timen)
Tempn = predict(mdlog, xp)
lines(Timen, Tempn)
error = Tempn - Temp
ansprd = data.frame(Time, Temp, Tempn, error)
tail(ansprd)
cor(Temp, Tempn)
| > tail(ansprd) Time Temp Tempn error 35 35 39.7 40.43928 0.7392846 36 36 39.3 40.05494 0.7549418 37 37 38.9 39.68113 0.7811302 38 38 38.6 39.31729 0.7172882 39 39 38.3 38.96290 0.6628976 40 40 37.9 38.61748 0.7174800 > cor(Temp, Tempn) [1] 0.9925416 |
# экстраполяция
Timen = 1:180
xp = data.frame(Time = Timen)
Tempn = predict(mdlog, xp)
plot(Timen, Tempn, 'l', lwd=2, col='red')
points(Time, Temp)
grid(col='black')
# функция зависимость темературы от времени
f = function(Timen){
xp = data.frame(Time = Timen)
predict(mdlog, xp)
}
#==============================================
# машинное обучение делим данные Tcoffee
# на обучающую 70% и тестовую 30% выборки
set.seed (5)
#use 70% of dataset as training set and 30% as test set
sample = sample(c(TRUE ,FALSE), nrow(Tcoffee),
replace= TRUE , prob=c(0.7 ,0.3))
train = Tcoffee[sample, ]
test = Tcoffee[!sample, ]
#----------------------------------
# обучаем модель lern на обучающей выборке train
lern = lm(Temp ~ log(Time), data = train)
#------------------------------------
# тест обученой модели на тестовой выборке
Ttest = predict(lern, data.frame(Time = test$Time))
#--------------------------------------------------
# сравнение данных модели машинного обучения
# тестовой выборки эмперич и расчетных
error = test$Temp - Ttest
ans = data.frame(test, Ttest, error)
ans
| Time Temp Ttest error 3 3 74.5 73.33040 1.169603443 6 6 66.5 64.05551 2.444485726 8 8 62.6 60.20609 2.393909675 9 9 60.8 58.63006 2.169944061 18 18 49.9 49.35517 0.544826344 20 20 48.2 47.94536 0.254637142 21 21 47.3 47.29251 0.007489872 22 22 46.6 46.67003 -0.070033862 28 28 42.9 43.44309 -0.543086179 30 30 41.8 42.51990 -0.719904524 |
Полный скрипт найдете ниже:
# Регрессия Temp ~ log(Time))
# остывания чашки кофе с машинным обучением
Time = 1:40
Temp = c(82.5, 77.7, 74.5, 71.8, 68.8, 66.5, 64.4, 62.6, 60.8, 59.1,
57.6, 56.2, 55, 53.8, 52.7, 51.6, 50.6, 49.9, 49, 48.2,
47.3, 46.6, 45.9, 45.2, 44.6, 44, 43.4, 42.9, 42.3, 41.8,
41.3, 40.9, 40.5, 40, 39.7, 39.3, 38.9,
38.6, 38.3, 37.9)
Tcoffee = data.frame(Time, Temp)
plot(Time, Temp, xlab = "Время", ylab = "Температура кофе в чашке")
grid(15, col = "black")
mdlog = lm(Temp ~ log(Time))
Timen = Time
xp = data.frame(Time = Timen)
Tempn = predict(mdlog, xp)
lines(Timen, Tempn)
error = Tempn - Temp
ansprd = data.frame(Time, Temp, Tempn, error)
tail(ansprd)
cor(Temp, Tempn)
# экстраполяция
Timen = 1:180
xp = data.frame(Time = Timen)
Tempn = predict(mdlog, xp)
plot(Timen, Tempn, 'l', lwd=2, col='red')
points(Time, Temp)
grid(col='black')
# функция зависимость темературы от времени
f = function(Timen){
xp = data.frame(Time = Timen)
predict(mdlog, xp)
}
#==============================================
# машинное обучение делим данные Tcoffee
# на обучающую 70% и тестовую 30% выборки
set.seed (5)
#use 70% of dataset as training set and 30% as test set
sample = sample(c(TRUE ,FALSE), nrow(Tcoffee),
replace= TRUE , prob=c(0.7 ,0.3))
train = Tcoffee[sample, ]
test = Tcoffee[!sample, ]
#----------------------------------
# обучаем модель lern на обучающей выборке train
lern = lm(Temp ~ log(Time), data = train)
#------------------------------------
# тест обученой модели на тестовой выборке
Ttest = predict(lern, data.frame(Time = test$Time))
#--------------------------------------------------
# сравнение данных модели машинного обучения
# тестовой выборки эмперич и расчетных
error = test$Temp - Ttest
ans = data.frame(test, Ttest, error)
ans


