题记:今天记录一篇错误代码(暂未找到错误原因),网上的教程对于房价预测问题的套路都差不多于是参照了其中一篇,完成了几乎一样的代码,但是首先是k折交叉验证的问题,其次是预测结果问题。
更新:重新手敲了一遍代码发现还是有问题,于是有猜测肯定因为自己的惯性思维导致的问题,自己可能很难发现了,所以找了一份网上的代码直接复制发现能跑,又校对好几遍最终发现原来问题在交叉验证上。可恶啊~
- 问题:rmse出现nan的原因
解答:k折交叉验证的代码粗心写错了(fold_size = x.shape[0]//k
),我以为//k
是注释,每次自己手写的时候都把它删掉了。 - 问题:to_csv(‘submission.csv’)
解答:实际上如果没有用d2l模块的话,这里根本不会报错。 - 问题:懒得下载
d2l
模块
解答:用自定义的函数load_array
代替,方案可行,网上有教程。而且注意是小写的L
不是数字1
。 - 问题:kaggle的在线平台
好难用啊,有时候会出现莫名的问题,新建一个notebook可能就好了。 - 问题:submission.csv
rmse 得分0.17294
# -*- coding: utf-8 -*-
"""
@Time : 2023/4/4 14:02
@Auth : zyt
@File :02regression.py
@IDE :PyCharm
@Motto:ABC(Always Be Coding)
"""
'''
问题描述:波士顿房价预测问题
'''
import pandas as pd
from torch.utils import data
import torch.nn as nn
import torch
def load_array(data_arrays, batch_size, is_train=False):
"""构造一个PyTorch数据迭代器。"""
dataset = data.TensorDataset(*data_arrays)
return data.DataLoader(dataset, batch_size, shuffle=is_train)
def get_net(in_features):
net = nn.Sequential(nn.Linear(in_features,1))
return net
def log_rmse(net,features,labels):
clipped_preds = torch.clamp(net(features),1,float('inf'))
rmse = torch.sqrt(loss(torch.log(clipped_preds),torch.log(labels)))
return rmse.item()
def train(net,train_features,train_labels,test_features,test_labels,num_epochs,learning_rate,weight_decay,batch_size):
train_ls,test_ls=[],[]
train_iter = load_array((train_features,train_labels)