Java机器学习库ML之九交叉验证法(Cross Validation)
来源:互联网 发布:在淘宝买了劣质产品 编辑:程序博客网 时间:2024/05/18 07:57
交叉验证(Cross Validation,CV)是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set)。首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。常见CV的方法如下:
1)Hold-Out Method
将原始数据随机分为两组,一组做为训练集,一组做为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此Hold-OutMethod下分类器的性能指标.此种方法的好处的处理简单,只需随机把原始数据分为两组即可,其实严格意义来说Hold-Out Method并不能算是CV,因为这种方法没有达到交叉的思想,由于是随机的将原始数据分组,所以最后验证集分类准确率的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性.
2)K-fold Cross Validation(记为K-CV)
将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标.K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2.K-CV可以有效的避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性.
3).Leave-One-Out Cross Validation(记为LOO-CV)
如果设原始数据有N个样本,那么LOO-CV就是N-CV,即每个样本单独作为验证集,其余的N-1个样本作为训练集,所以LOO-CV会得到N个模型,用这N个模型最终的验证集的分类准确率的平均数作为此下LOO-CV分类器的性能指标.相比于前面的K-CV,LOO-CV有两个明显的优点:
①a.每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠。
②b.实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
但LOO-CV的缺点则是计算成本高,因为需要建立的模型数量与原始数据样本数量相同,当原始数据样本数量相当多时,LOO-CV在实作上便有困难几乎就是不显示,除非每次训练分类器得到模型的速度很快,或是可以用并行化计算减少计算所需的时间.
ML库中的交叉验证法,应该是采用K折交叉验证法,代码示例如下:
/** * This file is part of the Java Machine Learning Library * * The Java Machine Learning Library is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * The Java Machine Learning Library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the Java Machine Learning Library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * Copyright (c) 2006-2012, Thomas Abeel * * Project: http://java-ml.sourceforge.net/ * */package com.gddx;import java.io.File;import java.util.Map;import net.sf.javaml.classification.Classifier;import net.sf.javaml.classification.KNearestNeighbors;import net.sf.javaml.classification.evaluation.CrossValidation;import net.sf.javaml.classification.evaluation.PerformanceMeasure;import net.sf.javaml.core.Dataset;import net.sf.javaml.tools.data.FileHandler;/** * This tutorial shows how you can do cross-validation with Java-ML * * @author Thomas Abeel * */public class TutorialCrossValidation { /** * Default cross-validation with little options. */ public static void main(String[] args) throws Exception { /* Load data */ Dataset data = FileHandler.loadDataset(new File("D:\\tmp\\javaml-0.1.7-src\\UCI-small\\iris\\iris.data"), 4, ","); //Dataset data = FileHandler.loadDataset(new File("D:\\tmp\\train_features_npequal.txt"), 12, "\\s+"); /* Construct KNN classifier */ Classifier knn = new KNearestNeighbors(2); /* Construct new cross validation instance with the KNN classifier */ CrossValidation cv = new CrossValidation(knn); /* Perform 5-fold cross-validation on the data set */ Map<Object, PerformanceMeasure> p = cv.crossValidation(data); System.out.println("Accuracy=" + p.get("Iris-virginica").getAccuracy()); System.out.println(p); }}
- Java机器学习库ML之九交叉验证法(Cross Validation)
- 【机器学习】交叉验证(cross-validation)
- 【机器学习】交叉验证和K-折交叉验证cross-validation and k-fold cross-validation
- 斯坦福大学机器学习——交叉验证(Cross Validation)
- 机器学习中的交叉验证(cross-validation)
- 机器学习中的交叉验证(cross-validation)
- 机器学习----交叉验证(Cross Validation)简介
- 斯坦福大学机器学习——交叉验证(Cross Validation)
- cross-validation 交叉验证
- 交叉验证--Cross validation
- cross-validation 交叉验证
- 交叉验证(Cross Validation)
- cross validation交叉验证
- cross validation 交叉验证
- 交叉验证(Cross-validation)
- 交叉验证(Cross-Validation)
- 交叉验证(Cross-Validation)
- 交叉验证(Cross-Validation)
- 博客网站推荐
- 数值的整数次方
- Android系统语言列表
- Hadoop系列-MapReduce编程入门案例(八)
- win10下MATLAB figure 中文乱码
- Java机器学习库ML之九交叉验证法(Cross Validation)
- ssh hibernate 获取sql列名
- SpringBoot 返回Json
- 文章标题
- Yii2之cache的使用
- linux查看和修改PATH环境变量的几种方法
- MD5 使用 md5sum hash 校验文件完整性与是否被篡改
- 面试题 3:二维数组中的查找
- java 发送邮件