什么是留一交叉验证以及如何用python编码实现

来源:互联网 发布:webzip软件 编辑:程序博客网 时间:2024/05/29 16:14

什么是留一交叉验证以及如何用python编码实现

当我们在进行编写PLS(偏最小二乘)程序,用近红外光谱做回归等一类算法时,时常会涉及最佳主成分的选取。所谓最佳就存在一个比较。这时就会用到交叉验证,交叉验证有许多种,今天就简单说一下留一交叉验证(仅自己的理解,不一定十分正确)。

留一交叉验证
就是将样本集中的样本每次抽取一个不同的样本作为测试集剩余的样本作为训练集。需要进行原样本个数次抽取,以进行后续的操作。假设一个.mat文件有310个样本,那么每次抽取一个不同的样本做测试,剩余的299个样本做训练。需要进行310次这样的过程,但是每次选取的做测试的样本是不同的,那么每次训练集的样本也是不同的。由于留一交叉验证的操作的次数十分多,这样选取出来的主成分更具普遍性,可以避免一些不必要的波动,避免一些数据分析时出现有时效果好,有时效果差,这样摇摆不定的情况。因此广受青睐,但是留一交叉验证也有其弊端,样本过多运算时间过长。

下面就来说一下留一交叉验证Python代码的实现。
下面这个是系统自带的留一交叉验证最简单的举例。
以下是其输出结果:
以下是我对留一交叉验证关于读取.mat这类数据量比较庞大的文件并输出每次的训练、集测试集的的一个小程序:
(由于.mat文件的样本比较多(经常是几十至百个),维度也比较高(一般超过一百个特征)。所以我们在这里只用4个样本做一个示例:X选取了4个样本5个特征,y是只有一列)
下面是留一交叉验证每次操作时输出的训练集和测试集:
可以看出每次的X_test和X_train都是不一样的。




0 0
原创粉丝点击