统计学习三要素
方法 = 模型 + 策略 +算法。当我们想使用统计学习方法对数据进行建模时,首先考虑要用哪种模型建模(如线性模型);而策略是在给定模型的假设空间下(如线性函数构成的集合),如何选择最优模型(即模型参数的确定);算法则是指学习模型的具体计算方法(通常解析解不存在)。
策略
【损失函数与风险函数】
- 损失函数:度量模型一次预测的好坏
- 风险函数:度量平均意义下模型预测的好坏
监督学习问题是在假设空间 $\mathcal{F}$ 中选取模型 $f$ 作为决策函数,对于给定的输入$X$,由$f(X)$给出相应的输出$Y$,这个输出的预测值$f(X)$ 与真实值$Y$可能一致也可能不一致,用一个损失函数来度量预测错误的程度,记作$L(Y,f(X))$。
常用的损失函数有:
- 0-1损失函数
- 平方损失函数
- 绝对损失函数
- 对数损失函数
【经验风险最小化与结构风险最小化】
假设给定一个训练数据集
模型$f(X)$关于训练数据集的平均损失称为经验风险或经验损失,记作${R_{emp}}(f)$:
损失函数值越小,模型就越好,而我们学习的目标就是选择期望风险最小的模型。根据大数定律,当样本容量$N$ 趋于无穷时,经验风险趋于期望风险(基于全量)。但由于现实中样本数量有限,预估通常并不理想,要对经验风险进行一定的矫正。
结构风险最小化(structural risk minimization, SRM)是为了防止当样本容量过小产生“过拟合”的解决策略,等价于正则化 ,是在经验风险基础上加上了表示模型复杂度的正则化项,结构风险的定义是:
其中$J(f)$ 表示模型的复杂度,模型$f$ 越复杂,复杂度$J(f)$ 就越大,表示了对复杂模型的惩罚。
模型选择
在模型选择时,不仅要考虑在训练集上的误差,还要考虑对未知数据的预测能力。如果一味追求在训练数据的预测能力,模型的复杂度往往会比真实模型更高,即产生过拟合。模型选择的方法通常有正则化与交叉验证。这里我们详细的讲一下“交叉验证”。
交叉验证用于给定数据不是很充足的时候,如果样本量相对充足(>1万条),我们一般随机的把数据分成三份,一份训练集(Trainning Set),一份验证集(Validation Set),最后一份测试集(Test Set)。训练集用于训练模型,验证集用于选择模型及其对应的参数,测试集用于最终对学习方法的评估。
【简单交叉验证】
首先将样本数据随机分成两部分(70%训练,30%测试),然后用训练集训练模型,在测试集上验证模型与参数。接着,再将模型打乱,重新选择训练集与测试集,继续训练和检验模型。最后用损失函数评估最优的模型与参数。
【S折交叉验证】
将样本数据随机分成S个互不相交且大小相同的子集,每次随机的选择S-1份最为训练集,剩下的一份做测试集。将这一过程可能的S种选择重复进行,最后平均误差最小的模型(充分利用了所有样本)。
【留一交叉验证】
就是S折交叉验证的特殊情况,S等于样本数N,仅留下1个样本用于测试(即留一),通常用于N小于50的情况下。
最后
在Hexo-Next
中输入数学公式还是遇到了麻烦,要注意的是:在markdown语法中下划线_
代表斜体,而mathjax中的_
表示下标,所以使用下标_
时,一定要在前面加个反斜杠\_
,否则无法解析。
更新(最佳决绝方案,且不用考虑下划线_
的问题)
第一步:使用Kramed代替 Marked
第二步:停止使用 hexo-math
第三步:更新 Mathjax 的 CDN 链接
首先打开/node_modules/hexo-renderer-mathjax/mathjax.html
,然后把<script>
更改为:
第四步:更改默认转义规则
因为 hexo 默认的转义规则会将一些字符进行转义,所以我们需要对默认的规则进行修改。先找到../node_modules/kramed/lib/rules/inline.js
文件,
第五步:开启mathjax
在主题_config.yml
中开启Mathjax
,即修改如下代码:
并在博客中开启Mathjax
,即添加以下内容:
详细可参考
其余参考资料
如何在Hexo博客中插入数学公式
Hexo-NexT主题使用mathjax输入数学公式注意事项
hexo在Next主题下输入数学公式