bagging算法java实现(从N个样本中有放回地取N次)
来源:互联网 发布:php artisan serve 编辑:程序博客网 时间:2024/05/22 04:37
该试验实现了统计学上经典的bagging抽样方法,并通过多次反复实验(迭代),画出了分布图,验证了bagging的正态分布和随机抽样的概率收敛情况。
package cn.melina.classification.test;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.HashMap;import java.util.Random;import java.util.Set;import org.apache.mahout.common.RandomUtils;public class BaggingTest {/** * if data has N cases, sample N cases at random without replacement. * * @author melina * * @param N * numbers of cases * * @return N次取值并去重之后剩余的数的个数 */public static int runBagging(int N){Random rng = RandomUtils.getRandom(); ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < N; i++) { int index = rng.nextInt(N); list.add(index); } //合并相同的取值 HashMap<String, Integer> hash = new HashMap<String, Integer>(); for (int i = 0; i < list.size(); i++) { try { if (!hash.isEmpty() && hash.containsKey(list.get(i))) { hash.put(list.get(i).toString(), hash.get(list.get(i)) + 1); } else { hash.put(list.get(i).toString(), 1); } } catch (Exception e) { } } /*Set<String> set = hash.keySet(); for (String key : set) { System.out.println(key + "==>" + hash.get(key)); } */return hash.keySet().size();}public static void main(String []args){int itr_num = 10000; //迭代次数int datasize = 100; //bagging的样本数目,此处为0~99之间100个数字做baggingArrayList<Integer> list = new ArrayList<Integer>();for(int i = 0; i < itr_num; i ++){int num = runBagging(datasize);list.add(num); //System.out.println("第"+i+"次bagging去重之后的个数:"+ num); //System.out.println(num);}//统计 相同的数目在全部迭代后出现的频率HashMap<String, Integer> hash = new HashMap<String, Integer>(); for (int i = 0; i < list.size(); i++) { try { if ((!hash.isEmpty() )&&( hash.containsKey(list.get(i).toString()))) { hash.put(list.get(i).toString(), Integer.valueOf(hash.get(list.get(i).toString())) + 1); } else { hash.put(list.get(i).toString(), 1); } } catch (Exception e) { } } Set<String> set = hash.keySet(); for (String key : set) { double itr_double=itr_num*1.0; double value = hash.get(key)/itr_double; DecimalFormat df = new DecimalFormat("0.00%"); System.out.println(key + "," + df.format(value)); } }}
bagging的样本总数设定为100,则从0~99这100个数中随机有放回取100次,将会在63.2附近达到极值。反复实验10000次,画出一下统计图:
GOOD LUCK!
小伙伴们加油!有问题欢迎加我好友讨论~
0 0
- bagging算法java实现(从N个样本中有放回地取N次)
- Java 从n个球中取m个球(不放回)
- 从m中取n个元素-抽牌算法
- R语言如何把vector累加到数据框 #从100个样本中抽取90个样本,无放回抽样,做10次
- 组合(从长度为n的字符串中取m个字符)---java两种实现方法
- 一个有n个整数的递增有序数组。对它进行向左或向右循环移动若干次后,要求给出一个代码实现,尽可能快地从这个数组中寻找指定值所在的位置
- 编写算法输出从n个数中取k个(k小于等于n)的所有组合
- 在n个球中,任意取出m个(不放回),求有多少种不同取法
- 从有n个元素的数组中找出出现次数大于n/3次的元素
- java实现从M个元素中取N个元素的所有组合(数学中的组合问题)
- 从N个元素中取k个元素子集的c++实现
- 从N个元素中取k个元素子集的减治法实现
- 经典算法题:排列组合-有放回地取不同颜色的小球
- 从n个数字中选取m个数字的组合算法(不分序列)
- 生产N个不重复的随机数(从一个数组中随机取N个元素)
- 从list中取N个随机生成一个集合
- 随机数算法之从N个数中取M个数
- 如何设计一个高效算法从N个正整数中,随机选取n个不同的随机数 n<=N
- 线程安全Collections.synchronizedList
- Android优秀开源项目[持续更新~欢迎推荐~]
- 六、表查询一
- Android中的Selector的用法
- 细数JDK里的设计模式
- bagging算法java实现(从N个样本中有放回地取N次)
- cannot open shared object file: No such file or directory解决
- 七、oracle 表查询二
- sql server2008 数据库显示时间的格式 数据库时间表示函数
- QNX可以在Atmel SAMA5D3x EVK上运行
- 3.5. Building DEB packages
- 八、oracle 分页
- 制作系统文件网址
- 用户需求的分类