机器学习的基本方法
模型评估与模型参数选择
数据集
任何机器学习项目的基石都是数据集。通常我们将数据集分为三部分:训练集、验证集和测试集。训练集用于模型学习基础概念;验证集则用于优化模型参数;而测试集,则是评估模型最终性能的“期末考试”。
验证集
验证集对于调整模型参数至关重要。它帮助我们找到最优的超参数组合,以确保模型在未知数据上的性能。一旦我们对模型的超参数满意,我们便可以在测试集上进行最终评估。
误差与损失函数
模型评估的第一步是理解误差的概念。当我们的模型预测值 y_hat
与真实目标值 y
不一致时,就产生了误差。这种偏差通过损失函数来量化,它是预测值与真实值之间的差额的数学表达。
训练误差 vs 泛化误差
模型在训练数据上的平均误差被称为训练误差,而在未见的新数据上的误差称为泛化误差。一个好的模型应确保低泛化误差,这是因为我们的终极目标是让模型能处理之前未见过的数据。
过拟合与欠拟合
过拟合:
将训练样本自身的一些特点当作所 有样本潜在的泛化特点。
表现:在训练集上表现很好,在测试集上表 现不好。
过拟合的原因: 训练数据太少(比如只有几百组) 模型的复杂度太高(比如隐藏层层数设置的过多,神 经元的数量设置的过大)、数据不纯
欠拟合:
还没训练好
欠拟合的原因:
数据未做归一化处理、
神经网络拟合能力不足、
数据的特征项不够
解决方法:
寻找最优的权重初始化方案、
增加网络层数、
epoch、
使用适当的激活函数、优化器和学习率、
减少正则化参数、
增加特征
在模型构建过程中,我们常常遇到两个问题:过拟合和欠拟合。过拟合发生在模型太复杂、拟合了训练数据中的噪声时,此时模型在训练集上表现优异,在测试集上却大失水准。而欠拟合则是当模型过于简单,无法捕捉数据的真实分布。
为了防范这些情况,我们可以采取多种策略,比如减少模型复杂度、增加数据量、数据增强或正则化等。
测试集——最终的检验场
评估模型效果,为了调整超参数而服务,调整超参数,使得模型在验证集上的效果最好
测试集就像是对模型能力的最终考核。它从未在模型训练或验证阶段使用过,因此提供了一个无偏的评估标准。准确率、精确率、召回率和F1分数等指标通常是我们在这个阶段关注的。
数据集划分的实践
超参数越少,或者超参数很容易调整,那么可以减少验证集的比例,更多的分配给训练集
在实践中,小规模数据集常见的划分比例为60%训练集、20%验证集和20%测试集。而对于大规模数据集,验证集和测试集的比例可以更小,因为更多的数据将提供足够的信息来训练模型。
监督学习
监督学习与非监督学习
如果数据集中样本点只包含了模型 的输入𝒙,那么就需要采用非监督学习的算法。
如果这些样本点以〈𝒙,𝒚〉这样的输入-输 出二元组的形式出现(有数据标签),那么就可以采用监督学习的算法。
模型与最优化算法的选择,很大程度上 取决于能得到什么样的数据。
监督学习:
在监督学习中,我们根据
训练集中的观测样本点来优化模型,使得给定测试样例𝒙′作为模型输
入,其输出尽可能接近正确输出。回归问题的输出是连续值,分类问题的输出是离散值。
回归
回归问题在生活中非常常见,其最简单的形式是一个连续函数的拟合。
一个购物网站想要计算出其在某个时期的
预
期收益
,研究人员会将
相关因素如广告投放量、网站流量、优惠力度等纳入自变量,根 据现有数据拟合函数,得到在未来某一时刻的预测值。
回归问题中通常使用均方损失函数来作为度量模型效果的指标,最简
单的求解例子是最小二乘法。
简单线性回归:
自变量 x 和因变量 y之间存在一条线性关系
多元线性回归:
假设自变量 和因变量 y之间存在一条线性关系
回归的用途
1.预测房价:假设我们想要预测某个城市的房价。我们可以收集到该城市过去几年的房价数据,以一相关的因素,比如房屋的面积、房龄、所处区域、楼层等。我们可以使用这些数据建立一条最佳拟合直线,从而对未来的房价进行预测。自变量可以包括面积、房龄、所处区域等,因变量是房价我们可以通过最小二乘法来估计截距和斜率的值,从而得到一条最佳拟合直线。这条直线可以用来预测未来的房价,也可以用来分析不同因素对房价的影响。
2.预测销售额:假设我们想要预测某家公司未来一年的销售额。
我们可以收集到该公司
过去几年的销售额数据,以及一些相关的因素,比如广告投入、促销活动、季节性因素等。我们可以使用这些数据建立一条最佳拟合直线,从而对未来的销售额进行预测。自变量可以包括广告投入、促销活动、季节性因素等,因变量是销售额。我们可以通过最小二乘法来估计截距和斜率的值,从而得到一条最佳拟合直线。这条直线可以用
来预测未来的销售额,也可以用来分析不同因素对销售额的影响。
分类
想要预
测(检测)的目标是猫,那么在数据集中猫为正样本, 其 他 狗 、 兔 子 、 狮 子 这 些 数 据 为 负 样 本。
将这只猫预测(分类)为狗、兔子、其他预测结果为错;将这只猫预测为猫,预测结果为对。
虽然准确率可以判断总的正确率,但是在
样本不平衡的情况下,并不能作为很好的指标来衡量结果
举个简单的例子,比如在一个总样本中,正样本占 90%,负样本占 10%,样本是严重不平衡的。 对于这种情况,我们只需要将全部样本预测为正样本即可得到 90% 的高准确率,但实际上我们并没有很用心的分类,只是随便无脑一分而已。
这就说明了:由于样本不平衡的问题,导致了得到的高准确率结果含有很大的水分。即如果样本不平衡,准确率就会失效。
精确率(查准率)- Precision:所有被预测为正样本中实际为正样本的概率
精准率代表对正样本结果中的预测准确程度。准确率则代表整体的预测准确程度,既包括正样本,也包括负样本。
召回率(查全率)- Recall:实际为正样本中被预测为正样本的概率
召回率越高,也代表网络可以改进的空间越大。
F-
度量则是在召回率与精确率之间去调和平均数;有时候在实际问题上,若我们更加看
重其中某一个度量,还可以给它加上一个权值
α
,称为
F_
α
-
度量:
F1
分数(
F1-score
)是分类问题的一个衡量指标。
线性回归模型
线性回归:
取线性模型作为模型进行预测,线性模型是最简单的模型
线性回归
模型是指
𝑓(⋅)
采用线性组合形式的回归模型,在线性回归问题中,因变量和自变量之间是线性关系的。对于第𝑖
个因变量
𝑥
𝑖
,我们乘以权重系数𝑤
𝑖
,取
𝑦
为因变量的线性组合:
𝒚 = 𝒇 𝒙 = 𝒘𝟏
𝒙
𝟏
+ ⋯ + 𝒘
𝒏
𝒙
𝒏
+ 𝒃
其中
𝑏
为常数项。若令
𝒘 = (𝑤
1
, ⋯ , 𝑤
𝑛
)
,则上式可以写成向量形式:𝐲 = 𝒇 𝒙 = 𝒘⊤
𝒙 + 𝒃
可以看到
𝒘
和
𝑏
决定了回归模型
𝑓(⋅)
的行为。由数据样本得到 𝒘和𝒃 有许多方法,例如最小二乘法(书上)、梯度下降法。
最开始
𝜔
是选取一个随机值,然后通过训练想要找到一个𝜔
的取值使得生成的预测函数与真实值的差异尽可能小,即损失尽可能小。
我们采用损失函数来衡量真实值与预测值之间的差异。目标:找到一个
𝜔
使得损失函数的值最小。
采用真实值与预测值的平方作为损失函数,假设𝜔
=3
、
4
、
0…
,计算出每个样本的损失,之后求平均损失。目标就是找到一个
𝜔使得这个平均损失最小。
注意:训练损失
loss
:是针对具体某一个样本的; 将整个训练集的损失函数(
平方的差值)求平均(
MSE
)是最常用的损失函数cost
之一:
Pytorch画图:
matplotlib库、如果没有安装matplotlib库需要安装:pip install matplotlib、plt.plot() 、plt.plot() 是Matplotlib库中用于绘制线图(折线图)的主要函数之一。它的作用是将一组数据点连接起来,以可视化数据的趋势、关系或模式。
x:表示X轴上的数据点,通常是一个列表、数组或一维序列,用于指定数据点的水平位置。
y:表示Y轴上的数据点,通常也是一个列表、数组或一维序列,用于指定数据点的垂直位置。
fmt:是一个可选的格式字符
串,用于指定线条的样式、标记和颜色。例如,‘ro-’ 表示红色圆点
线条。
**kwargs
:是一系列可选参数,用于进一步自定义线条的属性,如线宽、标记大小、标签等。
常用参数和用法:
样式参数
: 格式字符串可以包含一个字符来指定颜色,一个字符来指定标记样式,以及一
个字符来指定线条样式。例如,‘
r-’
表示红色实线,‘
bo–’
表示蓝色圆点虚线。
线条样式
: 使用
linestyle
参数可以指定线条的样式,如实线
、虚线
、点划线
等。
标记样式
: 使用
marker
参数可以指定数据点的标记样式,如圆点
、星号
等。
线条颜色
: 使用
color
参数可以指定线条的颜色,可以使用颜色名称
、缩
写
或十六进制颜色码
。
线宽
: 使用
linewidth
参数可以指定线条的宽度,以数字表示。
标记大小
: 使用
markersize
参数可以指定标记的大小,以数字表示。
图例标签
: 使用
label
参数可以为线条指定标签,用于创建图例。
其他属性: 还有许多其他属性可用于自定义线图,如透明度、渐变、线型、阴影等。
plt.plot():
不仅可以绘制简单的线图,还可以用于绘制多条线,添加图例、标签、标题,设置坐标轴范围和刻度等。
它是
Matplotlib
中最常用的绘图函数之一,适用于可视化数据集的趋势和关系。