加入收藏 | 设为首页 | 会员中心 | 我要投稿 宜春站长网 (https://www.0795zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

用了模板方法+策略+工厂方法模式

发布时间:2021-02-11 19:05:46 所属栏目:传媒 来源:互联网
导读:Redis6.0之前为什么采用单线程模型 严格地说,从Redis 4.0之后并不是单线程。除了主线程外,还有一些后台线程处理一些较为缓慢的操作,例如无用连接的释放、大 key 的删除等等。 单线程模型,为何性能那么高? Redis作者从设计之初,进行了多方面的考虑。最

Redis6.0之前为什么采用单线程模型

严格地说,从Redis 4.0之后并不是单线程。除了主线程外,还有一些后台线程处理一些较为缓慢的操作,例如无用连接的释放、大 key 的删除等等。

单线程模型,为何性能那么高?

Redis作者从设计之初,进行了多方面的考虑。最终选择使用单线程模型来处理命令。之所以选择单线程模型,主要有如下几个重要原因:

Redis操作基于内存,绝大多数操作的性能瓶颈不在CPU
单线程模型,避免了线程间切换带来的性能开销
使用单线程模型也能并发的处理客户端的请求(多路复用I/O)
使用单线程模型,可维护性更高,开发,调试和维护的成本更低
上述第三个原因是Redis最终采用单线程模型的决定性因素,其他的两个原因都是使用单线程模型额外带来的好处,在这里我们会按顺序介绍上述的几个原因。

性能瓶颈不在CPU

下图是Redis官网对单线程模型的说明。大概意思是:Redis的瓶颈并不在CPU,它的主要瓶颈在于内存和网络。在Linux环境中,Redis每秒甚至可以提交100万次请求
 

实现类似效果的另一种策略是将正态分布的噪声添加到编码分数中,其中标准偏差是可以调整的参数。

贝叶斯目标编码(Bayesiantarget encoding)是一种将目标用作编码方法的数学方法。仅使用均值可能是一种欺骗性度量,因此贝叶斯目标编码试图结合使用其他统计量来衡量目标变量的分布,例如其方差或偏度(highermoments)。

然后,通过贝叶斯模型合并这些分布的属性,该模型能够产生一种编码,这种编码可以更清楚类别目标分布的各个方面。但是,结果却难以解释。

证据权重(WoE)是对分类自变量与因变量之间关系的另一种细微看法。WoE源自信用评分行业,用于衡量拖欠或偿还贷款的客户之间的差别。证据权重的数学定义是优势比的自然对数,或:
 

这种编码方法有一些缺点。首先,它使模型更难以学习均值编码变量和另一个变量之间的关系。它只能根据它与目标的关系在在列中绘制相似性,这有利有弊。

这种编码方法对y变量非常敏感,会影响模型提取编码信息的能力。

由于该类别的每个值都被相同的数值替换,因此该模型可能会趋于过拟合它所看到的编码值(例如,将0.8与完全不同于0.79的值相关联)。这是将连续规模上的值视为严重重复的类处理的结果。因此,需要仔细监控y变量是否存在异常值。

为实现这一目的,可以使用category_encoders库。目标编码器是一种受监督的方法,因此需要X和y训练集。
 

最佳数据集包含了信息具有独立价值的特征,而独热编码可创建一个完全不同的环境。当然,如果只有三个或甚至四个类,那么独热编码可能并不是一个糟糕的选择。不过根据数据集的相对大小,其他的替代方法有可能值得一探。

目标编码可以有效表示分类列,而且仅占用一个特征空间。它也称为均值编码,该列中的每个值都被该类别的平均目标值代替。这样可以更直接地表示分类变量和目标变量之间的关系,并且这也是一种非常流行的技术(尤其是在Kaggle比赛中)。
 

很明显,它增加了大量的维度,但通常来说,维数越小越好。例如,如果设置一个列代表美国的州(例如加利福尼亚州、纽约州)的话,那么独热编码方案将会多出50个维度。

这样做不仅会为数据集增加大量维度,而且实际上并没有太多信息——大量0中零散分布着几个1。这使得优化难以进行,对于神经网络来说尤其如此,其优化器在大量的空白维度中很容易进入错误的空间。

更糟糕的是,每个信息稀疏列之间都具有线性关系。这意味着一个变量可以很容易地使用其他变量进行预测,从而可能导致高维的并行性和多重共线性问题。

(编辑:宜春站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读