学习任务所建立的模型多数是参数估计并采用似然函数作为目标函数,当训练数据足够多时,可以不断提高模型精度,但是以提高模型复杂度为代价的,同时也带来一个机器学习中非常普遍的问题——过拟合。模型选择问题是在模型复杂度与模型对数据集描述能力(即似然函数)之间寻求最佳平衡。

对于过拟合问题,可加入模型复杂度的惩罚项来避免,这里通过ML库代码介绍两个模型选择方法:赤池信息准则(Akaike Information Criterion,AIC)和贝叶斯信息准则(Bayesian Information Criterion,BIC)。

1)AIC是衡量统计模型拟合优良性的一种标准,由日本统计学家赤池弘次在1974年提出,它建立在熵的概念上,提供了权衡估计模型复杂度和拟合数据优良性的标准。

通常情况下,AIC定义为:

其中k是模型参数个数,L是似然函数。从一组可供选择的模型中选择最佳模型时,通常选择AIC最小的模型。

当两个模型之间存在较大差异时,差异主要体现在似然函数项,当似然函数差异不显著时,上式第一项,即模型复杂度则起作用,从而参数个数少的模型是较好的选择。

一般而言,当模型复杂度提高(k增大)时,似然函数L也会增大,从而使AIC变小,但是k过大时,似然函数增速减缓,导致AIC增大,模型过于复杂容易造成过拟合现象。目标是选取AIC最小的模型,AIC不仅要提高模型拟合度(极大似然),而且引入了惩罚项,使模型参数尽可能少,有助于降低过拟合的可能性。

2)BIC(Bayesian InformationCriterion)贝叶斯信息准则与AIC相似,用于模型选择,1978年由Schwarz提出。训练模型时,增加参数数量,也就是增加模型复杂度,会增大似然函数,但是也会导致过拟合现象,针对该问题,AIC和BIC均引入了与模型参数个数相关的惩罚项,BIC的惩罚项比AIC的大,考虑了样本数量,样本数量过多时,可有效防止模型精度过高造成的模型复杂度过高。

其中,k为模型参数个数,n为样本数量,L为似然函数。kln(n)惩罚项在维数过大且训练样本数据相对较少的情况下,可以有效避免出现维度灾难现象。

ML库对聚类方法进行模型选择的示例代码如下:

/*** 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 net.sf.javaml.clustering.Clusterer;
import net.sf.javaml.clustering.KMeans;
import net.sf.javaml.clustering.evaluation.AICScore;
import net.sf.javaml.clustering.evaluation.BICScore;
import net.sf.javaml.clustering.evaluation.ClusterEvaluation;
import net.sf.javaml.clustering.evaluation.SumOfSquaredErrors;
import net.sf.javaml.core.Dataset;
import net.sf.javaml.tools.data.FileHandler;/*** Shows how to use the different cluster evaluation measure that are* implemented in Java-ML.* * @see net.sf.javaml.clustering.evaluation.** * @author Thomas Abeel* */
public class TutorialClusterEvaluation {public static void main(String[] args) throws Exception {/* Load a dataset */Dataset data = FileHandler.loadDataset(new File("D:\\tmp\\javaml-0.1.7-src\\UCI-small\\iris\\iris.data"), 4, ",");/** Create a new instance of the KMeans algorithm that will create 3* clusters and create one that will make 4 clusters.*/Clusterer km3 = new KMeans(3);Clusterer km4 = new KMeans(4);/** Cluster the data, we will create 3 and 4 clusters.*/Dataset[] clusters3 = km3.cluster(data);Dataset[] clusters4 = km4.cluster(data);ClusterEvaluation aic = new AICScore();ClusterEvaluation bic = new BICScore();ClusterEvaluation sse = new SumOfSquaredErrors();double aicScore3 = aic.score(clusters3);double bicScore3 = bic.score(clusters3);double sseScore3 = sse.score(clusters3);double aicScore4 = aic.score(clusters4);double bicScore4 = bic.score(clusters4);double sseScore4 = sse.score(clusters4);System.out.println("AIC score: " + aicScore3+"\t"+aicScore4);System.out.println("BIC score: " + bicScore3+"\t"+bicScore4);System.out.println("Sum of squared errors: " + sseScore3+"\t"+sseScore4);}
}

Java机器学习库ML之十模型选择准则AIC和BIC相关推荐

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

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

  2. Java机器学习库ML之八关于模型迭代训练的试验

    前文提到因为数据集过大,只能拆分然后依次迭代训练,实验发现对结果有所偏差,参考代码如下: package com.vip;import java.io.File; import java.util.M ...

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

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

  4. Java机器学习库ML之四模型训练和预测示例

    基于ML库机器学习的步骤: 1)样本数据导入: 2)样本数据特征抽取和特征值处理(结合模型需要归一化或离散化):这里本文没有做处理,特征选择和特征值处理本身就很大: 3)样本集划分训练集和验证集: 4 ...

  5. Java机器学习库ML之二Feature Selection(特征选择)

    机器学习中训练模型的前提必备工作就是特征选择,起到降维和降低计算开销的目的,当然在获取尽可能小的特征子集的同时,应不显著降低分类精度.不影响类分布.保持特征子集的稳定适应性强等. ML库提供了特征选择 ...

  6. Java机器学习库ML之十一线性SVM

    线性SVM的原理就不多说了,最强大的就是libsvm库(ml库也是用这个),参考:http://blog.csdn.net/fjssharpsword/article/details/53883340 ...

  7. Java机器学习库ML之九交叉验证法(Cross Validation)

    交叉验证(Cross Validation,CV)是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分 ...

  8. Java机器学习库ML之五样本不均衡

    样本不均衡的问题是指训练集中类别之间的样本数据量比例失衡.有研究表明,部分学习任务,在类别出现1∶35比例时就会使某些分类学习方法无效,甚至1∶10比例也会.样本不均衡导致的问题有: 1)少数类所包含 ...

  9. Java机器学习库ML之七分类预测输出概率值

    场景:一般分类预测直接输出类别标记,不过有些情况需要输出对应类别的概率值,比如判定为正例的概率是0.6,而判定为负例的概率是0.3,那自然标记为正例,这里就是看ML用classDistribution ...

最新文章

  1. 基于S3C2440A+SDRAM(K4M51163)
  2. 未能加载文件或程序集“System.Data.SQLite, Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139...
  3. 本周Java技巧#7 – Maven慢吗?
  4. 一文看清深圳云栖阿里云重磅产品发布
  5. Win10系统Win键无法使用
  6. 利用 LibWebP-NET 解码与编码 WebP 格式图片
  7. MYSQL 中 SQL 常用操作
  8. 量化客户需求强度-建立VOC
  9. nmap命令的安装及用法
  10. python3 微博API code获取解决方案 长期保存access_token
  11. Java实现家庭账户收支记录表
  12. Win11自动关机设置在哪?Win11设置自动关机的两种方法
  13. leedcode.203移除链表元素
  14. python sdk开发_用印象笔记的Python SDK接口开发个自用小工具
  15. 第三方登录之QQ登录集成(二)
  16. mobaxterm 出现 Server refused our key 的问题
  17. python爬虫之多线程threading、多进程multiprocessing、协程aiohttp 批量下载图片
  18. 生鲜超市会员连锁管理系统的应用(上)
  19. IDM6.41最新版下载器Internet Download Manager
  20. 将可信执行环境与区块链相结合

热门文章

  1. java 百分比相加_2019年Java面试题基础系列228道(5),快看看哪些你还不会?
  2. apache下支持asp.net的实现方法
  3. D3.js比例尺 定量比例尺 之 线性比例尺(v3版本)
  4. [BZOJ4994] [Usaco2017 Feb]Why Did the Cow Cross the Road III(树状数组)
  5. Apache Rewrite的主要功能
  6. 约束理论学习随笔(2)---DBR系统
  7. android平台TP调试无法正常使用问题
  8. android 填满手机磁盘空间方法
  9. MTK平台 Android4.0.3 定制关机动画
  10. 解决WinCE自动挂起的问题