【案例】从kaggle的房价预测模型案例中了解深度学习模型,即如何学习深度学习模型

news/2024/10/29 5:33:26/

1、背景

    深度学习是什么,为了解决什么样的问题
    深度学习是一种机器学习的方法,它的主要目的是从数据中自动学习到有效的特征表示。深度学习通过多层的特征转换,把原始数据变成更高层次、更抽象的表示。这些学习到的表示可以替代人工设计的特征,从而避免“特征工程”。

    深度学习主要要解决的是如何让机器能够模仿人脑的思考方式。从而摆脱原来的固有数据库比较的限制。让机器能够通过深度学习理解这个不断变化的世界。

结合本次分享,主要是预测芝加哥房价

问题陈述
房价预测是kaggle的一个经典Data Science项目,作为数据分析的新手,这是一个很好的入门练习项目。
任务很明确,就是要根据给出的79个特征,预测对应的房价,这些特征包括房子的类型、临街宽度、各层的面积等等。
数据可以在以下链接下载:
Kaggle: House Price
给出的数据包括四份文件:
. ‘train.csv’:训练数据
· ‘test.csv’:测试数据
· ‘data_description.txt’:说明各个特征的文档
· ‘sample_submission.csv’:预测结果提交的示例

    一个模型好不好,我们要给出评价模型,我们采用kaggle官方给出的模型评价函数RMSE

2、深度学习的基础理论

    人工神经网络:人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经 。人工神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型,简称为“神经网络”或类神经网络 。

    反向传播算法:反向传播算法(Backpropagation Algorithm),简称BP算法,是一种用于训练多层神经网络的监督学习算法。它建立在梯度下降法的基础上,适合于多层神经元网络的一种学习算法。反向传播算法网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间向m维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。反向传播算法主要由两个环节(激励传播、权重更新)反复循环迭代,直到网络的对输入的响应达到预定的目标范围为止 。

    激活函数的作用:激活函数的作用是将神经元的输入信号转换为输出信号,从而引入非线性因素,使神经网络能够更好地拟合复杂的数据集。激活函数可以是一个非线性函数,如Sigmoid、Tanh、ReLU等,也可以是一个线性函数,如恒等映射。在神经网络中,激活函数的选择对网络的性能有很大的影响 。虽然上面有多种激活函数,但是每个激活函数都有各自的优劣,比如sigmoid会导致梯度消失等问题,所以目前常用的激活函数是ReLU函数。

3、我们需要选择深度学习的框架和工具

    作为深度学习的框架,目前已知的特别多,比如国外的TensorFlow、PyTorch、Keras、Caffe、Theano等等,国内有百度的Paddle,这些都是很优秀的深度学习框架。在这其中我们选用PyTorch使用,因为它最简单上手快的特点。

4、模型的训练

这个问题需要多个步骤来解决,首先我们需要加载数据,然后我们需要定义我们的CNN模型,接着我们需要训练我们的模型,最后我们需要评估我们的模型。

以下是具体的步骤:
    加载数据:我们可以使用pandas库来加载kaggle上的房价数据集。
    定义CNN模型:我们可以使用PyTorch库来定义我们的CNN模型。
    训练模型:我们可以使用交叉熵损失函数和随机梯度下降优化器来训练我们的模型。
    评估模型:我们可以使用准确率作为评估指标来评估我们的模型

1、读取数据

import pandas as pdtrain = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/train.csv') 
train_copy = train.copy()test = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/test.csv') 

2、查看前面5条数据

train.head()

3、查看数据摘要,他会展示整个数据的情况

train.info()

4、进行预测

import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from kaggle.api.datasets import get_riverfront_prices# 加载数据
data = get_riverfront_prices()
X = data.data[:, 1:]
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 定义CNN模型
class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Conv1d(1, 64, kernel_size=3, stride=1, padding=1)self.pool = nn.MaxPool1d(kernel_size=2, stride=2)self.conv2 = nn.Conv1d(64, 128, kernel_size=3, stride=1, padding=1)self.fc1 = nn.Linear(128 * 768, 1024)self.fc2 = nn.Linear(1024, 1)def forward(self, x):x = self.pool(F.relu(self.conv1(x)))x = self.pool(F.relu(self.conv2(x)))x = x.view(-1, 128 * 768)x = F.relu(self.fc1(x))x = self.fc2(x)return x# 训练模型
model = CNN()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
for epoch in range(100):model.train()optimizer.zero_grad()outputs = model(torch.from_numpy(X_train).float())loss = criterion(outputs, torch.from_numpy(y_train).float())loss.backward()optimizer.step()if (epoch + 1) % 10 == 0:print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch + 1, 100, loss.item()))# 评估模型
model.eval()
with torch.no_grad():outputs = model(torch.from_numpy(X_test).float())predicted = outputs > 0.5accuracy = (predicted == y_test).sum().item() / len(y_test)print('Accuracy: {:.2f}%'.format(accuracy * 100))

5、深度学习的应用

