如何在NumPy中构造设计矩阵(用于线性回归)?

2024-04-24 01:19:52 发布

您现在位置:Python中文网/ 问答频道 /正文

对于这个实验室,我需要从正态分布中抽取150个x值,平均值为0,标准偏差为10,然后从x值中使用特征{1,x,x^2}构造一个设计矩阵

我们必须对参数进行采样,然后使用设计矩阵为回归数据创建y值

问题是我的设计矩阵不是正方形的,Moore Penrose Pseduoinverse需要正方形矩阵,但考虑到实验室的早期设置,我不知道如何使其工作

这就是我所做的

#Linear Regression Lab
import numpy as np
import math
data = np.random.normal(0, 10, 150)

design_matrix = np.zeros((150,3))

for i in range(150):
    design_matrix[i][0] = 1
    design_matrix[i][1] = data[i]
    design_matrix[i][2] = pow(data[i], 2)


print("-------------------Design Matrix---------------------")
print("|--------1--------|-------x-------|--------x^2--------|")
print(design_matrix[:20])

#sampling paramters

theta_0 = np.random.uniform(low = -30, high = 20)
theta_1 = np.random.uniform(low = -30, high = 20)
theta_2 = np.random.uniform(low = -30, high = 20)

print(theta_0, theta_1, theta_2)

theta = np.array([theta_0, theta_1, theta_2])

theta = np.transpose(theta)

#moore penrose psuedo inverse
MPpi = np.linalg.pinv(design_matrix) ##problem here

y_values = np.linalg.inv(MPpi)

Tags: importdatanp矩阵randomuniform实验室matrix
1条回答
网友
1楼 · 发布于 2024-04-24 01:19:52

请随意编辑此不完整的答案

Repl上运行此代码后,我收到以下错误消息

Traceback (most recent call last):
  File "main.py", line 32, in <module>
    y_values = np.linalg.inv(MPpi)
  File "<__array_function__ internals>", line 5, in inv
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site-packages/numpy/linalg/linalg.py", line 542, in inv
    _assert_stacked_square(a)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site-packages/numpy/linalg/linalg.py", line 213, in _assert_stacked_square
    raise LinAlgError('Last 2 dimensions of the array mustbe square')
numpy.linalg.LinAlgError: Last 2 dimensions of the array must be square

第一个错误从MPpi的倒数传播

通过查看文档,似乎pinv切换了最后两个维度[例如,一个mxn矩阵变成了nxm],因此我们需要在计算伪逆之前格式化矩阵

就Moore-Penrose逆AKApinv而言,this article建议乘以MPpi*data,这将产生Ross MacAusland}的x_0{符号,这最适合于最小二乘回归

相关问题 更多 >