吴恩达机器学习笔记|(6)算法选择和算法改进
一、评估假设(欠拟合/过拟合)
-
划分数据集
- 随机划分选取数据(若数据本身已经是随机分布的,则取前70%和后30%即可)
- 训练集 : 测试集 = 7 : 3
-
对线性/逻辑回归评估
-
从训练集学习到参数 \(\theta\)
-
计算测试集误差 \(J_{test}(\theta)\)
-
对于线性回归:
\(J_{\text {test }}(\theta)=\frac{1}{2 m_{\text {test }}} \sum_{i=1}^{m_{\text {test }}}\left(h_{\theta}\left(x_{\text {test. }}^{(i)}\right)-y_{\text {test }}^{(i)}\right)^{2}\)
-
对于逻辑回归:
\(J_{\text {test }}(\theta)=-\frac{1}{m_{\text {test }}} \sum_{i=1}^{m_{\text {test }}} y_{\text {test }}^{(i)} \log h_{\theta}\left(x_{\text {test }}^{(i)}\right)+\left(1-y_{\text {test }}^{(i)}\right) \log h_{\theta}\left(x_{\text {test }}^{(i)}\right)\)
-
或计算错误分类误差(0/1)
-
-
-
二、模型选择和训练、验证、测试集划分
-
模型选择
- 由于可能存在的过拟合问题,训练集误差不能用于判断新样本的拟合好坏
- 因此需要将数据集划分为training set、validation set、test set,并用 validation set 进行训练误差计算及模型选择,用 test set 进行模型的泛化性能评估
-
训练集、验证集、测试集划分
-
经典比例:6 : 2 : 2
-
用(交叉)验证集而非测试集选择模型
-
Train error
\(J_{\operatorname{train}}(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}\)
-
Cross Validation error(其实也是计算的训练误差)
\(J_{c v}(\theta)=\frac{1}{2 m_{c v}} \sum_{i=1}^{m_{c v}}\left(h_{\theta}\left(x_{c v}^{(i)}\right)-y_{c v}^{(i)}\right)^{2}\)
-
Test error(测试误差)
\(J_{\text {test }}(\theta)=\frac{1}{2 m_{\text {test }}} \sum_{i=1}^{m_{\text {test }}}\left(h_{\theta}\left(x_{\text {test }}^{(i)}\right)-y_{\text {test }}^{(i)}\right)^{2}\)
-
三、诊断偏差(Bias)与方差(Variance)
- Bias(underfit)
- \(J_{train}(\theta)\)很大
- \(J_{cv}(\theta)\approx J_{train}(\theta)\)
- Variance(overfit)
- \(J_{train}(\theta)\)很小
- \(J_{cv}(\theta)\gg J_{train}(\theta)\)
四、正则化和偏差/方差
-
执行正则化下各个误差的定义
(不考虑正则化项,即和原来的定义一样,只是训练时求参数加入正则化项)
如:
\(J(\theta)=\frac{1}{2 m_{train}} \sum_{i=1}^{m_{train}}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\frac{1}{2m_{train}}\sum_{j=1}^{m_{train}}\theta_j^2\)
通过以上公式求得\(\theta\),然后再计算误差
\(J_{\operatorname{train}}(\theta)=\frac{1}{2 m_{train}} \sum_{i=1}^{m_{train}}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}\)
\(J_{c v}(\theta)=\frac{1}{2 m_{c v}} \sum_{i=1}^{m_{c v}}\left(h_{\theta}\left(x_{c v}^{(i)}\right)-y_{c v}^{(i)}\right)^{2}\)
\(J_{\text {test }}(\theta)=\frac{1}{2 m_{\text {test }}} \sum_{i=1}^{m_{\text {test }}}\left(h_{\theta}\left(x_{\text {test }}^{(i)}\right)-y_{\text {test }}^{(i)}\right)^{2}\)
-
自动选择正则化参数 \(\lambda\)
选取一系列\(\lambda\)值,如\(\{\lambda|0,0.01,0.02,0.04,\dots,10\}\),分别利用验证集计算每个模型对应的训练误差进行模型选择,选择最小误差所对应的\(\lambda\)值即可。
-
正则化与偏差/方差的关系
- \(\lambda\)较小时,容易出现过拟合问题 —— \(J_{train}\)较小(高方差)
- \(\lambda\)较大时,容易出现欠拟合问题 —— \(J_{train}\)较大(高偏差)
-
考虑underfit和overfit问题的正则化参数\(\lambda\)选择方式
五、学习曲线(Learning Curves)
-
从数据集中选取少量样本,并逐渐增加样本数量m,绘制\(J_{train}\)和\(J_{cv}\)随之变化的曲线
-
高偏差情况
高偏差情况下,不断增大数据集的样本数量无益。其\(J_{train}\)和\(J_{cv}\)都非常大且值相近,并随着m增大而趋于一个常数。
-
高方差情况
高方差情况下,不断增大数据集样本数量有益。其\(J_{train}\)和\(J_{cv}\)随着样本数m增大而逐渐接近,模型性能逐渐提升。
六、算法改进
-
优化方法
-
更多的训练样本 —— fix high variance
-
更少的特征集合 —— fix high variance
-
更多的额外特征 —— fix high bias
-
增加特征阶数 —— fix high bias
-
减小正则化参数\(\lambda\) —— fix high bias
-
增大正则化参数\(\lambda\) —— fix high variance
-
-
神经网络和过拟合
- 较“小”的神经网络:参数少、更可能欠拟合、计算量小
- 较“大”的神经网络:参数多、更可能过拟合、计算量大
-
误差分析
- 在项目初始尽可能使用简单的算法实现,然后测试
- 使用实际的证据来指导决策
- 数值评价指标。保证可以用数值的方法直观地表现出算法的优劣(如交叉验证)
-
不对称性分类(偏斜类)的误差评估
-
例
癌症分类判断问题。分类算法的误差率是1%,但测试集中患癌症的人可能只有0.5%,相比之下误差率就不能够被接受。
-
Precision(精确度)/Recall(召回率)
Precision=真阳性/(真阳性+假阳性)
Recall=真阳性/(真阳性+假阴性)
-
拥有高Precision和高Recall的模型表现很好
-
精确度和召回率的权衡
-
通过调节判决条件可对最后结果的精确度和召回率进行调整
-
如希望非常确信是癌症才告诉病人,则可调高判决条件,此时模型拥有较高的精确度和较低的召回率。
-
若我们不想放过任何一个可能错判的情况,则可调低判决条件,此时模型拥有较低的精确度和较高的召回率。
-
-
也可画出精确度和召回率的曲线,取二者均较高的临界值
-
通过 \(F_1\) Score 来获取较好的精确度和召回率
- \(F_1 = 2\frac{PR}{P+R}\)
- 要获得较好的 \(F_1\),\(P\) 和 \(R\) 都要接近于1
-
-
七、机器学习数据
- 要确定能够根据特征获得想要的输出
- 确定能够采集到一个拥有多个特征的庞大数据集