首页 > 其他分享 >机器学习之回归

机器学习之回归

时间:2023-07-14 18:00:17浏览次数:38  
标签:机器 训练 数据 回归 学习 train test model data

回归是机器学习中最常见的任务之一,回归(regression)问题预测的是一个连续值,而不是离散标签,比如根据气象数据预测明日气温,或者根据房地产数据估算房价(标量回归问题)。

接下来就以回归问题最经典的波士顿房价为例,了解标量回归问题的基本配置。当然主要是对深度学习的训练与推理建立一个基本的认知,训练结果好坏反而不太重要。

既然是机器学习,了解python是必备的(上手也很容易),使用的也是易上手的keras框架,接着再了解一下numpy,可以上路了。

基于tensorflow.js实现的纯前端小样例请看:线性回归

大纲

  1. 准备数据

  2. 构建模型

  3. 训练模型

  4. 预测结果

波士顿房价数据集介绍

  • data:样本都有13个数值特征,比如人均犯罪率、住宅的平均房间数、高速公路可达性等

  • target:目标是房价中位数,单位是千美元

由数据集训练出的模型要达到的效果:用户输入13个数值特征数据,预测出一个房价中位数(输入data,输出target)。

准备数据

取值范围差异很大的数据输入到神经网络中是有问题的,这会让模型学习变得困难。对于这类数据,普遍采用的最佳处理方法是对每个特征进行标准化,即对于输入数据的每个特征(输入数据矩阵的每一列),减去特征平均值,再除以标准差,这样得到的特征平均值为0,标准差为1。

这个步骤一般叫做数据的标准化(normalization),目的就是把所有数据都映射到同一个数据空间,一般是[0,1]或[-1,1]范围内,以方便后续模型的学习。

from tensorflow.keras.datasets import boston_housing

