机器学习_实战框架

文章目录

  • 介绍机器学习的实战框架
    • 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)机构
光环大数据
开课吧
极客时间
七月在线
深度之眼
贪心学院
拉勾教育
博学谷

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

强化学习应用(四):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个价值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

STM32 定时器输入捕获1——初始化配置

当想检测高电平或低电平的持续时间的时候,就可以使用定时器输入捕获。例如示波器就是用到这个功能。这里就讲解一下定时器到底是如何输入捕获的: 由上图我们可以知道,周期 是每次连续的上升沿的时间差(例如:T第二个方波…

AI赋能建筑设计 | VERYCLOUD睿鸿股份与亚马逊云科技协力为AIRI lab. 打造生成式AI应用案例

近年来,很多研究都致力于探索如何让建筑师借助人工智能的力量来促进并简化设计流程。生成式AI全球爆火以来,建筑设计领域也掀起了一场全新的思维变革。 AI为建筑设计带来更多可能 作为一家面向全球提供设计服务的企业,AIRI lab.计划推出一种…

SIP-2401VP SIP音频广播模块SIP-2401VP SIP号角音柱音箱解码poe广播播放核心板

SV-2401VP和SV-2403VP网络音频模块是一款通用的独立SIP音频功能模块,可以轻松地嵌入到OEM产品中。该模块对来自网络的SIP协议及RTP音频流进行编解码。 该模块支持多种网络协议和音频编解码协议,可用于VoIP和IP寻呼以及高质量音乐流媒体播放等应用。同时…

QT 小组件 列表框以及微调框

.cpp文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);QListWidgetItem *pPhone new QListWidgetItem;pPhone->setText("西瓜");pPhone->…

什么是云服务器,阿里云优势如何?

阿里云服务器ECS英文全程Elastic Compute Service,云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云百科aliyunbai…

数据结构 模拟实现Queue队列(双链表模拟)

目录 一、队列的概念 二、队列的接口 三、队列的方法实现 (1)offer方法 (2)poll方法 (3)peek方法 (4)size方法 (5)isEmpty方法 四、最终代码 一、队…

行为型设计模式——状态模式

状态模式 状态模式是比较简单的设计模式,它的主要作用是减少代码中大量的 if-else 或者 switch-case 等逻辑判断(俗称屎山)。它将每个状态定义为一个类,而每个状态类有自己对应的方法,因此当需要根据状态执行逻辑代码…

从零开始搭建一个个人博客并部署发布

1、为什么要自己搭建一个个人博客呢 首先,市场上主流的个人博客有CSDN、掘金、博客园等博客平台,这些平台方便了用户创作、记录的同时,也存在一些弊端,比如某些平台可能你的文章阅读量过高的话,会强制收费等问题已经是…

基于ssm快餐店点餐结算系统的设计与实现+vue论文

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装快餐店点餐结算系统软件来发挥其高效地信息处理的作用&…

Kubernetes (十) 存储——Configmap配置管理

一.Configmap作用 实验环境:清除之前的ns pod svc networkpolicy...... kubectl delete -f networkpolicy.yaml kubectl delete svc myapp-v1 kub…

2024年腾讯云新用户专属优惠活动及代金券活动汇总

腾讯云作为国内领先的云计算服务提供商,一直致力于为用户提供优质、高效的服务。为了更好地满足新用户的需求,腾讯云在2024年推出了一系列新用户专属优惠活动和代金券活动。本文将为大家详细介绍这些活动,帮助大家更好地了解和利用这些优惠。…

CCF模拟题 202309-2 坐标变换(其二)

问题描述 试题编号: 202309-2 试题名称: 坐标变换(其二) 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 对于平面直角坐标系上的坐标 (x,y),小 P 定义了如下两…

vue3dLoader Cannot read properties of null (reading ‘setCrossOrigin‘)“这个报错怎么解决?

默认情况下crossOrigin默认值是“anonymous” 如果出现报错的情况 请设置crossOrigin为空字符串即可。如&#xff1a; <vue3dLoader crossOrigin""> 相关阅读 推荐&#xff1a;vue-3d-loader支持.dae/.fbx/.gltf/.glb/.obj/.ply/.stl/.json&#xff0c;并支…

端侧AI的“春风化雨手”,翻开中国科技下一页

大模型是一年多来全球科技圈的最大热点&#xff0c;手机厂商想要借助大模型的锋芒&#xff0c;打造高端形象&#xff0c;获得新的增长&#xff0c;这无可厚非。 不过&#xff0c;大家注意到没有&#xff0c;越是“AI强者”&#xff0c;对待大模型越举重若轻。 简单来说&#xf…

比尔盖茨:如果只能解决一个问题,我的答案总是营养不良

谷禾健康 当地时间12月19日&#xff0c;微软联合创始人、亿万富翁比尔盖茨发布了对来年的年度预测&#xff0c;称 2024 年将是一个“转折点”。 在这封长达 10 页的信中他展示了对人工智能领域的更多创新、婴儿营养不良问题的突破、气候变化谈判的进展等多方面的期待。 人工智能…

C++(9)——内存管理

1. 内存分类&#xff1a; 在前面的文章中&#xff0c;通常会涉及到几个名词&#xff0c;例如&#xff1a;栈、堆。这两个词所代表的便是计算机内存的一部分 。在计算机中&#xff0c;对系统的内存按照不同的使用需求进行了区分&#xff0c;大致可以分为&#xff1a;栈 、堆、数…

What does `rpm -ivh` do?

rpm -ivh 安装 并 显示安装进度 (–install–verbose–hash) rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm 安装rpm -ivh --relocate //opt/gaim gaim-1.3.0-1.fc4.i386.rpm 指定安装到 /opt/gaim[Ref] rpm -uvh和-ivh有什么区别以及zabbix 安…

在微服务架构中认证和授权的那些事儿

在微服务架构中认证和授权是最基础的服务能力&#xff0c;其中这一块行业类的标准就是OAuth2 和 SSO &#xff0c;而OAuth2 和 SSO 可以归类为“用户管理和身份验证”工具&#xff0c;OpenID Connect 1.0是 OAuth 2.0 协议之上的一个简单身份层。 Part.1 认识OAuth 2.0 OAuth…

libignition-gazebo-diff-drive-system.so是什么

因该就是个动态链接库&#xff0c;库文件之类 而且就是gazebo6版本也就是ign 这个版本的动态链接库有个特点&#xff1a;全部都是以.so结尾&#xff0c;所以很可能ign的插件plugin都是带.so的 abcdegx.so elvikorflsd.so fvlwirjgiojf.so等