一、Bootstrap
非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法,也称为自助法。其核心思想和基本步骤如下:[1]
(1)采用重抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程允许重复抽样。
(2)根据抽出的样本计算给定的统计量T。
(3)重复上述N次(一般大于1000),得到N个统计量T。
(4)计算上述N个统计量T的样本方差,得到统计量的方差。
应该说Bootstrap是现代统计学较为流行的一种统计方法,在小样本时效果很好。通过方差的估计可以构造置信区间等,其运用范围得到进一步延伸。
具体抽样方法举例:想要知道池塘里面鱼的数量,可以先抽取N条鱼,做上记号,放回池塘。
进行重复抽样,抽取M次,每次抽取N条,考察每次抽到的鱼当中有记号的比例,综合M次的比例,在进行统计量的计算。
二、在统计学中,自助法(Bootstrap
Method,Bootstrapping或自助抽样法)是一种从给定训练集中有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。自助法由Bradley
Efron于1979年在《Annals
of
Statistics》上发表。当样本来自总体,能以正态分布来描述,其抽样分布(Sampling
Distribution)为正态分布(The
Normal
Distribution);但当样本来自的总体无法以正态分布来描述,则以渐进分析法、自助法等来分析。采用随机可置换抽样(random
samplingwith
replacement)。对于小数据集,自助法效果很好。
评论
|
51
0
举报|
2013-04-04
16:14
热心网友
最快回答
引导(bootstrap):
(1)一个指令序列,执行它可以导致装入并执行附加的指令,直到将整个计算机程序装入存储器为止.
(2)一种设计成通过自己的 *** 作使其自身处于期望状态的技术或设备,例如,一种机器例程,该例程的头几个指令足以使其自身的其余部分从输入设备进入计算机。
在 *** 作系统中:
指使用一个很小的程序将某个特定的程序(通常是指 *** 作系统)载入计算机中。亦指启动节点,引导节点。
channel是netty中数据传输和数据处理的渠道,也是netty程序中不可或缺的一环。在netty中channel是一个接口,针对不同的数据类型或者协议channel会有具体的不同实现。
虽然channel很重要,但是在代码中确实很神秘,基本上我们很少能够看到直接使用channel的情况,那么事实真的如此吗?和channel相关的ChannelGroup又有什么作用呢?一起来看看吧。
其实netty的代码是有固定的模板的,首先根据是server端还是client端,然后创建对应的Bootstrap和ServerBootstrap。然后给这个Bootstrap配置对应的group方法。然后为Bootstrap配置channel和handler,最后启动Bootstrap即可。
这样一个标准的netty程序就完成了。你需要做的就是为其挑选合适的group、channel和handler。
我们先看一个最简单的NioServerSocketChannel的情况:
这里,我们将NioServerSocketChannel设置为ServerBootstrap的channel。
这样就完了吗?channel到底是在哪里用到的呢?
别急,我们仔细看一下try block中的最后一句:
bbind(PORT)sync()实际上返回了一个ChannelFuture对象,通过调用它的channel方法,就返回了和它关联的Channel对象。
然后我们调用了channelcloseFuture()方法。closeFuture方法会返回一个ChannelFuture对象,这个对象将会在channel关闭的时候收到通知。
而sync方法会实现同步阻塞,一直等到channel关闭为止,从而进行后续的eventGroup的shutdown *** 作。
在ServerBootstrap中构建模板中,channel其实有两个作用,第一个作用是指定ServerBootstrap的channel,第二个作用就是通过channel获取到channel关闭的事件,最终关闭整个netty程序。
虽然我们基本上看不到channel的直接方法调用,但是channel毋庸置疑,它就是netty的灵魂。
接下来我们再看一下具体消息处理的handler的基本 *** 作:
通常如果需要在handler中向channel写入数据,我们调用的是ChannelHandlerContext的write方法。这个方法和channel有什么关系呢?
首先write方法是ChannelOutboundInvoker接口中的方法,而ChannelHandlerContext和Channel都继承了ChannelOutboundInvoker接口,也就是说,ChannelHandlerContext和Channel都有write方法:
因为这里我们使用的是NioServerSocketChannel,所以我们来具体看一下NioServerSocketChannel中write的实现。
经过检查代码我们会发现NioServerSocketChannel继承自AbstractNioMessageChannel,AbstractNioMessageChannel继承自AbstractNioChannel,AbstractNioChannel继承自AbstractChannel,而这个write方法就是AbstractChannel中实现的:
Channel的write方法,实际上调用了pipeline的write方法。下面是pipeLine中的write方法:
这里的tail是一个AbstractChannelHandlerContext对象。
这样我们就得出了这样的结论:channel中的write方法最终实际上调用的是ChannelHandlerContext中的write方法。
所以上面的:
实际上可以直接从channel中调用:
channel是netty的灵魂,对于Bootstrap来说,要获取到对应的channel,可以通过调用:
来得到,从上面代码中我们也可以看到一个Bootstrap只会对应一个channel。
我们再来看一下channelGroup的定义:
可以看到ChannelGroup实际上是Channel的集合。ChannelGroup用来将类似的Channel构建成集合,从而可以对多个channel进行统一的管理。
可以能有小伙伴要问了,一个Bootstrap不是只对应一个channel吗?那么哪里来的channel的集合?
事实上,在一些复杂的程序中,我们可能启动多个Bootstrap来处理不同的业务,所以相应的就会有多个channel。
如果创建的channel过多,并且这些channel又是很同质化的时候,就有需求对这些channel进行统一管理。这时候就需要用到channelGroup了。
先看下channelGroup的基本使用,首先是创建一个channelGroup:
有了channelGroup之后,可以调用add方法,向其中添加不同的channel:
并且还可以统一向这些channel中发送消息:
基本上channelGroup提供了write,flush,flushAndWrite,writeAndFlush,disconnect,close,newCloseFuture等功能,用于对集合中的channel进行统一管理。
如果你有多个channel,那么可以考虑使用channelGroup。
另外channelGroup还有一些特性,我们来详细了解一下。
ChannelGroup是一个channel的集合,当然我们只希望保存open状态的channel,如果是close状态的channel,还要手动从ChannelGroup中移出的话实在是太麻烦了。
所以在ChannelGroup中,如果一个channel被关闭了,那么它会自动从ChannelGroup中移出,这个功能是怎么实现的呢?
先来看下channelGroup的add方法:
可以看到,在add方法中,为channel区分了是server channel还是非server channel。然后根据channel id将其存入ConcurrentMap中。
如果添加成功,则给channel添加了一个closeFuture的回调。当channel被关闭的时候,会去调用这个remover方法:
remover方法会将channel从serverChannels或者nonServerChannels中移出。从而保证ChannelGroup中只保存open状态的channel。
虽然 ServerBootstrap的bind方法只会返回一个channel,但是对于server来说,可以有多个worker EventLoopGroup,所以当客户端和服务器端建立连接之后建立的accepted Channel是server channel的子channel。
也就是说一个服务器端有一个server channel和多个accepted channel。
那么如果我们想要同时关闭这些channel的话, 就可以使用ChannelGroup的close方法。
因为如果Server channel和非Server channel在同一个ChannelGroup的话,所有的IO命令都会先发给server channel,然后才会发给非server channel。
所以我们可以将Server channel和非Server channel统统加入同一个ChannelGroup中,在程序的最后,统一调用ChannelGroup的close方法,从而达到该目的:
另外,和channel一样,channelGroup的 *** 作都是异步的,它会返回一个ChannelGroupFuture对象。
我们看下ChannelGroupFuture的定义:
可以看到ChannelGroupFuture是一个Future,同时它也是一个ChannelFuture的遍历器,可以遍历ChannelGroup中所有channel返回的ChannelFuture。
同时ChannelGroupFuture提供了isSuccess,isPartialSuccess,isPartialFailure等方法判断命令是否部分成功。
ChannelGroupFuture还提供了addListener方法用来监听具体的事件。
channel是netty的核心,当我们有多个channel不便进行管理的时候,就可以使用channelGroup进行统一管理。
一款国外很流行的开源免费后台模板。
逛TP论坛的时候看到有人分享AceAdmin的模板(>
这个报的是json数据资源转换的错误,据推测这是你在加载某种特定类型的数据的时候导致的。而导致此问题最大的可能是json数据中含有换行、空格之类肉眼无法直接识别的字符导致的问题,建议你在服务器端过滤后再输出,即可解决该问题。
以上就是关于如何获得bootstrap样本全部的内容,包括:如何获得bootstrap样本、netty系列之:channel和channelGroup、Bootstrap--Ace admin模板的视频教程或者使用文档可以分享一下吗 等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)