【发布时间】:2014-11-01 02:06:49
【问题描述】:
我在 Python 中实现线性回归,我认为我在将矩阵转换为 numpy 数组时做错了,但似乎无法弄清楚。 任何帮助将不胜感激。
我正在从一个包含 100 列的 csv 文件加载数据。 y 是最后一列。我没有使用 col 1 和 2 进行回归。
communities=np.genfromtxt("communities.csv", delimiter = ",", dtype=float)
xdata = communities[1:,2:99]
x = np.array([np.concatenate((v,[1]))for v in xdata])
y = communities[1:,99]
函数定义
def standRegress(xArr, yArr):
xMat = mat(xArr); yMat = mat(yArr).T
xTx = xMat.T*xMat
if linalg.det(xTx)==0.0:
print"singular matrix"
return
ws = xTx.I*(xMat.T*yMat)
return ws
调用函数
w = standRegress(x,y)
xMat = mat(x) #shape(1994L,98L)
yMat = mat(y) #shape (1L, 1994L)
yhat = xMat*w #shape (1994L, 1L)
接下来我正在尝试计算 RMSE,这就是我遇到问题的地方
yMatT = yMat.T #shape(1994L, 1L)
err = yhat - yMatT #shape(1994L, 1L)
error = np.array(err)
total_error = np.dot(error,error)
rmse = np.sqrt(total_error/len(p))
我在做点积时出错,因此无法计算 rmse。如果有人能帮我找出我的错误,我将不胜感激。
Error:
---> 11 np.dot(error,error)
12 #test = (error)**2
13 #test.sum()/len(y)
ValueError: matrices are not aligned
【问题讨论】:
-
您可以编辑您的问题并包含您收到的具体错误消息吗?
-
当您使用
numpy时,只是想知道为什么您不使用linalg有什么特别的原因? -
@Anzel,没想过使用linalg。请您指导如何使用它。
-
@nasiajaffri,看看this numpy doc
-
@Michael0x2a,我已经编辑了这个问题。请立即查看。
标签: python regression