(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()#加载波士顿房价数据集
 
mean = train_data.mean(axis=0)#平均值
train_data -= mean
std = train_data.std(axis=0)#标准差
train_data /= std
test_data -= mean
test_data /= std

mean方法用于得出数据集的平均值,这是numpy的ndarrays对象自带的方法,同理std是封装好的标准差方法,标准差原理比较繁琐,想了解具体细节可自己去了解。

构建模型

由于样本数量比较小,因此合适的选择是使用一个小的模型。它包含两个中间层,每层有64个单元,一般来说,训练数据越少,过拟合就会越严重,而较小的模型可以降低过拟合。

from tensorflow import keras
from tensorflow.keras import layers

def build_model():
    model = keras.Sequential([
        layers.Dense(64, activation="relu"),#64个单元,激活函数为relu
        layers.Dense(64, activation="relu"),
        layers.Dense(1)#最后一层(输出层)
    ])
    model.compile(optimizer="rmsprop", loss="mse", metrics=["mae"])
    return model

因为是标量回归(标量回归是预测单一连续值的回归),模型的最后一层只有一个单元,并不需要激活函数。损失函数为均方误差(mean squared error,MSE),预测值与目标值之差的平方,这是回归问题常用的损失函数。

在训练过程中要监控的指标:平均绝对误差(mean absolute error,MAE),它是预测值与目标值之差的绝对值。

训练模型

中间省了评估训练结果,调节超参数的过程,这里直接用所有的数据进行训练,这里数据量比较少,没有再区分出验证集(validation data)。如果想看直观的查看训练效果,可以使用 matplotlib 库绘制验证MAE曲线。

  • epochs 顾名思义就是训练的轮次;

  • batch_size 批次尺寸,即每次完整的正向和反向传播使用的数据量,必须为2的n次幂;这个参数会影响训练的效果,和显存的大小息息相关,以后要注意;

model = build_model()  #获取已编译模型
history = model.fit(train_data, train_targets, epochs=150, batch_size=16) #训练模型
test_mse_score, test_mae_score = model.evaluate(test_data, test_targets) #评估训练效果

预测结果

训练好模型后,接着直接用测试集进行预测一下结果,查看预测结果的第一条为 9.514468 (单位:千美元)

>>> predictions = model.predict(test_data)
>>> predictions[0]
array([9.514468], dtype=float32)

总结

  • 回归常用的损失函数是均方误差(MSE)

  • 常用的回归指标是平均绝对误差(MAE)

  • 数据应该先进行预处理

  • 如果可用的训练数据少,那么最好使用中间层较少(通常只有一两个)的小模型,以避免严重的过拟合

标签:机器,训练,数据,回归,学习,train,test,model,data
From: https://www.cnblogs.com/edwardloveyou/p/17554658.html

相关文章

  • 鸟类识别系统python+TensorFlow+Django网页界面+卷积网络算法+深度学习模型
    一、介绍鸟类识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。二、效果图片三、演示视频and代码视频+......
  • 零一PPT学习_P8/P31
    一、字体下载两个网站1、站长素材:Font.china2.com2、模板王:http://fonts.mobanwang.com/二、清除字体格式开始-字体-橡皮擦(清除字体格式) ......
  • 《可解释的机器学习》校对活动正式启动 | ApacheCN
    项目仓库:https://github.com/apachecn/interpretable-ml-book-zh整体进度:https://github.com/apachecn/interpretable-ml-book-zh/issues/1贡献指南:https://github.com/apachecn/interpretable-ml-book-zh/blob/master/CONTRIBUTING.md贡献指南请您勇敢地去翻译和改进翻译。虽然我......
  • 容器镜像学习笔记
    目录docker在本地从DockerHub下载镜像的方法在OpenEuler系统上安装Docker的方法docker镜像的命名规则dockerdangling虚悬镜像dockermanifestmultiarchdockerdesktop配置使用curl访问registry的命令使用postman访问registry的urlsdocker重启命令docker的常见命令......
  • 学习Java第2天
    ##快捷键Ctrl+c复制Ctrl+v粘贴Ctrl+z撤销Ctrl+a全选Ctrl+x剪切Ctrl+s保存Alt+f4关闭窗口Windows+e我的电脑Windows+r运行窗口Ctrl+shift+ESC任务管理器#打开CMD的方式1.开始+系统+命令提示符2.win健+r输入cmd打开控制台(推荐使用)3.在任意的文件夹......
  • 测试学习总结
    1.敏捷测试测试往往被期望承担项目质量控制的职责。这点很难做到,测试既不能控制代码如何编写,也不能控制开发人员测试他们编写的代码,但所有的质量把控都被期望能压缩在开发之后的测试阶段完成。 在敏捷项目中,测试人员不再被动等待工作降临,而是主动寻找在整个开发周期中都贡献价......
  • 关于scrapy框架的学习
    最近打算参加一个爬虫比赛,特来研究爬虫,在掌握了爬虫的基本实现后,我们需要用一个更高效的方式来写爬虫这个时候便用到了爬虫框架scrapyscrapy是什么?Scrapy是一个应用程序框架,用于对网站进行爬行和提取结构化数据,这些结构化数据可用于各种有用的应用程序,如数据挖掘、信息处......
  • Oracle学习笔记:parallel并行处理 --转载 https://blog.csdn.net/w892824196/article/
    在使用oracel查询时,可以通过并行提高查询速度。例如:select/*+parallel(a,6)*/count(1)fromtable_namea;强行启用并行度来执行当前SQL。加上这个说明之后,可以强行启用Oracle的多线程处理功能,提高效率。但本身启动这个功能,也是要消耗资源与性能的。所有,一般都会在返回记......
  • c++学习之extern C
    g++也可以编译c语言函数,1//filename:extern_c.cc23#include<iostream>45#ifdef__cplusplus6extern"C"{7#endif8//c语言语句开始9#include<stdio.h>1011intcmain(){12printf("hello");13return0;14}1......
  • 2022 RoboCom 世界机器人开发者大赛-高职组(省赛)
    RC-v1您好呀print("NinHaoYa~")RC-v2爷爷奶奶您好呀#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongint32_tmain(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);stringa,b,c;cin>......