首先,如果标题听起来有点混乱,请原谅。英语不是我的母语,虽然我很流利,但有些技术术语可能不正确。请告诉我如何改进。
我在一门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)
为了进行情境化描述,行是飞艇的速度(米/秒),列是高度(米)。这些数值代表的是飞艇的推力(牛顿)。
需要解决的问题是:
使用以下基础元素中的元素构建函数来近似矩阵:{1、v、h、v²、h²、vh、v³、h³、v²h、vh²、v²h²、v³h、vh³}
首先,我真的不太理解问题的核心所在。这些是多元线性回归中的beta值对吗?使用这么多beta的优点是什么?
在朋友的帮助下,我成功地找到了以下解决方案:
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.reshape(143,1)
重塑初始y数组吗?如果是这样,为什么?