交叉验证(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)相关推荐

  1. Java机器学习库ML之六关于模型迭代训练的思考

    我遇到的场景是:样本集有5000万条,接近5个G,那么这样的样本集一次导入训练,我放着一天一夜都没跑出结果,机器性能还特别好,是64位linux有128G内存. 针对这样的情况,我想到的是两种思路: ...

  2. Java机器学习库ML之一Dataset和Instance

    Java机器学习库ML官网:http://java-ml.sourceforge.net/ 对于一个机器学习库来说,最基础就是数据处理能力,ml库给了dataset和instance两个类,datas ...

  3. python可视化多个机器学习模型在训练集(train set)上交叉验证(cross validation)的AUC值、可视化模型效能

    python可视化多个机器学习模型在训练集(train set)上交叉验证(cross validation)的AUC值.可视化模型效能 # 所有的模型中填写的参数都是通过randomsearchcv ...

  4. R使用交叉验证(cross validation)进行机器学习模型性能评估

    R使用交叉验证(cross validation)进行机器学习模型性能评估 目录 R使用交叉验证(cross validation)进行机器学习模型性能评估

  5. 交叉验证(cross validation)是什么?K折交叉验证(k-fold crossValidation)是什么?

    交叉验证(cross validation)是什么?K折交叉验证(k-fold crossValidation)是什么? 交叉验证(cross validation)是什么?  交叉验证是一种模型的验 ...

  6. Keras训练神经网络进行分类并进行交叉验证(Cross Validation)

    Keras训练神经网络进行分类并进行交叉验证(Cross Validation) 交叉验证是在机器学习建立模型和验证模型参数时常用的办法.交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切 ...

  7. 【超参数寻优】交叉验证(Cross Validation)超参数寻优的python实现:多参数寻优

    [超参数寻优]交叉验证(Cross Validation)超参数寻优的python实现:多参数寻优 一.网格搜索原理 二.网格搜索+交叉验证用于多参数寻优的python实现 1.训练模型及待寻优参数 ...

  8. 【超参数寻优】交叉验证(Cross Validation)超参数寻优的python实现:单一参数寻优

    [超参数寻优]交叉验证(Cross Validation)超参数寻优的python实现:单一参数寻优 一.交叉验证的意义 二.常用的交叉验证方法 1.Hold one method 2.K-flod ...

  9. R语言构建xgboost模型:交叉验证(cross validation)训练xgboost模型,配置自定义的损失函数评估函数并使用交叉验证训练xgboost模型

    R语言构建xgboost模型:交叉验证(cross validation)训练xgboost模型,配置自定义的损失函数(loss function).评估函数(evaluation function) ...

最新文章

  1. 转发:某些函数需要将其一个或多个实参连同类型不变地转发给其他函数
  2. 【数据结构】单调栈和单调队列 详解+例题剖析
  3. 使用时间超级长的充电宝是啥样的?
  4. Android利用Looper在子线程中改变UI
  5. 崂山白花蛇草水:旧款变爆款老字号“有预谋”
  6. 2020年日历电子版(打印版)_2020年日历电子版(打印版)79451
  7. 老题新理解-在话winform之间的窗体传值
  8. Linux之diff命令
  9. 采用pd.io.sql读写数据
  10. 服务器机柜设备信息卡,信息机房标识标准V.doc
  11. 前端基础之HTML特殊字符集和表情集
  12. YouTube批量下载开源代码汇总
  13. 【论文分享】ACL 2020 立场检测相关研究
  14. Filtered request failed
  15. 思必驰:启发式对话中的知识管理
  16. 如何快速自动生成并定制报表
  17. python自学笔记15之实例之绘图、dataframe操作、读写csv,excle
  18. 人民链鲍大伟:打破壁垒,建立全域数据治理共享及应用平台
  19. [博学谷学习记录] 超强总结,用心分享|陌陌综合案例
  20. gh-ost大表DDL工具源码阅读

热门文章

  1. Linux下Mysql的查询用法
  2. 现代操作系统: 第四章 文件系统
  3. Win7 IIS7.5运行ASP时出现500错误的解决办法
  4. 13.jQuery选择器
  5. 【node】------mongoose的基本使用------【巷子】
  6. CLLocationManager 位置定位
  7. 软件工程——理论、方法与实践⑨
  8. f(f(x)) = -x
  9. Android5.1设备无法识别exFAT文件系统的64G TF卡问题
  10. rgb颜色判断语句_首款RGB智能指纹挂锁,既能报警还能减压,简直无锁不能