繁体   English   中英

最小二乘实现错误“ValueError:形状(3,3)和(1,3)未对齐:3(dim 1)!= 1(dim 0)”

[英]Least Square Implementation error "ValueError: shapes (3,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)"

嗨,我正在尝试为一个项目实现线性回归模块,但我卡在这里的是 git repo: 最小二乘法

编码 :

import numpy as np
from numpy.linalg import inv

class linearregression :
  
  def __init__(self,training_data_X, training_data_Y) :
    # Linear regression module init
    pading = np.ones(training_data_X.shape[0])
    self.training_data_X = np.insert(training_data_X, 0, pading, axis=1) # The training data x => features numpy_matrix
    self.training_data_Y = training_data_Y # The training data y => response numpy_matrix
  
  def leastsquare(self):
    # Find beta parameter
    X_transpose = self.training_data_X.transpose()
    self.ajk = np.matmul(X_transpose, self.training_data_X)
    self.Hessian = 2 * self.ajk
    self.Beta = inv(self.ajk).dot(X_transpose).dot(self.training_data_Y)
    f_of_X = self.training_data_X.dot(self.Beta)
    self.rs = np.subtract(self.training_data_Y,f_of_X)
    self.rss = self.rs.dot(self.rs)
    return self.Beta , self.rss
    
if __name__ == "__main__" :
  x = np.matrix([[0,1],[1,4],[7,8]])
  y = np.matrix([2,9,23])
  Lr = linearregression(x,y)
  Beta, rss = Lr.leastsquare()
  print(Beta,rr)

代码返回我这个错误语句:

Traceback (most recent call last):
  File "<string>", line 27, in <module>
File "<string>", line 17, in leastsquare
ValueError: shapes (3,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

Y是 1x3,但应该是 3x1。 修复它的两种方法:

  • 要求training_data_Y为 nx1: y = np.matrix([[2],[9],[23]])
  • 取一个数组而不是一个矩阵: y = np.array([2,9,23])
  • 或者,在计算 beta 时简单地转置它: Beta = inv(self.ajk).dot(X_transpose).dot(self.training_data_Y.T)

我找到了它的解决方案:

y = np.matrix([[2],[9],[23]])

self.rss = np.square(self.rs)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM