机器学习_实战框架

文章目录

  • 介绍机器学习的实战框架
    • 1.定义问题
    • 2.收集数据和预处理
      • (1).收集数据
      • (2).数据可视化
      • (3).数据清洗
      • (4).特征工程
      • (5).构建特征集和标签集
      • (6).拆分训练集、验证集和测试集。
    • 3.选择算法并建立模型
    • 4.训练模型
    • 5.模型的评估和优化


介绍机器学习的实战框架

一个机器学习项目从开始到结束大致分为 5 步,分别是定义问题、收集数据和预处理、选择算法和确定模型、训练拟合模型、评估并优化模型性能。这 5 步是一个循环迭代的过程,你可以参考下面的图片:
在这里插入图片描述

1.定义问题

我们项目的目标就是,建立一个机器学习模型,根据点赞数和转发数等指标,估计一篇文章能实现多大的浏览量

因为要估计浏览量,所以在这个数据集中:点赞数、转发数、热度指数、文章评级,这 4 个字段都是特征,浏览量就是标签。这里我们已经有要估计的标签了,所以这是一个监督学习问题。再加上我们的标签是连续性的数值,因此它是一个回归问题

2.收集数据和预处理

(1).收集数据

首先是收集数据,这一步又叫采集数据。

在现实中,收集数据通常很辛苦,要在运营环节做很多数据埋点、获取用户消费等行为信息和兴趣偏好信息,有时候还需要上网爬取数据。

收集数据的方法有很多,这里推荐之前写过的相关文章:
数据爬虫(JSON格式)&数据地图可视化(pyecharts)【步骤清晰,一看就懂】:https://blog.csdn.net/weixin_42504788/article/details/134588642

数据爬取+数据可视化实战_哪里只得我共你(Dear Jane)_词云展示----网易云:https://blog.csdn.net/weixin_42504788/article/details/134622850

数据爬取+可视化实战_告白气球_词云展示----酷狗音乐:https://blog.csdn.net/weixin_42504788/article/details/134622575

处理Json格式的数据,如何用Python将数据存放入Excel中(步骤清晰,一看就懂):https://blog.csdn.net/weixin_42504788/article/details/134543733

(2).数据可视化

数据可视化是个万金油技能,能做的事非常多。比如说,可以看一看特征和标签之间可能存在的关系,也可以看看数据里有没有“脏数据”和“离群点”等。

常用的工具包有:

import matplotlib.pyplot as plt # Matplotlib – Python画图工具库
import seaborn as sns # Seaborn – 统计学数据可视化工具库

(3).数据清洗

处理缺失的数据:用均值填充、众数填充或0。如果建模用树模型,也可以不填充,树模型算法自身可以处理缺失值。
处理重复的数据:完全相同,删去即可。
处理错误的数据:部门人数、销量、销售金额小于0,遇到这类情况删去即可。
处理不可用的数据:建模的时候,数据必须是数字,不能是中英文等情况。比如性别出现男女字样,需要转化后再进行建模
在这里插入图片描述

查看空缺值NaN出现的次数:df.isna().sum()
把出现了NaN的数据行删掉:df = df.dropna()

(4).特征工程

特征贴合业务实际,特征越丰富,模型效果会更好

(5).构建特征集和标签集

特征是输入机器学习模型的变量。

X = df.drop(['浏览量'],axis=1)
X.head()

在这里插入图片描述

标签是结果或目标。

y = df.浏览量
y.head()

在这里插入图片描述

(6).拆分训练集、验证集和测试集。

一般为了简化,验证集会省略,这里展示如何从数据中切分出训练集跟测试集

#将数据集进行80%(训练集)和20%(验证集)的分割
from sklearn.model_selection import train_test_split #导入train_test_split工具
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

random_state设置一个值,保证每次切分的数据都一致,再次运行建模的效果也出现一致性。

X_train:训练集的特征
X_test:测试集的特征
y_train:训练集的标签
y_test:测试集的标签

3.选择算法并建立模型

进行多个机器学习算法进行比较,将最优的算法作为baseline
这里举个经典的逻辑回归例子,

from sklearn.linear_model import LinearRegression # 导入线性回归算法模型
linereg_model = LinearRegression() # 使用线性回归算法创建模型

