使用numpy计算多元线性回归的因变量值
我正在尝试使用 numpy
实现 多元线性回归
。这个论坛里有很多关于这个主题的问题,但似乎没有人能解答我的疑问。我有几个自变量 (X1, X2, X3, X4, X5)
和一个因变量 Y
。我想预测 Y'
的值。
X1 X2 X3 X4 Y Y'
1 0 1 0 1 ? // ? -> referring this value as y'1
0 0 1 1 0 ? // ? -> referring this value as y'2
0 1 0 1 0 ? // ? -> referring this value as y'3
0 0 0 1 1 ? // ? -> referring this value as y'4
1 0 1 1 0 ? // ? -> referring this value as y'5
所以,我在使用 numpy
进行计算:
>>> X1 = np.array([1,0,0,0,1])
>>> X2 = np.array([0,0,1,0,0])
>>> X3 = np.array([1,1,0,0,1])
>>> X4 = np.array([0,1,1,1,1])
>>> Y = np.array([1,0,0,1,0])
>>> x = np.array([X1,X2,X3,X4], np.int32)
>>> n = np.max(x.shape)
>>> X = np.vstack([np.ones(n), x]).T
>>> print np.linalg.lstsq(X, Y)[0]
[ 2.00000000e+00 -2.22044605e-16 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00]
我有这个方程 y = a + b1.x1 + b2.x2 + b3.x3 + b4.x4
。从上面的计算中,我得到了 a, b1, b2, b3, b4
的值。
那么,我该如何根据这些系数值来计算 Y'
的值,也就是 y'1
、y'2
、y'3
、y'4
和 y'5
呢?
1 个回答
0
OLS的目的是根据你已有的数据来调整参数,然后用这些参数来预测一个新的Y值。你可以尝试...
>>> import numpy as np
>>> X = np.array([[1,0,1,0], [0,0,1,1], [0,1,0,1], [0,0,0,1], [1,0,1,1]])
>>> Y = np.array([1,0,0,1,0]).reshape((5,1))
>>> b = np.linalg.inv((X.T).dot(X)).dot(X.T).dot(Y)
>>> b
out [1]: array([[0.666], [-0.333], [-0.333], [0.333]])
然后用这个方法来预测在给定4个新的X值时的Y值。另外,如果你的Y值是二元的(也就是只有0和1),你应该考虑使用逻辑回归。