我正在尝试学习ML的正常方程,但我不确定这个结果是否correct.Parameters太高,而且我找不到关于这个参数的假设,我的意思是:
数据集:
2104,5,1,45,460
1416,3,2,40,232
1534,3,2,30,315
852,2,1,36,178
当我运行代码时,我接受参数(θ)
[4.74289062e+02 1.65405273e-01 -4.68750000e+00 -1.16445312e+02
-2.13281250e+00]
但这些数字太高了。这是正常的吗?此外,在我的代码中的最后一行,我尝试只为我的第一个数据集元素(2104,5,1,45,460)打印假设,但是它给了我一个这样的错误:
print (q[0]*x[0][0])+(q[1]*x[0][1])+(q[2]*x[0][2])+(q[3]*x[0][3])+(q[4]*x[0][4])
IndexError: index out of bounds
我的代码:
data = np.loadtxt('bib', delimiter=',');
x=data[:,0:4];
y=data[:,4];
a=np.ones(shape=(y.size,x[0].size+1));
a[:,1:5]=x;
A=np.linalg.inv(a.transpose().dot(a));
B=np.dot(a.transpose(),y);
q=A.dot(a.transpose()).dot(y);
##print (q[0]*x[0][0])+(q[1]*x[0][1])+(q[2]*x[0][2])+(q[3]*x[0][3])+(q[4]*x[0][4])
我对这些结果并不满意。我如何确保这些结果是正确的,以及如何用这些参数找到我的假设?
发布于 2016-06-11 14:23:03
但这些数字太高了。这是正常的吗?
您的数据没有标准化/缩放,您的值很大(~1e2),因此回归系数是相同的。
我试图只为我的第一个数据集元素(2104,5,1,45,460)打印假设,但是它给了我一个错误,比如:
错误是合理的-您的数据具有4维度,并且您尝试索引5值。当你使用"a“中的一列作为偏见术语时,你的假设是形式的:
h(x) = <q, [1 x]> = q0 + q1*x0 + q2*x1 + q3*x2 + q4*x3
因此,在代码中(使用您的符号和约定):
def h(x):
a = np.ones(x.shape[0], x.shape[1] + 1)
a[:, 1:5] = x
return a.dot(q)
我如何确保这些结果是真的?
您可以将它们与数十个现有的实现进行比较。您还可以创建一个虚拟测试集,其中y实际上是x的线性组合,并检查是否得到0错误。
https://stackoverflow.com/questions/37767857
复制