对于 LinearRegression 模型来讲,它的外部参数主要包括两个布尔值:

  • fit_intercept ,默认值为 True,代表是否计算模型的截距。
  • normalize,默认值为 False,代表是否对特征 X 在回归之前做规范化。

4.训练模型

训练模型就是用训练集中的特征变量和已知标签,根据当前样本的损失大小来逐渐拟合函数,确定最优的内部参数,最后完成模型

fit 方法是机器学习的核心环节,里面封装了很多具体的机器学习核心算法,我们只需要把特征训练数据集和标签训练数据集,同时作为参数传进 fit 方法就行了。

linereg_model.fit(X_train, y_train) # 用训练集数据,训练机器,拟合函数,确定内部参数

不要小看上面那个简单的 fit 语句,这是模型进行自我学习的关键过程。

fit 的核心就是减少损失,使函数对特征到标签的模拟越来越贴切。
在这里插入图片描述

这个拟合的过程,同时也是机器学习算法优化其内部参数的过程。而优化参数的关键就是减小损失。

那什么是损失呢?它其实是对糟糕预测的惩罚,同时也是对模型好坏的度量。如果模型的预测完全准确,则损失为 0;如果不准确,就有损失。

在机器学习中,我们追求的当然是比较小的损失。不过,模型好不好,还不能仅看单个样本,还要针对所有数据样本,找到一组平均损失“较小”的函数模型。样本的损失大小,从几何意义上基本可以理解为预测值和真值之间的几何距离。平均距离越大,说明误差越大,模型越离谱。在下面这个图中,左边是平均损失较大的模型,右边是平均损失较小的模型,模型所有数据点的平均损失很明显大过右边模型。

在这里插入图片描述

回归模型的拟合,它的关键环节就是通过梯度下降,逐步优化模型的参数,使训练集误差值达到最小。这也就是我们刚才讲的那个 fit 语句所要实现的最优化过程。

在这里插入图片描述

就像图里这样,梯度下降其实就和下山一样。你可以想象一下,当你站在高处,你的目标就是找到一系列的参数,让训练数据集上的损失值最小。那么你该往哪走才能保证损失值最小呢?关键就是通过求导的方法,找到每一步的方向,确保总是往更小的损失方向前进。

5.模型的评估和优化

梯度下降是在用训练集拟合模型时最小化误差,这时候算法调整的是模型的内部参数。而在验证集或者测试集进行模型效果评估的过程中,我们则是通过最小化误差来实现超参数(模型外部参数)的优化。

机器学习工具包(如 scikit-learn)中都会提供常用的工具和指标,对验证集和测试集进行评估,进而计算当前的误差。比如 R2 或者 MSE 均方误差指标,就可以用于评估回归分析模型的优劣。

当我们预测完测试集的浏览量后,我们要再拿这个预测结果去和测试集已有的真值去比较,这样才能够求出模型的性能。而这整个过程也同样是一个循环迭代的过程

在这里插入图片描述

预测测试集的浏览量,只需要用训练好的模型 linereg_model 中的 predict 方法,在 X_test(特征测试集)上进行预测,这个方法就会返回对测试集的预测结果。

y_pred = linereg_model.predict(X_test) #预测测试集的Y值

拿到预测结果后,我们再通过下面的代码,把测试数据集的原始特征数据、原始标签真值,以及模型对标签的预测值组合在一起进行显示、比较。

df_ads_pred = X_test.copy() # 测试集特征数据
df_ads_pred['浏览量真值'] = y_test # 测试集标签真值
df_ads_pred['浏览量预测值'] = y_pred # 测试集标签预测值
df_ads_pred #显示数据

在这里插入图片描述

如果你想看看现在的模型长得什么样?你可以通过 LinearRegression 的 coef_ 和 intercept_ 属性打印出各个特征的权重和模型的偏置来。它们也就是模型的内部参数。

print('当前模型的4个特征的权重分别是: ', linereg_model.coef_)
print('当前模型的截距(偏置)是: ', linereg_model.intercept_)# 输出结果:
# 当前模型的4个特征的权重分别是:  [   48.08395224    34.73062229 29730.13312489  2949.62196343]
# 当前模型的截距(偏置)是:  -127493.90606857178

这也就是说,我们现在的模型的线性回归公式是:
yy=48.08x1​(点赞)+34.73x2​(转发)+29730.13x3​(热度)+2949.62x4​(评级)−127493.91

对当前这个模型,给出评估分数:

print("线性回归预测评分:", linereg_model.score(X_test, y_test)) # 评估模型# 输出结果:
# 线性回归预测评分: 0.7085754407718876

一般来说,R2 的取值在 0 到 1 之间,R2 越大,说明所拟合的回归模型越优。现在我们得到的 R2 值约为 0.708,在没有与其它模型进行比较之前,我们实际上也没法确定它是否能令人满意。

如果模型的评估分数不理想,我们就需要回到第 3 步,调整模型的外部参数,重新训练模型。要是得到的结果依旧不理想,那我们就要考虑选择其他算法,创建全新的模型了。如果很不幸,新模型的效果还是不好的话,我们就得回到第 2 步,看看是不是数据出了问题。
在这里插入图片描述

当模型通过了评估,就可以去解决实际问题了,机器学习项目也算是基本结束。


学习机器学习的参考资料:
(1)书籍
利用Python进行数据分析
西瓜书
百面机器学习
机器学习实战
阿里云天池大赛赛题解析(机器学习篇)
白话机器学习中的数学
零基础学机器学习
图解机器学习算法

(2)机构
光环大数据
开课吧
极客时间
七月在线
深度之眼
贪心学院
拉勾教育
博学谷

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

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

相关文章

在加载第三方库过程中,无法加载到库的问题(使用readelf, patchelf命令)

无法加载到库问题 问题及分析过程readelf 命令patchelf命令 问题及分析过程 在开发一个程序过程中,需要加载第三方库iTapTradeAPI, 在CMakeList.txt中已经设置了CMAKE_INSTALL_RPATH,但是发布到生产之后由于目录问题无法加载到libiTapTradeAPI库了 下面…

一篇文章带你了解Python常用自动化测试框架——Pytest!

在之前的文章里我们已经学习了Python自带测试框架UnitTest,但是UnitTest具有一定的局限性 这篇文章里我们来学习第三方框架Pytest,它在保留了UnitTest框架语法的基础上有着更多的优化处理 下面我们将从以下角度来介绍Pytest: Pytest基本介…

Docker的基础概念及命令

这篇主要介绍一下Docker比较重要的两个概念,镜像和容器,以及操作它们的一些常用命令。 文章目录 一、基础命令二、镜像三、容器 一、基础命令 docker -v:查看 Docker 的版本 systemctl start docker:启动docker systemctl stat…

JavaScript中这些事件(event)类型你都知道吗?

JavaScript中有许多不同类型的事件,用于监听和响应Web页面上的各种交互和用户动作。以下是一些常见的JavaScript事件类型: 鼠标事件: click: 鼠标点击元素时触发。mouseover 和 mouseout: 鼠标进入和离开元素时触发。mousedown 和 mouseup: 鼠…

x-cmd pkg | ctop - 针对容器的类 top 命令

目录 介绍首次用户功能特点类似工具与竞品进一步阅读 介绍 ctop 是一个基于容器的类似 top 命令的性能监控工具,采用 Go 语言编写的,它以类似于 top 命令的方式显示运行中的容器的资源使用情况。ctop 提供了一个交互式的界面,可以让用户实时…

fo安方的个人、博客和专栏

💝💝各位领导好,欢迎光临💝💝 ☁️☁️slogon:云想衣裳花想容,春风扶栏露华容☁️☁️ 💥💥个人主页:fo安方的博客💥💥 💞…

CRLF漏洞靶场记录

搭建 利用 docker 搭建 vulhub 靶场 git clone https://github.com/vulhub/vulhub.git 进入 /vulhub/nginx/insecure-configuration 目录 启动前关闭现有的 8080、8081、8082 端口服务,避免端口占用 docker-compose up -d 进入容器 docker exec -it insecure-…

Jmeter接口自动化02--JMeter的安装和使用

