import numpy

T = numpy.array([10, 13, 17, 20, 19, 21, 14, 8, 5, 10])
wT = T * [0, 0, 0, 0, 0, 1, 1, 0, 0, 0]
X = numpy.zeros((10, 3))
X[:, 0] = numpy.ones(10).T
X[:, 1] = T.T
X[:, 2] = (wT ** 2).T
Y = numpy.array([1, 1.2, 1.5, 1.4, 1.6, 2.1, 1.7, 0.9, 0.7, 1.1]).T

Theta = numpy.linalg.inv(X.T @ X) @ X.T @ Y
print('Theta =', Theta)

"""
Explanation: 9. Линейная регрессия
1.
В течении недели с понедельника по воскресенье торговая точка производила замеры среднесуточной температуры воздуха $t$ и количества потребляемого мороженного в литрах на человека $ic$. Предполагается следующая зависимость $ic = \theta_1+\theta_2t+\theta_3t^2w$, где $w = 1$, если день выходной, и $w = 0$ иначе. Получились следующие значения
|    |пн |вт |ср |чт |пт |сб |вс |пн |вт |ср |
|----|---|---|---|---|---|---|---|---|---|---|
|$t$ |10 |13 |17 |20 |19 |21 |14 |8  |5  |10 |
|$ic$|1  |1.2|1.5|1.4|1.6|2.1|1.7|0.9|0.7|1.1|
Найдите оценку $\theta = (\theta_1, \theta_2, \theta_3)$ методом наименьших квадратов, значение RSS и предсказание
отклика при температурах 15 и 40 в будний и выходной дни. Нарисуйте графики зависимости
$ic$ от $t$ для будних и выходных дней. Задание можно выполнить в Python.
Оценка методом наименьших квадратов
End of explanation
"""


RSS = (Y - X @ Theta).T @ (Y - X @ Theta)
print(RSS)

"""
Explanation: Вычисление RSS
End of explanation
"""


Xa = numpy.array([1, 15, 225])
wYa = Xa.T @ Theta
print('t = 15, w = 1:\t', wYa)

Xb = numpy.array([1, 15, 0])
wYb = Xb.T @ Theta
print('t = 15, w = 0:\t', wYb)

Xc = numpy.array([1, 40, 1600])
wYc = Xc.T @ Theta
print('t = 40, w = 1:\t', wYc)

Xd = numpy.array([1, 40, 0])
wYd = Xd.T @ Theta
print('t = 40, w = 0:\t', wYd)

"""
Explanation: Вычисление отклика
End of explanation
"""


