【案例】从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.mzph.cn/news/95777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

领域驱动设计

今天我们来聊聊领域驱动设计(Domain Driven Design,即 DDD)。 说起业务建模,领域驱动设计是一个绕不过去的话题。自从 Eric Evans 在2000后发布他的名著“Domain Driven Design:Tackling the Complexity in the Heart …

Netty(四)NIO-优化与源码

Netty优化与源码 1. 优化 1.1 扩展序列化算法 序列化,反序列化主要用于消息正文的转换。 序列化:将java对象转为要传输对象(byte[]或json,最终都是byte[]) 反序列化:将正文还原成java对象。 //java自带的序列化 // 反序列化 b…

SpringBoot自带模板引擎Thymeleaf使用详解①

目录 前言 一、SpringBoot静态资源相关目录 二、变量输出 2.1 在templates目录下创建视图index.html 2.2 创建对应的Controller 2.3 在视图展示model中的值 三、操作字符串和时间 3.1 操作字符串 3.2 操作时间 前言 Thymeleaf是一款用于渲染XML/HTML5内容的模板引擎&am…

[unity]保存文件的路径设置

序 比如,序列化了一个数组,保存到磁盘上。 原来的路径是"D://test.bin",能跑,但是有点问题:序列化出来的文件和原项目离的太远,不好管理。 要是能保存到unity工程的文件夹里就好了。这个路径该…

学习记忆——方法篇——整除特点

理解记忆法 对于数的整除特征大家都比较熟悉:比如4看后两位(因为100是4的倍数),8看后三位(因为1000是8的倍数),5末尾是0或5,3与9看各位数字和等等,今天重点研究一下3,9,…

毕设-原创医疗预约挂号平台分享

医疗预约挂号平台 不是尚医通项目,先看项目质量(有源码论文) 项目链接:医疗预约挂号平台git地址 演示视频:医疗预约挂号平台 功能结构图 登录注册模块:该模块具体分为登录和注册两个功能,这些…

小样本学习——匹配网络

目录 匹配网络 (1)简单介绍: (2)专业术语 (3)主要思想 (4)训练过程 问题 回答 MANN 匹配网络 (1)简单介绍: Matching netwo…

647. 回文子串

题目描述 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成&#xff0c…

css 实现相关案例

css 实现相关案例 抽屉案例(带吸附箭头) <template><div class"container"><div class"main-box"><div class"left-box">左边盒子</div><!--下面两种方式皆可实现展示和隐藏 --><div :style"{ f…

SpringBoot 如何进行参数校验?

在Spring Boot中进行参数校验通常是使用JSR 303规范&#xff08;也称为Bean Validation&#xff09;的注解和Spring的Validation API来完成的。以下是一些常见的步骤和示例&#xff0c;用于在Spring Boot应用程序中进行参数校验&#xff1a; 添加依赖&#xff1a; 首先&#xf…

创新家庭办公室:打造完美工作空间的秘诀

一个精心策划的家庭办公室有很多好处&#xff0c;何不把临时工作区升级改造为你的专属工作区呢&#xff0c;还能为这些至关重要的区域注入新的活力。 创造多用途的起居室&#xff1a;我们大多数人都不曾拥有一个可以完全根据工作需求设计的独立家庭办公室——所以有时候要找到…

【锁的区别】C++线程库和POSIX线程库锁的区别

C线程库和POSIX线程库锁的区别 C线程库代码段的互斥&#xff1a;mutex、recursive_mutex、timed_mutex、recursive_timed_mutex互斥量mutex&#xff1a;直接进行lock()或者unlock()递归互斥锁recursive_mutex&#xff1a;可以多次加锁&#xff0c;意味着加几次锁就需要解几次锁…

【C++】:类和对象(2)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux的基础知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…

netcore Polly.Core

一、安装包 <PackageReference Include"Polly.Core" Version"8.0.0" /> 二、编写重试 ResiliencePipeline pipeline new ResiliencePipelineBuilder().AddRetry(new RetryStrategyOptions{MaxRetryAttempts 2,Delay TimeSpan.FromSeconds(3),O…

王杰国庆作业day6

服务器 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <my_head.h> #define PORT 2324 //端口号 #define IP "192.168.10.107" //本机IP int main(int argc, const char *argv[]) {sqlite3* d…

【JavaEE】JUC(Java.util.concurrent)常见类

文章目录 前言ReentrantLock原子类线程池信号量CountDownLatch相关面试题 前言 经过前面文章的学习我们大致了解了如何实现多线程编程和解决多线程编程中遇到的线程不安全问题&#xff0c;java.util.concurrent 是我们多线程编程的一个常用包&#xff0c;那么今天我将为大家分…

QT 实现 TCP 客户端服务器代码

服务器 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器头文件 #include<QTcpSocket> //客户端头文件 #include<QList> //链表容器 #include<Q…

Vue2插槽的简单使用示例

插槽-slot 基本使用作用域插槽具名插槽 1. 基本使用 比较简单, 比如: <template> <a :href”url”> <slot :slotData”website”>xxxx</slot> </a> </template> 父页面使用--不用获取slotdemo组件里面的数据的时候: <slotDemo :u…

vue、vuex状态管理、vuex的核心概念state状态

每一个 Vuex 应用的核心就是 store&#xff08;仓库&#xff09;。“store”基本上就是一个容器&#xff0c;它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同&#xff1a; Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候&…

【TensorFlow Hub】:有 100 个预训练模型等你用

要访问TensorFlow Hub&#xff0c;请单击此处 — https://www.tensorflow.org/hub 一、说明 TensorFlow Hub是一个库&#xff0c;用于在TensorFlow中发布&#xff0c;发现和使用可重用模型。它提供了一种使用预训练模型执行各种任务&#xff08;如图像分类、文本分析等&#xf…