花书学习Day 7:Kaggle预测房价
因为需要使用Kaggle的房屋价格数据集所以先写一个download函数将数据集下载到本地import hashlib import os import tarfile import zipfile import requests DATA_HUB dict() #用于存放数据集名称映射到(数据集url,sha-1密钥) DATA_URL http://d2l-data.s3-accelerate.amazonaws.com/ def download(name, cache_diros.path.join(.., data)):# save assert name in DATA_HUB, f{name}不存在于{DATA_HUB} url, sha1_hash DATA_HUB[name] os.makedirs(cache_dir, exist_okTrue) fname os.path.join(cache_dir, url.split(/)[-1]) if os.path.exists(fname): sha1 hashlib.sha1() with open(fname, rb) as f: while True: data f.read(1048576) if not data: break sha1.update(data) if sha1.hexdigest() sha1_hash: return fname print(f正在从{url}下载{fname}...) r requests.get(url, streamTrue, verifyTrue) with open(fname, wb) as f: f.write(r.content) return fname同时实现解压缩tar/zip文件代码def download_extract(name, folderNone): #save fname download(name) base_dir os.path.dirname(fname) data_dir, ext os.path.splitext(fname) if ext .zip: fp zipfile.ZipFile(fname, r) elif ext in (.tar.gz, .gz, tgz): fp tarfile.open(fname, r) else: assert False, 只有zip/tar文件可以被解压缩 fp.extractall(base_dir) return os.path.join(base_dir, folder) if folder else data_dir def download_all(): #save for name in DATA_HUB: download(name)利用pandas的read_csv函数读取下载到的数据集并查看数据集import numpy as np import pandas as pd import torch from torch import nn DATA_HUB[kaggle_house_train] (DATA_URL kaggle_house_pred_train.csv,585e9cc93e70b39160e7921475f9bcd7d31219ce) DATA_HUB[kaggle_house_test](DATA_URL kaggle_house_pred_test.csv, fa19780a7b011d9b009e8bff8e99922a8ee2eb90) train_data pd.read_csv(download(kaggle_house_train)) test_data pd.read_csv(download(kaggle_house_test)) print(train_data.shape) print(test_data.shape)训练集总共有1460个样本80个特征和1个标签测试集右1459个样本80个特征。查看训练集样本的前四个和后两个特征以及标签有print(train_data.iloc[0:4, [0,1,2,3,-3,-2,-1]])由于数据的第一列是IDID数据能够帮助模型判断是哪个训练样本但是对于拟合数据毫无帮助因此我们去掉该数据。all_features pd.concat((train_data.iloc[:, 1:-1], test_data.iloc[:, 1:]))接下来进行数据预处理由于原始数据中包含大量空数据na、文字数据因此我们将原始数据中的空数据替换为相应特征的均值并将所有特征重新缩放到零均值和单位方差numeric_features all_features.select_dtypes(include[np.number]).columns all_features[numeric_features] all_features[numeric_features].apply(lambda x:(x - x.mean())/x.std()) all_features[numeric_features] all_features[numeric_features].fillna(0) #因为标准化后均值为0,因此将空缺值修改为0接下来处理离散值对于离散值我们可以使用独热编码all_features pd.get_dummies(all_features, dummy_naTrue, dtypefloat) print(all_features.shape)在数据预处理后数据变为330个特征将pandas数据转换为torch数据准备开始训练train_features torch.tensor(all_features[:n_train].values, dtypetorch.float32) test_features torch.tensor(all_features[n_train:].values, dtypetorch.float32) train_labels torch.tensor(train_data.iloc[:, -1].values, dtypetorch.float32) print(train_features.shape, train_labels.shape, test_features.shape)对于房价这类目标值范围很大的回归任务中计算对数均方误差。loss nn.MSELoss() in_features train_features.shape[1] def get_net(): 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), batch_size) optimizer optim.Adam(net.parameters(), lrlearning_rate, weight_decayweight_decay) for epoch in range(num_epochs): for X, y in train_iter: optimizer.zero_grad() l loss(net(X), y) l.backward() optimizer.step() train_ls.append(log_rmse(net, train_features, train_labels)) if test_labels is not None: test_ls.append(log_rmse(net, test_features, test_labels)) return train_ls, test_ls接下来实现K折交叉验证def get_k_fold_data(k, i, X, y): assert k 1 fold_size X.shape[0] // k X_train, y_train None, None for j in range(k): idx slice(j * fold_size, (j 1) * fold_size) X_part, y_part X[idx, :], y[idx] if j i: X_valid, y_valid X_part, y_part elif X_train is None: X_train, y_train X_part, y_part else: X_train torch.cat([X_train, X_part], 0) y_train torch.cat([y_train, y_part], 0) return X_train, y_train, X_valid, y_valid def k_fold(k, X_train, y_train, num_epochs, learning_rate, weight_decay, batch_size): train_l_sum, valid_l_sum 0, 0 for i in range(k): data get_k_fold_data(k, i, X_train, y_train) net get_net() train_ls, valid_ls train(net, *data, num_epochs, learning_rate, weight_decay, batch_size) train_l_sum train_ls[-1] valid_l_sum valid_ls[-1] if i 0: plot(list(range(1, num_epochs 1)), [train_ls, valid_ls], xlabelepoch, ylabelrmse, xlim[1, num_epochs], legend[train, valid], yscalelog) print(f折{i 1}, 训练log rmse{float(train_ls[-1]):f}, f验证log rmse{float(valid_ls[-1]):f}) return train_l_sum / k, valid_l_sum / k进行训练并进行模型选择k, num_epochs, learning_rate, weight_decay, batch_size 5, 100, 5, 0, 64 train_l, valid_l k_fold(k, train_features, train_labels, num_epochs, learning_rate, weight_decay, batch_size) print(f{k}-折验证:平均训练log rmse:{float(train_l):f}, f平均验证log rmse{float(valid_l):f}) plt.show()训练并将结果保存提交Kaggledef train_and_pred(train_features,test_features, train_labels, test_data,num_epochs, lr, weigh_decay, batch_size): net get_net() train_ls, _ train(net, train_features, train_labels, None, None, num_epochs, lr, weight_decay, batch_size) plot(np.arange(1, num_epochs 1), [train_ls], xlabelepoch, ylabellog rmse,xlim[1, num_epochs],yscalelog) print(f训练log rmse:{float(train_ls[-1]):f}) preds net(test_features).detach().numpy() test_data[SalePrice] pd.Series(preds.reshape(1, -1)[0]) submission pd.concat([test_data[Id], test_data[SalePrice]], axis1) submission.to_csv(submission.csv, indexFalse) train_and_pred(train_features, test_features, train_labels, test_data,num_epochs, learning_rate, weight_decay, batch_size) plt.show()查看submission.csv将结果提交到Kaggle