深度学习的应用领域非常广泛,包括但不限于以下领域 :
     无人驾驶汽车:深度学习在无人驾驶领域主要用于图像处理,可以用于感知周围环境、识别可行驶区域检测、以及识别行驶路径识别。
    图片识别及分类:识别出图片中的对象,并建立关键词,对图片进行分类。
    语音识别:深度学习的发展使语音识别有了很大幅度的效果提升,类似于在计算机视觉中处理图像数据一样,深度学习中将声音转化为特征向量,然后对这些数字信息进行处理输入到网络中进行训练,得到一个可以进行语音识别的模型。
    自然语言处理:深度学习由于其非线性的复杂结构,将低维稠密且连续的向量表示为不同粒度的语言单元,例如词、短语、句子和文章,让计算机可以理解通过网络模型参与编织的语言,进而使得人类和计算机进行沟通。

    将以上的应用场景,结合工农业生产生活中,我认为可以很好的解放生产力,提高生产力——所以未来可期(共产主义),因为工作都被机器做了,人们只需要按需分配即可

6、结论

    我们结合房价预测模型,我们对深度学习进行了一个初步认识,深度学习训练出来的模型好坏,不仅仅是构造模型算法的好坏,而且在特征选择、超参设置、数据集预处理方式等方方面都非常重要,因为他们会深度的影响结果的好坏。

    本模型的优化方向1:构造更加复杂的特征,将其中的任意多个特征进行组合,然后生成一个新的特征(也许这个新特征与目标相关性更大(正相关/负相关/不相关),这样可以提升模型的预测能力),比如将地区和面积结合,我们通过回归函数,就可以发现这条新构造的特征其实与房价是正相关的。

    优化方向2:采用多模型进行对比,选出损失函数最小的模型进行结果的预测

    优化方向3:因为每个模型中都有很多超参的设置,而且这些超参的设置都会影响整个模型,让损失函数变化,我们就可以使用一个外部函数在一个连续区间,不断循环去训练模型,然后选出相对损失最小的函数,但是这回非常消耗算力和时间的。

参考比较全面的视频事例 这个事例是我看到的较全面的,来自科大讯飞出品


http://www.ppmy.cn/news/1142041.html

相关文章

怎样给Ubuntu系统安装vmware-tools

首先我要告诉你:Ubuntu无法安装vmware-tools,之所以这么些是因为我一开始也是这样认为的,vmware-tools是给Windows系统准备的我认为,毕竟Windows占有率远远高于Linux,这也可以理解。 那么怎么样实现Ubuntu虚拟机跟Wind…

微信小程序 rpx 转 px

前言 略 rpx 转 px let query wx.createSelectorQuery(); query.selectViewport().boundingClientRect(function(res){let rpx2Px 1 * (res.width/750);console.log("1rpx " rpx2Px "px"); }); query.exec();参考 https://blog.csdn.net/qq_39702…

ArduPilot开源飞控之AP_Baro

ArduPilot开源飞控之AP_Baro 1. 源由2,框架设计2.1 启动代码2.2 任务代码 AP_Baro::update2.3 任务代码 AP_Baro::accumulate2.4 任务代码 AP_TempCalibration::update 3. 重要例程3.1 AP_Baro::calibrate3.2 AP_TempCalibration3.2.1 AP_TempCalibration::setup_le…

单目标应用:猎豹优化算法(The Cheetah Optimizer,CO)求解微电网优化MATLAB

一、微网系统运行优化模型 微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、猎豹优化算法CO 猎豹优化算法(The Cheetah Optimizer,CO)由MohammadAminAkbari等人于2022年提出,该算法性…

什么情况下设备的无线接收器会出现饱和和过载?

设备的无线接收器可能会在以下情况下饱和和过载: 1. 强信号输入:当设备接收到过强的信号时,接收器可能会超出其处理能力范围,导致饱和和过载。这通常发生在设备非常靠近路由器或者处于信号源附近时。 2. 多个信号源:…

前端页面布局之【Grid布局】详解

目录 🌟前言🌟浏览器支持🌟Gird简介和基本概念🌟属性介绍🌟 父元素上的属性🌟 设置grid布局🌟设置网格的列数与行数🌟通过网格单元的名字来布局 grid-template-areas🌟设…

C语言练习百题之排序算法

题目:C语言实现排序算法 冒泡排序 思路&#xff1a; 依次比较相邻的元素&#xff0c;如果顺序不对则交换&#xff0c;直到整个数组有序。 实现代码&#xff1a; #include <stdio.h>void bubbleSort(int arr[], int n) {for (int i 0; i < n - 1; i) {for (int j…

【多线程】进程与线程 并发编程 面试题总结

进程和线程 进程是程序执行时的一个实例&#xff0c;即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看&#xff0c;进程的目的就是担当分配系统资源&#xff08;CPU时间、内存等&#xff09;的基本单位。线程是进程的一个执行流&#xff0c;是CPU调度和分派的基…