机器学习实战六步法之数据预处理(五)

news2024/11/27 4:21:42

要落地一个机器学习的项目,是有章可循的,通过这六个步骤,小白也能搞定机器学习。

看我闪电六连鞭!🤣

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8fokt0Mq-1686313603676)(image/image-20230604123237459.png)]

数据的预处理通常包括 5 个步骤,如下:这个是比较完整的一个步骤,不同的算法可能会缺少一些步骤,例如无监督学习中,没有标签也就没有特征工程。

在这里插入图片描述

1、数据可视化

数据的可视化,可以帮我们发现数据中的规律和问题。通过数据可视化,我们可以从整体“俯瞰”数据的全貌。可以观察特征和标签之间可能存在哪些关系,以及观测 特殊数据

可视化工具:自动化地进行数据可视化,并提供丰富的交互功能和可视化效果。常见的可视化工具包括Matplotlib、Seaborn等。

下面我们通过两个小例子感受一下 Matplotlib、Seaborn这两款可视化工具。

1)Matplotlib
首先我们要导入Matplotlib

#导入数据可视化所需要的库
import matplotlib.pyplot as plt # Matplotlib – Python画图工具库

matplotlib 包中的 plot API,来绘制出“点赞数”和“浏览量”之间的散点图,看看它们的分布状态。

 plt.plot(df_ads['点赞数'],df_ads['浏览量'],'r.', label='Training data') # 用matplotlib.pyplot的plot方法显示散点图
plt.xlabel('点赞数') # x轴Label
plt.ylabel('浏览量') # y轴Label
plt.legend() # 显示图例
plt.show() # 显示绘图结果!

在这里插入图片描述

从这张图中我们可以看出来,这些数据基本上集中在一条线附近,所以点赞数和浏览量具有线性函数的关系,还可以发现其中有一些散点,他们就是 爆款文章。

2)SeaBorn
通过SeaBorn的 boxplot 工具画个箱线图。箱线图主要是看数据的分布和离散程度。通过下个图看看这个数据集里有没有“离群点”。

data = pd.concat([df_ads['浏览量'], df_ads['热度指数']], axis=1) # 浏览量和热度指数
fig = sns.boxplot(x='热度指数', y="浏览量", data=data) # 用seaborn的箱线图画图
fig.axis(ymin=0, ymax=800000); #设定y轴坐标

在这里插入图片描述

箱线图是由五个数值点组成,分别是最小值 (min)、下四分位数 (Q1)、中位数 (median)、上四分位数 (Q3) 和最大值 (max)。在统计学上,这叫做五数概括。这五个数值可以清楚地为我们展示数据的分布和离散程度。

这个图中下四分位数、中位数、上四分位数组成一个“带有隔间的盒子”,就是所谓的箱;上四分位数到最大值之间建立一条延伸线,就是所谓的线,也叫“胡须”;胡须的两极就是最小值与最大值;此外,箱线图还会将离群的数据点单独绘出

在上面这个箱线图中,我们发现,热度指数越高,浏览量的中位数越大。我们还可以看到,有一些离群的数据点,比其它的文章浏览量大了很多,这些“离群点”也是属于爆款文章。

2、数据清洗

数据清洗的目的是让数据变得更干净。不要小瞧它,越是干净的数据,模型的效果就越好。而脏数据会严重影响模型的效果

在这里插入图片描述

  1. 第一种是处理缺失的数据。如果备份系统里面有缺了的数据,那我们尽量修复;如果无法修复,我们可以剔除掉残缺的数据。
  2. 第二个是处理重复的数据:如果是完全相同的重复数据处理,删掉就行了。
  3. 第三个是处理错误的数据:比如商品的销售量、销售金额出现负值,这时候就需要删除异常数据。再比如表示百分比或概率的字段,如果值大于 1,也属于逻辑错误数据。
  4. 第四个是处理不可用的数据:这指的是整理数据的格式,比如身高来说有的记录成m 还有的记录成 cm,那我们需要把单位统一。另一个常见例子是把“是”、“否”转换成“1”、“0”值再输入机器学习模型。

除了手动清理数据,我们还可以借助工具来进行数据清理,比如Pandas库下的DataFrame。下面介绍几种常用的数据清理办法:

import pandas as pd  # 导入Pandas

# 统计NaN数据
DataFrame.isna().sum()

# 删除重复行
DataFrame.drop_duplicates()

# 删除指定列的缺失值
DataFrame.dropna(subset=['订单时间', '订单编号', '企业名称', '订单总金额'])

