Python中的手工线性回归函数

Python中的手工线性回归函数,python,numpy,regression,linear-regression,linear-algebra,Python,Numpy,Regression,Linear Regression,Linear Algebra,我编写了下面的代码来定义回归分析的函数,但是,它不起作用 import numpy as np import pandas as pd def linear_regress(y, X): X_trp = np.transpose(X) b = np.linalg.inv(X_trp@X)@X_trp@y e = y - X@b e_trp = np.transpose(e) sigma_sqr = (e_trp@e) / (X.shape[0] - X.

我编写了下面的代码来定义回归分析的函数,但是,它不起作用

import numpy as np
import pandas as pd

def linear_regress(y, X):
    X_trp = np.transpose(X)
    b = np.linalg.inv(X_trp@X)@X_trp@y
    e = y - X@b
    e_trp = np.transpose(e)
    sigma_sqr = (e_trp@e) / (X.shape[0] - X.shape[1])
    var_b = sigma_sqr@(np.linalg.inv(X_trp@X))
    SE = np.sqrt(var_b)
    z_score = 1.96
    upper = b+SE*z_score
    lower = b-SE*z_score
    CI = [lower, upper]
    results = {"Regression Coefficients": b,
              "Standard Error (SE)": SE,
              "95% Confidence Interval": CI}
    return results
定义数组并运行函数时返回:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-17-8307755b9bbc> in <module>
----> 1 linear_regress(indt, dept)

<ipython-input-16-a6336ec1997c> in linear_regress(y, X)
      8     e_trp = np.transpose(e)
      9     sigma_sqr = (e_trp@e) / (X.shape[0] - X.shape[1])
---> 10     var_b = sigma_sqr@(np.linalg.inv(X_trp@X))
     11     SE = np.sqrt(var_b)
     12     z_score = 1.96

ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 1)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
---->1线性回归(indt,部门)
线性回归(y,X)
8 e_trp=np.转置(e)
9西格玛_sqr=(e_trp@e)/(X.shape[0]-X.shape[1])
--->10 var_b=sigma_sqr@(np.linalg.inv(X_trp@X))
11 SE=np.sqrt(变量b)
12 z_分数=1.96
ValueError:matmul:输入操作数1的核心维度0与gufunc签名(n?,k),(k,m?)->(n?,m?)不匹配(大小2与1不同)
你能帮我找出问题所在吗


谢谢你的帮助

如果没有对数据的正确了解,很难判断您做错了什么。 但是我猜你是在尝试实现正常的等式来获得体重。 如果是这样的话,这似乎太复杂了,这里有一个更简单的方法

def LinearRegression(X, y):
    X_t = X.T
    theta = np.dot(np.linalg.inv(np.dot(X.T, X)), np.dot(y,X))
    mean_sqr_error = np.mean((y - np.dot(theta,X.T))**2)
    return theta, mean_sqr_error

谢谢你的帮助。我会试试你写的,我想我需要读一些关于计量经济学和矩阵代数的书