使用 Andrew Ng 类(class)中的示例(使用正规方程查找线性回归的参数):
使用 Python:
X = np.array([[1, 2104, 5, 1, 45], [1, 1416, 3, 2, 40], [1, 1534, 3, 2, 30], [1, 852, 2, 1, 36]])
y = np.array([[460], [232], [315], [178]])
θ = ((np.linalg.inv(X.T.dot(X))).dot(X.T)).dot(y)
print(θ)
结果:
[[ 7.49398438e+02]
[ 1.65405273e-01]
[ -4.68750000e+00]
[ -4.79453125e+01]
[ -5.34570312e+00]]
与 Julia :
X = [1 2104 5 1 45; 1 1416 3 2 40; 1 1534 3 2 30; 1 852 2 1 36]
y = [460; 232; 315; 178]
θ = ((X' * X)^-1) * X' * y
结果:
5-element Array{Float64,1}:
207.867
0.0693359
134.906
-77.0156
-7.81836
此外,当我将 X 乘以 Julia 的——而不是 Python 的——θ 时,我得到的数字接近于 y。
我不知道我做错了什么。谢谢!
最佳答案
使用 X^-1 与伪逆
pinv(X) 对应the pseudo inverse比 inv(X) 更广泛适用,X^-1 等同于。 Julia 和 Python 都不能很好地使用 inv,但在这种情况下,显然 Julia 做得更好。
但是如果你把表达式改成
julia> z=pinv(X'*X)*X'*y
5-element Array{Float64,1}:
188.4
0.386625
-56.1382
-92.9673
-3.73782
你可以验证 X*z = y
julia> X*z
4-element Array{Float64,1}:
460.0
232.0
315.0
178.0
关于python - 使用 Python 与 Julia 进行线性回归的分析解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30855655/