这是正常方程在机器学习中的好结果吗?如果不是,如何判断它对数据集是否合适?

我在学习机器学习中的正常方程,但我不确定这些结果是否正确。参数值非常高,我无法为这些参数找到假设,我的意思是这样的:

数据集:

2104,5,1,45,4601416,3,2,40,2321534,3,2,30,315852,2,1,36,178

当我运行代码时,我得到了参数(theta):

[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])

我对这些结果不满意。我如何确保这些结果是正确的,以及如何用这些参数找到我的假设?


回答:

但是这些数字非常大。这正常吗?

你的数据没有经过归一化/缩放,你的值很大(约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错误。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注