机器学习系统设计及算法评估

本文探讨了机器学习中数据集的划分与应用,包括训练集、验证集和测试集的作用。介绍了如何通过调整特征数量、正则化参数来选择最佳模型,并分析了学习曲线、误差分析的重要性,提出了模型修正策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 数据集分类

数据集分为训练集(training set),交叉验证集(cross validation set),测试集(test set)。比例为60:20:20。
使用训练集对模型进行训练,得到使训练集误差Jtrain(θ)J_{train}(\theta)Jtrain(θ)最小的一系列参数θ\thetaθ,然后代入验证集,得到使验证集误差Jcv(θ)J_{cv}(\theta)Jcv(θ)最小的模型,最后代入测试集,得到该模型的误差Jtest(θ)J_{test}(\theta)Jtest(θ)。为什么不直接使用Jcv(θ)J_{cv}(\theta)Jcv(θ)作为该模型的误差?使用Jtest(θ)J_{test}(\theta)Jtest(θ)具有公平性,而使用Jcv(θ)J_{cv}(\theta)Jcv(θ)得到的肯定是该模型这组数据的最小值,不具有普遍意义。

2. 模型选择

2.1. 选择合适的二项式次数

在进行特征选择的时候,需要选择特征值的多少次幂。将特征值的不同次幂作为不同的模型,如:
model 1: θ0+θ1x\theta_0+\theta_1xθ0+θ1x
model 2: θ0+θ1x+θ2x2\theta_0+\theta_1x+\theta_2x^2θ0+θ1x+θ2x2
model 3: θ0+θ1x+θ2x2+θ3x3\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3θ0+θ1x+θ2x2+θ3x3

model n: θ0+θ1x+θ2x2+...+θnxn\theta_0+\theta_1x+\theta_2x^2+...+\theta_nx^nθ0+θ1x+θ2x2+...+θnxn
将这些模型利用训练集,验证集得到每个模型的误差Jcv(θ)J_{cv}(\theta)Jcv(θ)。其误差曲线如下:
mierror
可以得到:

  1. Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jtrain(θ)≈Jcv(θ)J_{train}(\theta)\approx J_{cv}(\theta)Jtrain(θ)Jcv(θ)时,此时处于高偏差,欠拟合的状态。
  2. Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jtrain(θ)J_{train}(\theta)Jtrain(θ)很小时,此时处于高方差,过拟合的状态。
2.2. 选择合适的正则化参数λ\lambdaλ

J(θ)=12m∑i=1i=m(hθ(x(i))−y(i))2+λ2m∑i=1i=mθi2 J(\theta)=\frac{1}{2m}\sum_{i=1}^{i=m}(h_{\theta}(x^{(i)})-y^{(i)})^2+\frac{\lambda}{2m}\sum_{i=1}^{i=m}\theta_i^2 J(θ)=2m1i=1i=m(hθ(x(i))y(i))2+2mλi=1i=mθi2
λ=0,0.01,0.02,0.04,0.08,...,10.24\lambda=0,0.01,0.02,0.04,0.08,...,10.24λ=0,0.01,0.02,0.04,0.08,...,10.24作为不同模型的参数,得到通过训练集验证集得到的误差Jcv(θ)J_{cv}(\theta)Jcv(θ)。其误差曲线如下:
lambdaerror
可以得到:

  1. Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jtrain(θ)≈Jcv(θ)J_{train}(\theta)\approx J_{cv}(\theta)Jtrain(θ)Jcv(θ)时,此时处于高偏差,欠拟合的状态。
  2. Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jtrain(θ)J_{train}(\theta)Jtrain(θ)很小时,此时处于高方差,过拟合的状态。
2.3. 修正欠拟合和过拟合

欠拟合(高偏差)状态:

  1. 增加特征变量
  2. 增加特征值的多次幂特征
  3. 减小正则化参数λ\lambdaλ的值

过拟合(高方差)状态:

  1. 获取更多训练样本
  2. 减少特征变量
  3. 增大正则化参数λ\lambdaλ的值

3. 学习曲线

随着训练样本量的增加,误差曲线如下:
merrorfit
merroroverfit
可以得到:

  1. 随着m增大,当Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jtrain(θ)≈Jcv(θ)J_{train}(\theta)\approx J_{cv}(\theta)Jtrain(θ)Jcv(θ)时,此时处于高偏差,欠拟合的状态。
  2. 随着m增大,当Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jcv(θ)J_{cv}(\theta)Jcv(θ)Jtrain(θ)J_{train}(\theta)Jtrain(θ)相差很大时,此时处于高方差,过拟合的状态。可以从图中看出,随着m的增大,Jcv(θ)J_{cv}(\theta)Jcv(θ)Jtrain(θ)J_{train}(\theta)Jtrain(θ)相差会越来越小,所以增加样本数量可有效的解决过拟合问题。

4. 误差分析

模型训练完毕后,通过测试数据集可以得到该模型下,测试数据的误差率。但是单单通过误差率不能有效的评估该模型。比如:偏斜类。
偏斜类:正样本数量远远大于负样本的数量,这样机器学习而来的模型起误差率可能大于全部预测为正的误差率,但这样的预测并不是一个机器学习算法。所以引入查准率和召回率。
TP(True Positive):实际为正(positive),预测正确(true)的数量。
FP(False Positive):实际为正(positive),预测错误(false)的数量。
FN(False Negative):实际为负(negative),预测错误(false)的数量。
TN(True Negative):实际为负(negative),预测正确(true)的数量。
查准率:所有预测为正的样本中实际为正的样本所占的比例。
Precision=TPTP+FP Precision = \frac{TP}{TP+FP} Precision=TP+FPTP
召回率:所有实际为正的样本中预测为正的样本所占的比例。
Recall=TPTP+FN Recall = \frac{TP}{TP+FN} Recall=TP+FNTP
logisticlogisticlogistic回归中,增大阈值,则Precision增大,Recall减小;减小阈值,则Precision减小,Recall增大。
利用F1F_1F1值评估算法性能,F1F_1F1最大,算法性能越好。
F1=2Precision∗RecallPrecision+Recall F_1=2\frac{Precision\ast Recall}{Precision+Recall} F1=2Precision+RecallPrecisionRecall

5. 机器学习系统设计

  1. 使用最简单的算法,尽可能块得得出一个不完美的结果。
  2. 利用cv集,画出学习曲线,找到高偏差或者高防叉问题,进行模型完善。
  3. 利用test集进行误差分析,手动检查被误分类的样本,进行特征分析,完善样本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值