3、特征工程

特征工程是一个专门的机器学习的子领域,是数据处理过程中最具创造力的一个环节。是机器学习当中非常重要的一环!

有句行话说的好:**数据和特征决定了机器学习的上限,而模型和算法只是无限逼近这个上限而已。**足见特征工程的重要性!

什么是特征工程?

特征工程是将原始数据转化成更好的表达问题本质的特征的过程,使得将这些特征运用到预测模型中能提高对不可见数据的模型预测精度。

通俗的讲,特征工程简单讲就是发现对因变量y(标签)有明显影响作用的自变量x(特征),特征工程的目的是发现重要特征

特征工程通常需要对业务有足够的了解,它是基于业务逻辑,从众多的特征中摒弃掉冗余的特征、降低特征的维度,提升机器学习模型的性能。

举例:BMI指标就是一个特征工程,它能够客观的评估一个人身体的健康情况。

在这里插入图片描述

特征工程的步骤:

特征工程通常分为:特征选择、特征变换、特征构建。

在这里插入图片描述

3.1、特征选择

特征选择定义:

在一个数据集中,每个特征对标签的影响作用或大或小。对于那些没作用和作用小的特征,就可以删掉,来降低数据的维度,以便提高模型的准确性和效率。这个就是特征选择。

特征选择手段:

在这里插入图片描述

我们既可以手动选择特征,又可以借助特征选择工具让工具帮我选择特征。手动选择特征通常使用相关性热力图,借助 seaborn.heatmap()工具可以画出。

相关性热力图:方格里的数字,这类数字叫做皮尔逊相关系数,表示两个变量间的线性相关性,数值越接近 1,就代表相关性越大。

年度LTV是指在一年时间内,一个客户在平均情况下为公司带来的价值总和,也称为年度客户生命周期价值

我们还可以借助工具来帮我们选择特征,sklearn库的 feature_selection 模块有很多特征选择工具,他们可以自动帮我们完成特征选择。

3.2、特征变换

特征变换是指在机器学习中对原始特征进行一些数学变换或转换,以便更好地适应模型的要求和数据的特征。特征变换的目的是增强数据的表达能力,提取更有用的特征信息,从而提高模型的准确性和可解释性。

特征变换根据数值型特征和分类特征有不同的手段。

特征变换的手段:

在这里插入图片描述

数值型特征 - 特征缩放

特征缩放的目的就是压缩特征区间,可以提高模型的精度和稳定性。在深度学习中神经网络等模型,都要求对特征进行缩放,否则模型会跑不起来

特征缩放的方法主要有两种:标准化和归一化。标准化是指将特征值转换为均值为0,方差为1的标准正态分布,常用的方法为 Sklearn库StandardScaler工具;而归一化是将特征值缩放到0和1之间,常用的方法有Sklearn库MinMaxScaler工具。这些方法可以根据特征的分布情况对特征值进行调整,使得各特征值的范围相同,从而更好地用于模型的训练和预测。

数值型特征 - 特征离散

当特征的数量级跨度过大,而且与标签的关系又非线性的时候,模型可能只对大数量级的特征值敏感,也就是说模型可能会向大特征值的那一侧倾斜。这时候我们需要对特征进行离散处理。常见的方法是分桶。

例子:比如我们的特征是 [3.5, 2.7, 16.9, 5.5, 199] 199偏离其他数据,这里我们对其分桶 X<5记作0,5<X<10记作1,X>10记作2,就可以吧数据变成 0 1 2这样的离散值

分类型特征:

虚拟变量其实就是把男和女这种类似的分类数据转换成1和0。

独热编码就是将每个特征值都被表示为一个二进制向量,其中只有一个元素为1,其余元素为0。

假设我们要做一个狗、狼、猫的动物分类,其独热编码为:

  • [1,0,0] 代表狗
  • [0,1,0] 代表狼
  • [0,0,1] 代表猫

3.3、特征构建

特征构建是整个特征工程领域最具创造力的部分。在我看来,这就是对业务逻辑理解和抽象的过程,是领域专家擅长的工作。用户的RFM模型,其实就是领域专家构建出来的特征。

特征工程做的好,直接决定了机器学习的上限!在那些给定数据集的机器学习竞赛中,高手们为什么能在数据集相同、模型也类似的前提下,让模型达到一个很高的预测准确率?其实,就是因为他们大都通过漂亮的特征工程,提高了机器学习的上限。

4、构建特征集和标签集