相关新闻

Inventor实战疑难解析:从草图约束到工程图标注的进阶指南

Inventor实战疑难解析:从草图约束到工程图标注的进阶指南

1. 从“会画”到“会用”:Inventor学习的真正终点“十五天学会Autodesk Inventor”,这个标题听起来像是一个速成神话。很多朋友跟着教程画出了第一个零件、完成了第一个装配,甚至生成了第一张工程图,就以为自己“毕业”了。但当你…

2026/8/5 8:13:34 阅读更多 →
Unity启动性能优化:从引擎初始化到资源加载的实战指南

Unity启动性能优化:从引擎初始化到资源加载的实战指南

1. 项目概述:为什么Unity库初始化是启动性能的“第一道坎”如果你是一位Unity开发者,尤其是负责过移动端或小游戏项目的同学,一定对下面这个场景不陌生:用户点击游戏图标,屏幕黑屏,一个启动Logo或进度条卡在…

2026/8/5 8:13:34 阅读更多 →
Unity多人游戏开发实战:基于Photon PUN2的状态同步与网络架构解析

Unity多人游戏开发实战:基于Photon PUN2的状态同步与网络架构解析

1. 项目概述:为什么选择Photon PUN2?如果你正在Unity里捣鼓一个多人游戏,从“我有个绝妙的想法”到“为什么我的角色在别人电脑上瞬移了”,中间大概隔着一万个坑。我见过太多项目,从简单的联机对战到复杂的MMO雏形&…

2026/8/5 8:13:34 阅读更多 →

最新新闻

一个关于显示器的笑话

一个关于显示器的笑话

一个嵌入式工程师买了台新显示器,回家发现画面一直闪。老婆问:"是不是线松了?"工程师:"不是。我抓 I2C 总线看了,EDID 读出来的时序参数是 1920x108060Hz,但显卡驱动硬要输出 144Hz。DDC/CI…

2026/8/5 9:02:54 阅读更多 →
STM32内部Flash模拟EEPROM:原理、HAL库实现与避坑指南

STM32内部Flash模拟EEPROM:原理、HAL库实现与避坑指南

1. 项目缘起:为什么需要关注STM32的内部Flash? 很多刚开始玩STM32的朋友,拿到一块像STM32F103C8T6这样的“蓝板”或者最小系统板,第一件事就是点灯、调串口,把程序下载进去跑起来。程序通常是通过ST-Link或者串口&…

2026/8/5 9:02:54 阅读更多 →
本地部署Qwen3.6-27B大模型:llama.cpp实战指南与性能实测

本地部署Qwen3.6-27B大模型:llama.cpp实战指南与性能实测

这次我们来看一个在本地部署大语言模型的实用方案:使用 llama.cpp 在本地运行 Qwen3.6-27B 模型。对于很多开发者来说,在个人电脑或服务器上部署一个 270 亿参数的大模型,最关心的不是它的理论性能,而是“我的显卡能不能跑起来”、…

2026/8/5 9:02:54 阅读更多 →
商标设计注册被驳回商标还能继续用吗?

商标设计注册被驳回商标还能继续用吗?

“提交了大半年,等来一纸驳回通知”——很多创业者收到驳回后的第一反应是:这个商标是不是彻底不能用了?答案并不绝对,取决于驳回的具体原因和你后续的应对策略。法律上:驳回不等于“禁止使用”首先要澄清一个常见误区…

2026/8/5 9:02:54 阅读更多 →
数字FM调制原理与Python实现:从音频到无线电波的软件定义广播

数字FM调制原理与Python实现:从音频到无线电波的软件定义广播

1. 项目概述:从数字音频到调频广播的桥梁如果你手头有一段数字音频,比如从麦克风录制的WAV文件,或者一段MP3解码后的PCM数据,你有没有想过,如何让它像传统的FM广播电台那样,通过无线电波发射出去&#xff1…

2026/8/5 9:02:54 阅读更多 →
Python零基础入门实战:从环境搭建到爬虫与数据分析项目整合

Python零基础入门实战:从环境搭建到爬虫与数据分析项目整合

这类教程最值得先看的不是它覆盖了多少个知识点,而是能不能帮你从零开始,把环境搭稳、把基础语法跑通、把第一个项目跑起来,最后能独立完成爬虫和数据分析这类实际任务。很多新手卡在第一步——环境配置和工具选择上,或者学了一堆…

2026/8/5 9:01:54 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →