Прежде всего, прости меня, если название звучит немного запутанно.Английский не является моим родным языком, поэтому, хотя я бегло говорю на нем, некоторые технические термины могут быть неверными.Дайте мне знать, если и как я могу улучшить его.
Мне дали задание на курсе машинного обучения с Python.У меня есть таблица значений (я думаю, что я могу назвать ее матрицей), которую можно визуализировать с помощью следующего кода:
import numpy as np
from numpy.linalg import inv
import pandas as pd
import matplotlib.pyplot as plt
h = np.array([x for x in range(0,5500,500)])
v = np.array([x for x in range(0,65,5)])
print(h.shape,v.shape)
y = np.array([83.4, 78.7, 74.1, 69.7, 65.4, 61.3, 57.4, 53.6, 50.0, 46.5, 43.2,
75.1, 70.8, 66.6, 63.3, 59.5, 55.7, 52.7, 49.2, 46.4, 43.2, 40.5,
69.7, 65.7, 62.2, 58.8, 55.2, 52.0, 48.9, 45.9, 43.1, 40.3, 37.6,
64.4, 61.0, 57.6, 54.2, 51.0, 48.0, 45.1, 42.4, 39.7, 37.1, 34.7,
59.9, 56.6, 53.3, 50.3, 47.5, 44.6, 41.9, 39.3, 36.8, 34.4, 32.1,
56.1, 53.0, 50.1, 47.2, 44.5, 41.9, 39.3, 36.9, 34.6, 32.3, 30.2,
53.3, 50.4, 47.5, 44.8, 42.2, 39.8, 37.4, 35.1, 32.8, 30.7, 28.6,
50.9, 48.1, 45.4, 42.8, 40.3, 38.0, 35.7, 33.4, 31.3, 29.3, 27.3,
48.7, 46.0, 43.4, 40.9, 38.6, 36.3, 34.1, 31.9, 29.9, 27.9, 26.1,
46.4, 43.9, 41.4, 39.0, 36.8, 34.6, 32.4, 30.4, 28.5, 26.6, 24.8,
44.1, 41.7, 39.3, 37.1, 34.9, 32.8, 30.7, 28.8, 26.9, 25.2, 23.4,
41.7, 39.4, 37.2, 34.9, 32.9, 30.9, 29.0, 27.2, 25.4, 23.7, 22.0,
39.3, 37.2, 34.9, 32.9, 31.0, 29.1, 27.3, 25.6, 23.8, 22.3, 20.7])
# Confirm lengths all match
y.shape
len(y) == len(h)*len(v)
###################################
# Matrix visualization with Pandas
dataframe = pd.DataFrame(y.reshape(13,11), index=v, columns=h)
print(dataframe)
Для контекстуализации, строки - это скорость (м / с), а столбцы -высота (м) дирижабля.Значения - это тяга (N - Ньютон) самолета.
Задача, которую нужно решить:
Приблизительная матрица с функцией, построенной из элементов следующей базы:{1, v, h, v², h², vh, v³, h³, v²h, vh², v²h², v³h, vh³}
Прежде всего, я не совсем понимаю, чтолежит в основе вопроса.Это значения бета в многомерной линейной регрессии, верно?Каковы преимущества выполнения этого с таким количеством бета-версий?
С помощью друга я смог найти следующее решение:
base = []
i = 0
j = 0
for i in range(0,len(v)):
for j in range(0,len(h)):
base.append([1, v[i], h[j], v[i]**2 , h[j]**2, v[i] * h[j],
v[i]**3, h[j]**3, (v[i]**2) * h[j], v[i] * (h[j]**2),
(v[i]**2) * (h[j]**2), (v[i]**3) * h[j], v[i] * (h[j]**3)])
base = np.array(base)
base.shape
base_df = pd.DataFrame(base)
print(base_df)
base_tp = np.transpose(base)
d = np.dot(base_tp, base)
inv_d = inv(d)
# print(inv_d.shape, base_tp.shape)
x = np.dot(inv_d, base_tp)
beta = np.dot(x, y)
print(beta.shape,beta)
И это то, что ядо сих пор.Я верю, что это правильно, но я не буду высовываться из-за этого.Должен ли я изменить исходный массив Y с y.reshape(143,1)
, прежде чем продолжить?Если так, почему?