运行def invboxcox(y,lmbda): if lmbda == 0: return(np.exp(y)) else: return(np.exp(np.log(lmbda*y+1)/lmbda))df3 = df[['value']] date_list = [datetime(2016, 4, 30), datetime(2016, 5, 31), datetime(2016, 6, 30), datetime(2016, 7, 31), datetime(2016, 8, 31), datetime(2016, 9, 30), datetime(2016, 10, 31), datetime(2016, 11, 30), datetime(2016,12, 31)] future = pd.DataFrame(index=date_list, columns= df_month.columns) df3 = pd.concat([df3, future]) df3['forecast'] = invboxcox(best_model.predict(start=0, end=121), lmbda) plt.figure(figsize=(15,7)) df3.value.plot() df3.forecast.plot(color='r', ls='--', label='Predicted Weighted_Price') plt.legend() plt.title('Bitcoin exchanges, by months') plt.ylabel('mean USD') plt.show()出现__new__() got an unexpected keyword argument 'start'的报错怎么改
时间: 2023-09-20 07:06:01 浏览: 37
这个报错的原因是因为在使用`best_model.predict()`时,传入了`start`和`end`这两个没有定义的关键字参数。可以尝试将这两个参数替换为`start_date`和`end_date`参数,代码如下:
```
df3['forecast'] = invboxcox(best_model.predict(start=121, end=131, dynamic=True), lmbda)
```
其中,`start`和`end`被替换为了`start_date`和`end_date`,并且加上了`dynamic=True`参数,表示使用动态预测。同时,`start_date`的值为121,`end_date`的值为131。根据具体情况,你可能需要调整这些参数的值。
相关问题
criterion = nn.L1Loss(size_average=True)改为损失函数L0optimizer
L0 损失函数的定义与 L1 和 L2 等常见的损失函数不同,其主要思想是通过将权重矩阵中的某些值归零来实现模型的稀疏化,从而达到减少模型复杂度的目的。在 PyTorch 中,L0 损失函数并没有内置,需要自己实现。
以下是一个简单的 L0 损失函数的实现:
```python
import torch
import torch.nn as nn
class L0Loss(nn.Module):
def __init__(self, lmbda):
super(L0Loss, self).__init__()
self.lmbda = lmbda
def forward(self, x):
return self.lmbda * torch.norm(x, 0)
```
其中,`lmbda` 是一个超参数,控制稀疏程度,`x` 是权重矩阵。可以通过调整 `lmbda` 的值来控制模型的稀疏化程度。
要将模型的损失函数改为 L0 损失函数,只需要将 `nn.L1Loss` 改为 `L0Loss` 即可:
```python
criterion = L0Loss(lmbda=0.001)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
```
需要注意的是,L0 损失函数的计算较为复杂,因此训练时间可能会较长。此外,L0 损失函数可能会导致模型训练过程中出现梯度消失等问题,需要谨慎使用。
运行 df3['forecast'] = invboxcox(best_model.predict(start=0, end=121), lmbda)这个代码后出现了 __new__() got an unexpected keyword argument 'start'的报错
这个错误可能是因为 `start` 参数在 `best_model.predict()` 中不被支持。请查看 `best_model.predict()` 的文档,以确认它所支持的参数。如果 `start` 参数不被支持,则需要找到一个替代方案来指定起始时间。你可以尝试传递一个 NumPy 数组,指定预测开始的时间序列索引,例如:
```
start_index = len(df3)
end_index = start_index + 121
forecast = invboxcox(best_model.predict(start=start_index, end=end_index), lmbda)
```
这里假设你想要从最后一条记录开始预测,预测 121 个时间步长。你可以根据你的时间序列数据的实际情况进行调整。