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

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、模型的训练

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 matplotlib.pyplot as plt
import random#sheng cheng shujuji
import torch
import numpy as npnum_inputs = 2
num_examples = 1000
true_w = [2,-3.4]
true_b = 4.2
features = torch.randn(num_examples,num_inputs,dtype = torch.float32)
labels = true_w[0]*features[:,0]+true_w[1]*features[:,1]+true_blabels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()), dtype=torch.float32)
def data_iter(batch_size,features,labels):num_examples = len(features)indices = list(range(num_examples))random.shuffle(indices)for i in range(0,num_examples,batch_size):j = torch.LongTensor(indices[i:min(i+batch_size,num_examples)])yield features.index_select(0,j),labels.index_select(0,j)w = torch.tensor(np.random.normal(0, 0.01, (num_inputs, 1)), dtype=torch.float32)b = torch.zeros(1, dtype=torch.float32)w.requires_grad_(requires_grad=True)b.requires_grad_(requires_grad=True)def linreg(X, w, b):return torch.mm(X, w) + bdef squared_loss(y_hat, y):return (y_hat - y.view(y_hat.size())) ** 2 / 2def sgd(params,lr,batch_size):for param in params:param.data -= lr*param.grad/batch_sizelr = 0.03num_epochs = 5net = linregloss = squared_lossbatch_size = 32for epoch in range(num_epochs):for X,y in data_iter(batch_size,features,labels):l = loss(net(X,w,b),y).sum()l.backward()sgd([w,b],lr,batch_size)w.grad.data.zero_()b.grad.data.zero_()train_l = loss(net(features,w,b),labels)print(‘epoch %d, loss %f’ % (epoch+1, train_l.mean().item()))

5、深度学习的应用

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

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

6、结论

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149815.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Docker Compose】Docker Compose 的安装,使用以及实现微服务集群的部署

文章目录 前言:Docker 部署存在的问题一、 初识 Docker Compose1.1 什么是 Docker Compose1.2 在 CentOS 上安装 Docker Compose 二、深入了解 Docker Compose 文件2.1 Docker Compose 文件概述2.2 Docker Compose 文件详解2.3 示例:编写 Docker Compose…

Linux上将进程、线程与CPU核绑定

CPU亲和性(CPU Affinity)是某一进程(或线程)绑定到特定的CPU核(或CPU集合),从而使得该进程(或线程)只能运行在绑定的CPU核(或CPU集合)上。进程(或线程)本质上并不与CPU核绑定。每次进程(或线程)被调度执行时,它都可以由其关联列表中的任何CPU核执行。如果…

WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi

好 各位 经过我们上文 WEB3 solidity 带着大家编写测试代码 操作订单 创建/取消/填充操作 我们自己写了一个测试订单业务的脚本 没想到运行的还挺好的 那么 今天开始 我们就可以开始操作我们前端 Dapp 的一个操作了 在整个过程中 确实是没有我们后端的操作 或者说 我们自己就…

Ipython和Jupyter Notebook介绍

Ipython和Jupyter Notebook介绍 Python、IPython和Jupyter Notebook是三个不同但密切相关的工具。简而言之,Python是编程语言本身,IPython是对Python的增强版本,而Jupyter Notebook是一种在Web上进行交互式计算的环境,使用IPytho…

数据科学家的编程语言

数据科学家的编程语言 在今天有256种编程语言可供选择,选择要学习的语言可能会令人不知所措和困难。有些语言更适用于构建游戏,而有些更适用于软件工程,还有一些更适用于数据科学。 编程语言的类型 低级编程语言是计算机用来执行操作的最容…

主流的图像—文本的多模态技术实现方法有哪些?

大体上可划分为3类: 1)训练中间层以对齐视觉模块和语言模型。该类方法首先预训练视觉模块,将这些视觉模块与LLM冻结,然后在视觉模块与LLM之间插入可训练的中间层,构建多模态模型。接着在大规模的图像—文本对数据集上…

WPF中, 如何将控件的触发事件绑定到ViewModel