数据集分为特征集和标签集,我们要把这些数据喂给模型。特征集就是自变量X的数据的集合,标签集就是因变量Y的数据的集合。

再来回顾一下之前的案例
在这里插入图片描述

假设现在要做一个猫狗图片分类的功能?特征和标签长什么样呢?

在这里插入图片描述

5、拆分训练集、验证集、测试集

一些特征和标签组成了数据集,接下来就是拆分数据集了。

拆分的原则一般是20%或30%的数据集留作测试,剩余的70%或80%留作训练数据集和验证数据集。这个也不是绝对的拆分比例,是根据具体的数据集做调整的。

数据集的拆分,可以使用机器学习工具包 scikit-learn 里的数据集拆分工具 train_test_split

#将数据集进行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)

数据集又分为训练数据集、验证数据集、测试数据集,训练数据集顾名思义就是用作训练的数据,通过训练数据集找到一个函数,同时会使用验证数据集验证和评估函数。测试数据就负责对训练和评估后的函数进行测试。

在这里插入图片描述

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

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

相关文章

内网隧道代理技术(一)之内网隧道代理概述

内网隧道代理技术 内网转发 在渗透测试中&#xff0c;当我们获得了外网服务器&#xff08;如web服务器&#xff0c;ftp服务器&#xff0c;mali服务器等等&#xff09;的一定权限后发现这台服务器可以直接或者间接的访问内网。此时渗透测试进入后渗透阶段&#xff0c;一般情况…

FreeRTOS(8)----任务通知

一&#xff0c;任务通知的简介 相对于之前的信号量&#xff0c;事件组等&#xff0c;所谓的任务通知核心就是一个32位的无符号整数和8位的通知状态 任务通知可以通过如下方法更新接收任务的通知值&#xff1a; ● 不覆盖接收任务的通知值 ( 如果上次发送给接收任务的通知还没…

MyBatisPlus总结(1.0)

MyBatis-Plus MyBatis-Plus介绍 MyBatis-Plus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生 特性 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影…

为何波卡被称为Layer 0?

理解区块链的技术本质&#xff0c;将揭示加密货币运行轨迹的神秘面纱。了解这背后的原理&#xff0c;将为你带来全新的视角&#xff0c;让你对加密货币的奇妙世界充满无尽的好奇。 波卡是一个内部互连的区块链平台&#xff0c;被赋予技术堆栈元协议或Layer 0的定义&#xff0c…

Golang 基础案例集合:中文拼音转换、解析二维码、压缩 zip、执行定时任务

前言 曾经&#xff0c;因为不够注重基础吃了好多亏。总是很喜欢去看那些高大上的东西&#xff0c;却忽略了最基本的东西。然后会错误的以为自己懂的很多&#xff0c;但是其实是沙堆中筑高台&#xff0c;知道很多高大上的架构&#xff0c;但是基础的东西却不太了解。我觉得&…

PySpark实战指南:大数据处理与分析的终极指南【上进小菜猪大数据】

上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货。 大数据处理与分析是当今信息时代的核心任务之一。本文将介绍如何使用PySpark&#xff08;Python的Spark API&#xff09;进行大数据处理和分析的实战技术。我们将探讨PySpark的基本…

P2[1-2]STM32简介(stm32简介+ARM介绍+片上外设+命名规则+系统结构+引脚定义+启动配置+最小系统电路+实物图介绍)

1.1 stm32简介 解释:ARM是核心部分,程序的内核,加减乘除的计算,都是在ARM内完成。 智能车方向:循迹小车,读取光电传感器或者摄像头数据,驱动电机前进和转弯。 无人机:用STM32读取陀螺仪加速度计的姿态数据,根据控制算法控制电机的速度,从而保证飞机稳定飞行。 机…

maven的pom文件

maven项目中会有pom文件&#xff0c; 当新建项目时候&#xff0c; 需要添加我们需要的依赖包。所以整理了一份比较常用的依赖包的pom&#xff0c;方便以后新建项目或者添加依赖包时copy且快捷。不需要的依赖可以删掉&#xff0c;避免首次远程拉取失败和缩小项目打包大小。 <…

爆料,华为重回深圳,深圳第二个硅谷来了-龙华九龙山未来可期

房地产最重要的决定因素&#xff1a;科技等高附加值产业&#xff01;过去几年&#xff0c;发生的最大的变化就是——科技巨头对全球经济的影响力越来越大&#xff0c;中美之间的博弈&#xff0c;由贸易战升级为科技战&#xff0c;就是基于此原因。人工智能、电子信息技术产业、…

