我从头开始实现多元线性回归,但我没有找到斜率和截距,渐变体面给我纳值。
这是我的代码,我也给了ipython notebook文件。
https://drive.google.com/file/d/1NMUNL28czJsmoxfgeCMu3KLQUiBGiX1F/view?usp=sharing
doneBtn
答案 0 :(得分:2)
这不是编程问题,而是您的功能问题。 Numpy can use different data types。在你的情况下,它使用float64。您可以检查最大数字,您可以使用以下数据格式表示:
>>>sys.float_info
>>>sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15,
mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
不幸的是,b, m1, m2
的迭代不会收敛,至少不会与提供的数据集收敛。在迭代83中,值变得太大而不能表示为浮点数,对于无穷大显示为inf
和-inf
。当这被送入下一个迭代步骤时,Python返回NaN
表示“不是数字”
尽管Python中有一些方法可以克服浮点数表示在精度方面的限制,但这不是您必须探索的策略。这里的问题是你的拟合函数不收敛。无论这是由于函数本身,由您实现还是选择初始猜测,我都无法决定。非收敛拟合行为的常见原因还在于,数据集不表示拟合函数。
答案 1 :(得分:0)
尝试缩放x def scale(x):
for j in range(x.shape[1]):
mean_x = 0
for i in range(len(x)):
mean_x += x[i,j]
mean_x = mean_x / len(x)
sum_of_sq = 0
for i in range(len(x)):
sum_of_sq += (x[i,j] - mean_x)**2
stdev = sum_of_sq / (x.shape[0] -1)
for i in range(len(x)):
x[i,j] = (x[i,j] - mean_x) / stdev
return x
或者您可以使用预定义的标准缩放器