【发布时间】:2021-02-28 00:44:13
【问题描述】:
for i in range(0,10):
res_lsq = np.sqrt(np.mean((polynomial_fit(lambda i: 'theta' + str(i), xtr) - ytr)**2))
rmse.append(res_lsq)
我正在寻找使用最小二乘法拟合曲线的每个 M 次多项式的均方根误差。我想在我的 polynomial_fit 函数中改变权重参数,即 theta 从 theta0 到 theta9(浮点值),以将每个 m 次多项式的 RMSE 附加到 rmse 列表中。但它显示错误如下
TypeError Traceback (most recent call last)
<ipython-input-43-4e717fdd943a> in <module>
1 for i in range(0,10):
----> 2 res_lsq = np.sqrt(np.mean((polynomial_fit(lambda i: 'theta' + str(i), xtr) - ytr)**2))
3 rmse.append(res_lsq)
<ipython-input-20-d7d3539688a0> in polynomial_fit(theta, x)
1 def polynomial_fit(theta, x):
2 """Polynomial model of degree (len(theta) - 1)"""
----> 3 return sum(t * x ** n for (n, t) in enumerate(theta))
TypeError: 'function' object is not iterable
【问题讨论】:
-
您将一个 lambda 函数传递给
polynomial_fit,它接受一个可迭代对象作为其第一个参数。 -
看来
theta也应该是一个数字类型的列表 - 您正在尝试传递一个字符串。 -
theta 是浮点值
-
如果您将
lambda i: 'theta' + str(i)替换为您的浮动列表,那么这至少不会引发错误。