工程数值分析(散装/自食/非全)

1.蒙特卡洛 基本流程 蒙特卡洛模拟法基于随机抽样原理&#xff0c;通过生成大量的随机样本&#xff0c;从而对目标变量进行估计和分析。具体来说&#xff0c;蒙特卡洛模拟法的基本流程如下&#xff1a; 1.确定问题&#xff1a;首先需要明确要解决的问题是什么&#xff0c;以及需…

使用腾讯手游助手作为开发测试模拟器的方案---以及部分问题的解决方案

此文主要介绍使用第三方模拟器(这里使用腾讯手游助手)作为开发工具&#xff0c;此模拟器分为两个引擎&#xff0c;一个与其他模拟器一样基于virtualbox的标准引擎&#xff0c;不过优化不太好&#xff0c;一个是他们主推的aow引擎&#xff0c;此引擎。关于aow没有太多的技术资料…

计算机网络(数据链路层,复习自用)

数据链路层 数据链路层功能概述封装成帧与透明传输差错编码&#xff08;检错编码&#xff09;差错编码&#xff08;纠错编码&#xff09;流量控制与可靠传输机制停止-等待协议后退N帧协议&#xff08;GBN&#xff09;选择重传协议&#xff08;Selective Repeat&#xff09; 信道…

ChatGPT-4.5:AI技术的最新进展

✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社区 &#x1f4d9; 专栏地址&#xff1a;AI大模型 OpenAI最新发布的GPT-4&#xff0c;在聊天机器人…

Windows下IDEA创建Java WebApp的一些总结

在踩了无数坑之后&#xff0c;写一下小总结&#xff0c;帮助兄弟们少走弯路 环境准备 Java 这个不用多说&#xff0c;推荐在环境变量Env加入Java Home环境变量&#xff0c;方便后面设置idea 能用Ultimate版本最好&#xff0c;我这种穷B就用Community版本了Mysql 如果是压缩包…

JVM垃圾回收算法及Java引用

目录 Java垃圾回收算法 1.标记清除算法&#xff1a;Mark-Sweep 2.复制算法&#xff1a;copying 3. 标记整理算法&#xff1a;Mark-Compact 4.分代收集算法 5.新生代垃圾回收算法&#xff1a;复制算法 6.老年代&#xff1a;标记整理算法 7.分区收集算法 Java引用 1.Ja…

迪赛智慧数——其他图表(漏斗图):高考生和家长志愿填报困扰问题感知

效果图 高考前的紧张&#xff0c;等分数的忐忑&#xff0c;填志愿的纠结&#xff0c;录取前的煎熬&#xff0c;希望就在不远的前方。 志愿填报心有数&#xff0c;就业前景要关注。收集信息要先行&#xff0c;切莫匆匆抉择定。热门专业不追捧&#xff0c;选择院校不跟风。兴趣爱…

阿里云异构计算GPU、FPGA、EAIS云服务器详细介绍说明

阿里云阿里云异构计算主要包括GPU云服务器、FPGA云服务器和弹性加速计算实例EAIS&#xff0c;随着人工智能技术的发展&#xff0c;越来越多的AI计算都采用异构计算来实现性能加速&#xff0c;阿里云异构计算云服务研发了云端AI加速器&#xff0c;通过统一的框架同时支持了Tenso…

[Daimayuan] 模拟输出受限制的双端队列(C++,模拟)

给你一个输出受限的双端队列&#xff0c;限制输出的双端队列即可以从一端插入元素&#xff0c;弹出元素&#xff0c;但是另一端只可以插入不可以删除元素。即每次你可以执行以下三种操作的其中一种&#xff1a; 在左边压入一个字符在右边压入一个字符弹出最左边的字符 现在给你…

机器学习实战案例用户RFM模型分层(八)

每个产品和公司都需要做用户的精细化运营&#xff0c;它是实现用户价值最大化和企业效益最优化的利器。通过将用户进行分层&#xff1a;如高价值用户、潜在价值用户、新用户、流失用户等&#xff0c;针对不同群体制定个性化的营销策略和客户服务&#xff0c;进而促进业务的增长…

【Java|golang】2465. 不同的平均值数目

给你一个下标从 0 开始长度为 偶数 的整数数组 nums 。 只要 nums 不是 空数组&#xff0c;你就重复执行以下步骤&#xff1a; 找到 nums 中的最小值&#xff0c;并删除它。 找到 nums 中的最大值&#xff0c;并删除它。 计算删除两数的平均值。 两数 a 和 b 的 平均值 为 (a…