分类器的组合算法提升准确率概要

分类器提升精确度主要就是通过组合,综合多个分类器结果,对最终结果进行分类。

组合方法主要有三种:装袋(bagging),提升(boosting)和随即森林。

装袋和提升方法的步骤:

1,基于学习数据集产生若干训练集

2,使用训练集产生若干分类器

3,每个分类器进行预测,通过简单选举(装袋)或复杂选举(提升),判定最终结果。

如上图所示,对数据集D,取得D1~Dk个子集,然后用M1~Mk个不同分类器进行分类训练,然后用测试集(新元组)得到预测结果,

最后对这k个结果使用少数服从多数原则判定。如用99种分类方法得到55个结果是1,44个结果是0,则判定最终结果为1。

在提升(boosting)算法中,可以看成是装袋的改进,即可以理解为加权投票。这里具体介绍adaptive boosting算法

该算法基本和袋装一致,就是新引入一个权重的概念,首先,在(1)初始化中,权重1/d,即每个元组(Di)权重一致,在地(9)~(11)步中,

对权重进行不断刷新,这里我们可以发现,被正确分类的元组的权重是一直乘以一个小于1的数,即被正确分类的元组,在被选为训练集Di的可能性降低,

分类器会关注“难以分类”的数据。我们是基于一个“某种分类器可能对某种特定的数据分类效果好”的信念上。

补充:元组概念:元组就是最小数据单位,比如人是一个元组,有身高,体重等属性。

在对数据进行训练后,就是用组合分类器。

这里我们看到,有出现一个权重,分类器的投票的权重,这个权重是依照分类器的准确率(错误率越低,权重越高)。

接下来是介绍决策树的提升算法:随机森林。

随机森林实际非常直观,就是用上文提到的随机装袋方法,对每个Di构建决策数,这里用CART算法建树(只需要计算Gini指数),不剪枝。

然后对让森林里所有的树进行投票即可。

附上R语言的随机森林事例:

//如果没有安装randomForest包,要先install.packages("randomForest")library(randomForest)
model.forest = randomForest(Species~.,data=iris)
pre.forest=predict(model.forest,iris)
table(pre.forest,iris$Species)

  

正确率高达100%

而用单一的决策树

library(rpart)
model.tree=rpart(Species~.,data=iris,method = "class")
pre.tree=predict(model.tree,data=iris,type="class")
table(pre.tree,iris$Species)

发现有一部分数据会被判错。

ps:组合分类器的算法摘自韩佳炜《数据挖掘概念与技术》。

时间: 2024-12-12 10:00:58

分类器的组合算法提升准确率概要的相关文章

排列组合算法

实现组合算法C(n,k),可以用递归实现: python代码: 1 import copy #实现list的深复制 2 3 def combine(lst, l): 4 result = [] 5 tmp = [0]*l 6 length = len(lst) 7 def next_num(li=0, ni=0): 8 if ni == l: 9 result.append(copy.copy(tmp)) 10 return 11 for lj in range(li,length): 12 t

优化后的组合算法

项目中一个算法中涉及到了组合,大概业务是:给定一个值X,从n个数中找出能组合加起来和X相等的集合.假设用通常的组合算法.数量级是2的n的阶乘.假设记录比較多的话,有效率问题.我针对我们的业务.优化写了一个算法. 大概逻辑:先给n个值从小到大排序形成一个队列.组合数从2開始依次递增,每次运行一个剔除操作,如果组合数递增到m.取队列中前面m-1个连续的值.并加上最大的一个值V.如果大于X,那么舍弃V.这样队列是不断缩小的. 舍弃没用的组合.运算量也会大大降低.详细见代码: /** * 从list中找

(转)C#全排列组合算法

全排列组合算法方法: public static List<List<T>> FullCombination<T>(List<T> lstSource){ var n = lstSource.Count; var max = 1 << n;//1乘以2的n次方 var lstResult = new List<List<T>>(); for (var i = 0; i < max; i++) { var lstTem

算法:全组合算法

public static List<int[]> combin(final int TOTAL, final int SELETED) { List<int[]> list = new ArrayList<int[]>(400000); int[] i = new int[SELETED]; for (int x = 1; x <= SELETED; x++) i[x - 1] = x; final int LAST = SELETED - 1; while (

Leetcode分类解析:组合算法

Leetcode分类解析:组合算法 所谓组合算法就是指:在解决一些算法问题时,需要产生输入数据的各种组合.排列.子集.分区等等,然后逐一确认每种是不是我们要的解.从广义上来说,组合算法可以包罗万象,甚至排序.各种搜索算法都可以算进去.最近读<The Algorithm Design Manual>时了解到这种归类,上网一查,甚至有专门的书籍讲解,而且Knuth的巨著TAOCP的第四卷就叫组合算法,看来还真是孤陋寡闻了!于是最近着重专攻了一下Leetcode中所有相关题目,在此整理一下学习心得.

C递归版的全排列和组合算法

For example, [1,2,3] have the following permutations: [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1]. 全排列: 从1开始递归,然后对2递归,最后对3递归 顺序是先输出 1 2 3  1 3 2  2 1 3   2  3 1 ............稍微分析一下就出来了 class Solution { private: vector<vector<int>>r

关于足彩任选九的组合算法

最近互联网彩票被国家叫停进行整改了,整改后互联网公司获取利润肯定会降低,但是不得不说中国的互联网彩票销售需要进行整改了,虽然对行业是阵痛,但是能够更好的规范彩票市场,对整个市场都会起到积极的作用.前段时间在做互联网彩票时也遇到了一些问题,特别是足彩任选九的复试组合算法. 足彩标注投注玩法:从14场比赛中任意选择9场比赛,每场比赛选择1种比赛结果为1注,每场比赛最多可选3种结果,单注最高奖金500万元!标准投注时可选择1-8场比赛结果作为胆码,其它比赛场次结果作为拖码进行胆拖投注,单注最高奖金50

java排列组合算法代码实现

原文:java排列组合算法代码实现 源代码下载地址:http://www.zuidaima.com/share/1550463479024640.htm java排列组合算法,有需要研究的童鞋可以下载,运行结果如下: package com.zuidaima.test; /** *@author www.zuidaima.com **/ public class Pailie { public static void main(String[] args) { int[] ia = {1, 2,

组合算法

组合算法 自交非杂交 指定数组: {"A","B","C","D"} 指定相交次数:3 输出: AAA AAB AAC AAD ABA ABB ABC ABD...DDA DDB DDC DDD 直接上代码: /// <summary> /// 组合算法 /// </summary> /// <param name="word">需要组合的字符数组:{"A&qu