在DataGrid 等控件中, 有很多这种带闪电符号的触发事件. 如果用传统的事件驱动, 则直接在后台中建立 一个private PropertyChanged(Sender s, EventAgars Args) 即可. 但是如果需要绑定到ViewModel的话? 应该怎么做? 带闪电符号的触发事件 实现viewModel绑定前端触发事件的…

Unity实现设计模式——解释器模式

Unity实现设计模式——解释器模式 解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的模式,现实项目中用得较少。 给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来…

python读取vivo手机截图,将满屏图片文件移动别的路径

问题之初 python读取vivo手机截图, 将满屏图片文件移动别的路径好多这样的图片,占用手机大量的内存,食之无味弃之可惜!那么会复制粘贴👀代码的我们我们今天就把这些图片筛选清理掉。 这段代码 原有逻辑的基础上&…

【C++设计模式之原型模式:创建型】分析及示例

简介 原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制已有对象来生成新的对象,而无需再次使用构造函数。 描述 原型模式通过复制现有对象来创建新的对象,而无需显式地调用构造函数或暴露对象的创建…

Fiddle日常运用手册(3)-对移动端产品进行数据接口抓包

一般如果在做安卓移动端产品测试的时候,一般不像WEB端产品,可以直接进行F12进行接口日志查看开发预留的打印信息,将会影响测试人员的问题定位精准度以及效率。 这里,我们就介绍一下使用Fiddle进行移动端产品的抓包教程。 一、pc端…

JavaAPI---replace

package daysreplace;public class ReplaceTest {public static void main(String[] args) {String str "wwxhhhhhhhhhhh333";System.out.println("替换前的字符串" str);String newstr str.replace("333", "111");System.out.prin…

CRMEB商城源码开源标准版v5.2.0+后端+前端uni-app开源包安装教程

CRMEB打通版是一款全开源支持商用的PHP多语言商城系统,历经年时间匠心之作!系统采用前后端分离技术,基于TP6Uui-app框架开发;客户移动端采用uni-app开发,管理后台前端使用iviewUI开发。系统支持微信公众号端、微信小程序端、H5端、…

10链表-单链表构造LinkedList

目录 LeetCode之路——707. 设计链表 分析: Code: LeetCode之路——707. 设计链表 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,n…

@SpringBootApplication剖析

一、前言 在SpringBoot项目中启动类必须加一个注解SpringBootApplication,今天我们来剖析SpringBootApplication这个注解到底做了些什么。 二、SpringBootApplication简单分析 进入SpringBootApplication源代码如下: 可以看出SpringBootApplication是…

el-date-picker增加默认值 修改样式

预期效果 默认是这样的 但希望是直接有一个默认的当天日期,并且字体颜色啥的样式也要修改(在这里假设今天是2023/10/6 功能实现 踩了坑挺多坑的,特此记录 官方文档 按照官方的说明,给v-model绑定一个字符串就可以了 在j…

关联规则挖掘(下):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

uniapp 实现地图头像上的水波纹效果

最近实现了uniapp 地图头像水波纹的效果,话不多说,先来看看视频效果吧:链接 在这里具体的代码就不放出来了,还是利用了uniapp的 uni.createAnimation 方法,因为cover-view 不支持一些css 的动画效果,所以这…

文举论金:非农到来!黄金原油全面走势分析策略独家指导

市场没有绝对,涨跌没有定势,所以,对市场行情的涨跌平衡判断就是你的制胜法宝。欲望!有句意大利谚语:让金钱成为我们忠心耿耿的仆人,否则,它就会成为一个专横跋扈的主人。空头,多头都…

24 mysql all 查询

前言 这里主要是 探究一下 explain $sql 中各个 type 诸如 const, ref, range, index, all 的查询的影响, 以及一个初步的效率的判断 这里会调试源码来看一下 各个类型的查询 需要 lookUp 的记录 以及 相关的差异 此系列文章建议从 mysql const 查询 开始看 测试表结构…