文章目录
Evaluating a Learing Algorithm
Decidding what to try next
当预测新的数据集,效果很差时:
- 获取更多的训练数据
- 减小特征数量
- 尝试获取附加特征
- 尝试添加多项式特征
- 尝试减小 λ \lambda λ
- 尝试增加 λ \lambda λ
机器学习诊疗法:可以帮助你知道机器学习算法是否在工作,而且可以知道提高算法性能的最好的方法
Evaluating your hypothesis
将数据集按照7:3的比例分为训练集和测试集
线性回归
逻辑回归
####Model selection and Train/Validation/Test Sets
模型选择,对每个多项式进行训练,选择测试机误差最小的模型,但这并不能评估模型在新的数据集中表现
将数据集分为6:2:2的三段,第一段为训练集,第二段为交叉验证集、第三段为测试集
选择交叉验证误差最小的模型,这就避免使用测试集
Bias vs Variance
Diagnosing bias vs variance
随着多项式的增加,训练集的误差逐渐减小,验证集的误差先减小后增大
高偏差(欠拟合):
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)和
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)都很高,且
J
t
r
a
i
n
(
θ
)
≈
J
c
v
(
θ
)
J_{train}(\theta) \approx J_{cv}(\theta)
Jtrain(θ)≈Jcv(θ)
高方差(过拟合):
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)很小,
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)比
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)大很多
Regularization and Bias/Variance
选取模型和
λ
\lambda
λ的步骤:
- 创建 λ \lambda λ的列表 (i.e. λ∈{0,0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24});
- 创建一组具有不同次方或任何其他变体的模型
- 遍历所有的 λ \lambda λ和模型学习参数
- 计算交叉验证集上的 J c v ( θ ) J_{cv}(\theta) Jcv(θ)(没有正则化)
- 选择在交叉验证集中产生最低错误的最佳组合。
- 使用最好的模型和 λ \lambda λ,在测试集上测试性能
Learning Curves
学习曲线是误差和训练集大小的曲线
高偏差时:
小的训练集导致
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)很小
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)很高
大的训练集导致
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)和
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)都很高且
J
t
r
a
i
n
(
θ
)
≈
J
c
v
(
θ
)
J_{train}(\theta) \approx J_{cv}(\theta)
Jtrain(θ)≈Jcv(θ)
当学习算法是高偏差时,增大训练集并不能改善其性能
高方差时:
小的训练集导致
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)很小
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)很高
随着训练集的增大
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)增大
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)减小且都不会趋于平稳,
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)<
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)且差异很大
模型改善方法总结
Building a Spam Classifier
Prioritizing What to Work on
垃圾邮件分类:
给定一组电子邮件数据,我们可以为每个电子邮件构造一个向量。这个向量中的每个元素代表一个单词。向量通常包含10,000到50,000个条目,这是通过查找我们数据集中最常用的单词来收集。如果要在邮件中找到一个单词,我们将分配它各自的条目1,否则如果没有找到,这个条目就是0。一旦我们准备好所有的x向量,我们训练我们的算法,最后,我们可以用它来分类一个邮件是否是垃圾邮件。
如何提高分类器的准确性:
- 收集大量的数据,如‘honeypot’项目
- 寻找更加复杂的特性(例如:在垃圾邮件中使用电子邮件头数据)
- 从邮件内容中寻找复杂的特征
- 开发算法检测错误拼写
Error Analysis
解决机器学习问题的建议方法是:
- 从一个简单的算法开始,快速实现它,并在交叉验证数据的早期测试它。
- 绘制学习曲线来判断更多的数据,更多特征是否有帮助
- 误差分析:手动检查交叉验证集中的例子中的错误,并尝试找出大多数错误发生的趋势。
误差分析
Handing Skewed Data
Error Metrics for Skewed Classes
Skewed Classes:对于分类问题,y=1和y=0,在样本数量中y=1的数量远小于y=0的数量。
假设你的算法在测试集上只有1%的错误,可实际上,测试集中只有0.5%的病人患有癌症,所以错误率并不能评价这个算法的优劣,所以就提出了Precision和Recall
Trading Off Precision and Recall
- 为了防止癌症误诊断给人造成压力,所以要有很大的把握判断的了癌症,所以提高阈值,这将造成precision较高,recall较低
- 为了防止错误的诊断癌症为没有癌症,导致没有及时治疗,所以要通过降低阈值防止漏了癌症病人,这将造成precision较低,recall较高
将两者合并为一个量