机器学习_实战框架

文章目录


介绍机器学习的实战框架

一个机器学习项目从开始到结束大致分为 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).数据可视化

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

常用的工具包有:

python 复制代码
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).构建特征集和标签集

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

python 复制代码
X = df.drop(['浏览量'],axis=1)
X.head()

标签是结果或目标。

python 复制代码
y = df.浏览量
y.head()

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

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

python 复制代码
#将数据集进行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

这里举个经典的逻辑回归例子,

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

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

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

4.训练模型

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

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

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

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

fit 的核心就是减少损失,使函数对特征到标签的模拟越来越贴切。

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

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

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

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

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

5.模型的评估和优化

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

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

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

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

python 复制代码
y_pred = linereg_model.predict(X_test) #预测测试集的Y值

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

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

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

python 复制代码
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

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

python 复制代码
print("线性回归预测评分:", linereg_model.score(X_test, y_test)) # 评估模型

# 输出结果:
# 线性回归预测评分: 0.7085754407718876

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

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

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


学习机器学习的参考资料:

(1)书籍

利用Python进行数据分析

西瓜书

百面机器学习

机器学习实战

阿里云天池大赛赛题解析(机器学习篇)

白话机器学习中的数学

零基础学机器学习

图解机器学习算法

...

(2)机构

光环大数据

开课吧

极客时间

七月在线

深度之眼

贪心学院

拉勾教育

博学谷

...

相关推荐
肥猪猪爸16 分钟前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
LZXCyrus1 小时前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
我感觉。1 小时前
【机器学习chp4】特征工程
人工智能·机器学习·主成分分析·特征工程
YRr YRr1 小时前
深度学习神经网络中的优化器的使用
人工智能·深度学习·神经网络
DieYoung_Alive1 小时前
一篇文章了解机器学习(下)
人工智能·机器学习
夏沫的梦1 小时前
生成式AI对产业的影响与冲击
人工智能·aigc
goomind1 小时前
YOLOv8实战木材缺陷识别
人工智能·yolo·目标检测·缺陷检测·pyqt5·木材缺陷识别
只怕自己不够好1 小时前
《OpenCV 图像基础操作全解析:从读取到像素处理与 ROI 应用》
人工智能·opencv·计算机视觉
幻风_huanfeng1 小时前
人工智能之数学基础:线性代数在人工智能中的地位
人工智能·深度学习·神经网络·线性代数·机器学习·自然语言处理
嵌入式大圣1 小时前
嵌入式系统与OpenCV
人工智能·opencv·计算机视觉