吴恩达机器学习笔记(五)
吴恩达机器学习笔记(五)
标签: 机器学习
1.评估假设(Evaluating a Hypothesis)
如果训练出现误差比较大,可以尝试:
1. 尝试使用更多的训练集
2. 尝试使用更少的特征
3. 尝试增加更多的特征
4. 尝试更多的多项式特征
5. 尝试增加获减少λ
如果一个假设对训练集的误差很小,也有可能出现过拟合的可能
我们可以将数据分为训练集和测试集(训练集70%,测试集30%)
- 先使用训练集学习训练最小化
Jtrain(θ) - 再计算测试集的误差
Jtest
1.1测试集误差计算方法
1.用线性回归计算
2.进行分类
3.测试集的平均测试误差为
1.2训练集、交叉验证集与测试集(Train/Validation/Test Sets)
- 训练集:60%
- 验证集:20%
- 测试集:20%
先用训练集训练不同的多项式找到使J最小的
再使用交叉验证集计算该
对多项式使用测试集计算其泛化误差(generalization error)
1.3判断欠拟合与过拟合
当我们的预测很糟糕的时候,可能是高偏差或者高方差
搞偏差是欠拟合,高方差是过拟合
高偏差:
高方差:
1.4选择合适的正则化λ
在线性回归中选择合适的
1. 建立一个
2. 建立一个有不同变量的模型
3. 迭代列表中的
4. 用
5. 选择验证集产生的最小误差的
6. 将学习到的
1.5学习曲线
当训练集很小时随着训练集的增大,假设函数的误差会增加
在一定量的训练集m后,误差会趋于稳定
高偏差:
训练集较少:
训练集较大:
如果一种学习算法存在高偏差,那么使用更多的培训数据将不会有多大帮助。
高方差:
训练集较少:
训练集较大:随着训练集的增大,
如果一种学习算法存在高方差,那么使用更多的培训数据可能会有帮助。
1.6优化模型方法
诊断神经网络
一个神经网络如果参数太少容易导致欠拟合,但是运算量小
一个神经网络如果参数过多容易导致过拟合,运算量大,在这种情况下,你可以使用正则化(λ)解决过度拟合。
可以使用一个隐藏层作为神经网络的初始值,用交叉训练集训练神经网络然后找最优秀的
模型复杂性的影响:
低阶多项式(低模型复杂度)具有高偏差和低方差。在这种情况下,模型的一致性很差。
高阶多项式(高模型复杂度)非常适合训练数据,而且测试数据非常糟糕。这些对训练数据有较低的偏差,但差异非常大。
在现实中,我们想要选择介于两者之间的模型,这可以很好地推广,但也能很好地适应数据。
**- 获得更多的训练集: 用于解决高方差(过拟合)
- 减少特征: 用于解决高方差(过拟合)
- 增加特征: 用于解决高偏差(欠拟合)
- 增加多项式特征: 用于解决高偏差(欠拟合)
- 增加 λ: 用于解决高偏差(欠拟合)
- 减少 λ: 用于解决高方差(过拟合)**
2.构建复杂的机器学习模型
例如垃圾邮件分类
先选取所有邮件中词频最高的10000-50000个单词,然后为每一个邮件构建一个向量,如果有则为1,如果没有该词则为0,然后进行逻辑回归学习
1. 获取大量的训练集(例如”蜜罐”(honeypot),但不总是有用的)
2. 提取更加复杂的特征(例如邮件的标题)
3. 增加输入的方式(例如识别垃圾邮件的拼写错误)
建议用以下方法解决机器学习问题:
1. 用一个简单的算法作为开始,快速的实现一遍,然后用交叉验证集验证数据
2. 绘制学习曲线,判断应该增加更多训练集、增加更多特征还是其他方法
3. 手动检查交叉验证集中的例子中的错误,并找出错误发生的趋势。
例如我们可以将垃圾邮件错误分类最多的一类邮件特殊加一些特征,然后观察训练效果
然后将误差结果作为评估,如果添加特征后误差率下降了则应该保留这个特征,反之则不保留特征
2.1偏斜类问题的评估
例如某算法对癌症的评估准确率为99.5%
看起来似乎训练效果很好,但是可能算法将所有患者归为未患病
这个时候需要计算查准率与召回率,防止算法欺骗我们
2.2权衡查准率与召回率
根据不同的需求,调整threshold的数值
然后用
1.数据集必须含有足够的特征的判断结果
2.人类专家可以通过这些特征判断结果
满足上述两条,则理论上可以训练优秀的模型