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

下一代数据科学家群体走向“全栈”!

发布时间:2021-02-12 15:50:31 所属栏目:评论 来源:互联网
导读:这个查询将返回两条记录:初始的 al-Khwārizmī行(出生年份为 780 CE)和新的 al-Khwārizmī行(出生年份为 770 CE)。如果将 ctid 添加到 WHERE 中,对于这两条返回的记录,我们将看到不同的 ctid 值。 这个问题非常烦人。首先,我们无法得知这个问题究

这个查询将返回两条记录:初始的 al-Khwārizmī行(出生年份为 780 CE)和新的 al-Khwārizmī行(出生年份为 770 CE)。如果将 ctid 添加到 WHERE 中,对于这两条返回的记录,我们将看到不同的 ctid 值。

这个问题非常烦人。首先,我们无法得知这个问题究竟影响了多少行数据。数据库返回的重复结果在很多情况下会导致应用程序逻辑故障。我们最终添加了防御性编程语句,用来检测会出现这个问题的表。这个错误影响到了所有服务器,而在不同的副本实例上损坏的数据行是不一样的。也就是说,在其中一个副本实例上,行 X 可能是坏的,行 Y 是好的,但是在另一副本实例上,行 X 可能是好,行 Y 可能是坏的。我们无法确定数据损坏的副本数量以及问题是否影响了主数据库。

据我们所知,每个数据库只有几行数据会出现这个问题,但我们担心的是,由于复制发生在物理级别,最后可能会完全破坏数据库索引。B 树索引很重要的一点是必须定期进行重新平衡(rebalance),并且当子树移动到新的磁盘位置时,这些重新平衡操作可能会完全改变树的结构。如果移动了错误的数据,则可能导致树的大部分完全无效。

最后,我们找到了问题所在,并确定新的主数据库没有损坏的数据行。我们通过从主数据库的最新快照重新同步所有副本(这是一个费力的过程)来修复副本的数据损坏问题。

我们遇到的错误只出现在 Postgres 9.2 的某些版本中,并且已经修复了很长时间了。但是,我们仍然担心此类错误会再次发生。新版本的 Postgres 可能还会出现此类错误,并且由于数据复制的方式,这类问题有可能被传播到所有的数据库中。

副本 MVCC

Postgres 没有提供真正的副本 MVCC 支持。副本只应用 WAL 更新,导致它们在任何时候都具有与主数据库相同的磁盘数据副本。这种设计给 Uber 带来了麻烦。

Postgres 需要为 MVCC 维护旧数据的一个副本。如果流式复制遇到一个正在执行的事务,而数据库更新影响到了事务范围内的行,那么更新操作就会被阻塞。在这种情况下,Postgres 会暂停 WAL 线程,直到事务结束。如果事务处理要花费很长时间,这就会是个问题,因为副本可能严重滞后于主数据库。因此,Postgres 在这种情况下应用超时策略:如果一个事务导致 WAL 发生阻塞一定的时间,Postgres 将会终止这个事务。
 

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

贝叶斯目标编码

贝叶斯目标编码(Bayesian Target Encoding)是一种使用目标作为编码方法的数学方法。仅使用均值可能是一种欺骗性度量标准,因此贝叶斯目标编码试图结合目标变量分布的其他统计度量。例如其方差或偏度(称为高阶矩「higher moments」)。

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

证据权重

证据权重(Weight of Evidence,简称 WoE)是另一种关于分类自变量和因变量之间关系的方案。WoE 源自信用评分领域,曾用于区分用户是违约拖欠还是已经偿还贷款。证据权重的数学定义是优势比的自然对数,即:
 

但这种编码方法也有一些缺点。首先,它使模型更难学习均值编码变量和另一个变量之间的关系,仅基于列与目标的关系就在列中绘制相似性。

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

由于该类别的每个值都被相同的数值替换,因此模型可能会过拟合其见过的编码值(例如将 0.8 与完全不同的值相关联,而不是 0.79),这是把连续尺度上的值视为严重重复的类的结果。

因此,需要仔细监控 y 变量,以防出现异常值。要实现这个目的,就要使用 category_encoders 库。由于目标编码器是一种有监督方法,所以它同时需要 X 和 y 训练集。
 

最优数据集由信息具有独立价值的特征组成,但 one-hot 编码创建了一个完全不同的环境。

当然,如果只有三、四个类,那么 one-hot 编码可能不是一个糟糕的选择。但是随着类别的增加,可能还有其他更合适的方案值得探索。本文作者列举了几个方案供读者参考。

目标编码

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

(编辑:广元站长网)

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

    热点阅读