引入
模型选择是机器学习一个很重要的部分,比如说现在我们有两个预测模型,我们就需要判断这两个模型对一个事物的预测是基于它们的预测能力(estimated skill),抑或是由于统计学上的“巧合”,以此作为我们选择模型的一个判据。
一般做统计假说测试时,我们会先给出一个假设,称为零假设(null hypothesis),通常我们会把希望推翻的结论设为零假设,比如,在相关性检验中,一般会取“两者之间没有关联”作为零假设,而在独立性检验中,一般会取“两者之间有关联”作为零假设。与零假设相对的是备择假设。
**t-检测(Student’s T-Test)**是一种应用性很广的检测手段,通过对比平均数(averages)和调和平均数(means),可以告诉我们样本间不同的程度有多大,可以知道这些差异是否是偶然发生的。然而,t检测要求各样本的观测相互独立,否则会造成错误。
Student’s T-Test(待补充)
这里简单对t检测进行说明
待补充
在对MCNemar检测进行说明前,先记下两个概念:
Ⅰ型错误: 原假设是正确的,却拒绝了原假设。
Ⅱ型错误: 原假设是错误的,却没有拒绝原假设。
MCNemar检测
其优势是:
对于只能执行一次的算法,McNemar 测试是唯一具有可接受的 Ⅰ 型错误的测试。
与大多数检测相同,MCNemar检测也无法直接告诉我们哪个模型更好或者说更准确,而是检测两模型或者说数据是否存在相同的分歧(有点不说人话的感觉,但也找不到更好的表述。。)。
直接举个例子比较容易说明,比如说以毒蘑菇分类为例,我们根据一系列的蘑菇属性对蘑菇进行毒性分类,那哪些属性是实实在在发挥作用的呢,就可以用到MCNemar检测,该检测关注点在于假阳性,符合实际生活的判断要求。
以颜色为例,首先我们训练两个模型,一个是考虑了颜色属性的,另一个没有,然后用这两个模型对数据进行判断统计,制作列联表:
\ | Classification_2_True | Classification_2_False |
---|---|---|
Classification_1_True | A | B |
Classification_1_False | C | D |
我们的零假设是:颜色与蘑菇毒性无关。
然后就是卡方值得计算:
A
A
A栏期望为:
A
A
A,
D
D
D栏期望为:
D
D
D,
B
,
C
B,C
B,C栏期望为
B
+
C
2
\frac{B+C}{2}
2B+C
对应得卡方统计量为:
A
A
A栏卡方值为:
(
A
−
A
)
2
A
=
0
\frac{(A-A)^2}{A}=0
A(A−A)2=0,同理
D
D
D栏卡方值为:
0
0
0,
B
,
C
B,C
B,C栏卡方值之和为
(
B
−
B
+
C
2
)
2
B
+
C
2
∗
2
\frac{(B-\frac{B+C}{2})^2}{\frac{B+C}{2}} *2
2B+C(B−2B+C)2∗2
总卡方值为:
χ
2
=
(
B
−
C
)
2
B
+
C
\chi^2 = \frac{(B-C)^2}{B+C}
χ2=B+C(B−C)2
这个值也就是MCNemar检验得统计量。
根据该统计量和自由度就可以计算出
p
p
p值。(自由度在这里为1,
(
r
o
w
−
1
)
×
(
c
o
l
−
1
)
(row-1)\times(col-1)
(row−1)×(col−1)),
p
p
p值通过查表获得。当
p
<
0.05
p<0.05
p<0.05,则拒绝原假设,否则则接受。
另外MCNemar检测有时候需要修正或者正态近似,这部分就。。。有机会再记录。
交叉验证
一般我们在进行模型训练得时候会把整个数据集分为训练集和验证集,观察不同模型不同参数在验证集上MSE的大小,再进行模型参数的选择。但这会产生两个问题:
最终模型与参数的选择会依赖于我们对训练集和验证集的划分;
这种方法只用了一部分的数据进行训练。
由此引出了交叉验证(Cross-Validation),其中最“彻底”的交叉验证应该是LOOCV方法,这种方法比较极端,就是说,假设我们有N个数据,我们就训练N次,每次取一个数据作为验证集,其余作为训练集,最后进行MSE的均值计算:
C
V
(
n
)
=
1
n
∑
i
=
1
n
M
S
E
i
CV_{(n)} = \frac{1}{n}\sum^{n}_{i=1}MSE_i
CV(n)=n1i=1∑nMSEi显然,这种方法虽然保证了模型的
b
i
a
s
bias
bias更小,但在数据量大,单个模型训练时间长的时候很不合适。
然后又有另一种方法K-fold Cross Validation,于LOOCV类似,但在这里我们的验证集不再是1个,比如
K
=
5
K=5
K=5的话,就是将所有数据集分为5份,不重复地每次取一份作为验证,最后计算平均的MSE:
C
V
(
k
)
=
1
k
∑
i
=
1
k
M
S
E
i
CV_{(k)} = \frac{1}{k}\sum^{k}_{i=1}MSE_i
CV(k)=k1i=1∑kMSEi所以也可以说,LOOCV是一种特殊的K-fold Cross Validation(K=N)。
另外需要注意的是,这里我们根据MSE进行调参,这里的参数并不是我们模型的参数,而是一些模型特有的超参数。
再说明两句:
对于K-fold Cross Validation,t-test会导致较高的Ⅰ型错误,但只是轻微的Ⅱ型错误。这意味着,当我们要尽可能避免Ⅱ型错误而可以容忍Ⅰ型错误时,可以使用这种组合。
5
×
2
5\times2
5×2交叉验证简单解释就是5次重复的2折交叉验证,需要进行10次学习计算。
主要参考这个网站 —> website. *
这篇还需要很多后续完善工作!!