p02 高清B站视频链接 2.1 Windows环境 首先需要安装JDK,然后再部署JMeter。注意,JMeter对JDK的版本是有要求的,一般至少要JDK8,这也是目前开发过程中使用频繁的版本。 1. 安装JDK 从官网下载JDK:https://www.oracl…

Java人脸识别

Java人脸识别 一.提出问题,引入SDK的概念 什么是SDK? 我们并不具备开发人脸识别的能力,但我们可以用大公司已经开发好的工具或者功能,来实现人脸识别,而大公司提供的就叫SDK(Software Development Kit)软件开发工具包…

扫雷(c语言)

先开一个test.c文件用来游戏的逻辑测试,在分别开一个game.c文件和game.h头文件用来实现游戏的逻辑 主要步骤: 游戏规则: 输入1(0)开始(结束)游戏,输入一个坐标,如果该坐…

制作文件二维码有什么好处?多个文件通过一个二维码展示的方法

现在把文件做成二维码来使用是很常见的一种方式,那么为什么很多人会选择这种方式来分享文件呢?那么用文件二维码有哪些好处呢?下面就让小编来给大家讲解一下。 首先,将文件制作二维码有利于多人同时查看内容,方便文件…

矿山无人驾驶方案

矿山无人驾驶运输系统,可实现露天矿采煤装载运输的无人化,满足智能矿山安全、高效、绿色、环保等目标。 无人驾驶应用的总体技术架构包括“车端、场端、云端”三个层面以及相应的安全保障体系,其中车端的智能矿卡具备车辆感知、通信、决策和执…

验证端口连通性的工具 telent nc

验证端口连通性的工具 telent nc 1、怎么验证端口连通性的工具2、telnet3、nc 1、怎么验证端口连通性的工具 telent nc这2个工具都可以验证端口连通性 2、telnet 命令格式 默认是验证tcp端口连通性 telnet ip port如果需要验证udp端口连通性 需要加上 -u telnet -u ip por…

【回顾2023,展望2024】砥砺前行

2023年总结 转眼间,迎来了新的一年2024年,回顾2023,对于我来说是一个充满平凡但又充实又幸运的一年。这一年经历了很多的事情,包括博客创作、技术学习、出书、买房等,基本上每件事情都是一个前所未有的挑战和机遇、使…

PHP开发日志 ━━ php8.3安装与使用组件Xdebug

今天开头写点历史: 二十年前流行asp,当时用vb整合常用函数库写了一个dll给asp调用,并在此基础上开发一套仿windows界面的后台管理系统;后来asp逐渐没落,于是在十多年前转投php,不久后用php写了一套mvc框架&…

行云部署成长之路 -- 慢 SQL 优化之旅 | 京东云技术团队

当项目的SQL查询慢得像蜗牛爬行时,用户的耐心也在一点点被消耗,作为研发,我们可不想看到这样的事。这篇文章将结合行云部署项目的实践经验,带你走进SQL优化的奇妙世界,一起探索如何让那些龟速的查询飞起来!…

乱码问题汇总

写在前面 在工作中经常会碰到各种莫名其妙的乱码问题,但通过之前的学习:字符集&字符编码-CSDN博客 ,可以知道乱码的根本原因就是使用和数据源编码不一样的编码解码导致。 如:BIG5解码GB2312编码内容,编解码不一致…

[软件工具]pdf多区域OCR识别导出excel工具使用教程

首先我们打开软件,界面如下: 如上图,使用非常简单,步骤如下: (1)选择工具-取模板选择一个pdf文件划定自己需要识别的区域,如果你选择第2页指定区域则软件统一识别所有pdf第2页指定区…

VUE指令(一)

vue会根据不同的指令,针对不同的标签实现不同的功能。指令是带有 v- 前缀的特殊标签属性。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。 1、v-text:设置元素的文本内容,不会解…

声纳技术24.1.12信号模糊函数-多普勒频移

声纳接收机常采用方法:匹配滤波处理 由于信号的模糊函数与匹配滤波器存在一定联系,因而通过分析信号模糊函数了解声纳系统性能 一、 信号的多普勒频移 多普勒频移:声纳与目标间相对运动使接收信号波形发生改变,表现为信号频率偏…