EPL 幻想 GW3 重述和 GW4 算法精选
我们的钱球方法的幻想 EPL(队 _id: 2057677)
如果这是你第一次登陆我的幻想 EPL 博客,你可能想先看看第一部分、第二部分、第三部分和第四部分,以熟悉我们的整体方法和我们随着时间的推移所做的改进。
GW3 团队绩效总结和总体统计
我们上周的表现好于平均水平,总共得了 51 分,由于恩多姆贝勒和坎特的受伤,只有 10 名球员参加了比赛。如果拉什福德没有错过那个点球,我们会做得更好。见下文:
GW3 Total Points
本周有什么新消息?
现在已经有至少 4 场比赛了,我们将开始发布团队统计以及顶级防守/进攻,累积团队投资回报率,每支团队的总活跃球员数,开始识别整体上表现不佳/表现超过或使用大量团队轮换的团队,从长远来看,这将使从这些团队中选择球员的价值降低。
GW3 整体统计数据为我们的 GW4 选择提供信息
首先,我们将查看 FDR_score(接下来 3 个对手的难度),以决定我们可能要从哪些球队中排除挑选球员:
Watford, Brighton, Leicester, and Norwich FDR ≥ 3.56
由于接下来三场比赛的平均对手实力较高,我们的算法将不会从以下球队中选择球员— 沃特福德,布莱顿,莱斯特和诺维奇(抱歉普基球迷:P)。接下来三场比赛赛程相对轻松的好球队是:曼城、切尔西、埃弗顿、曼联和西汉姆。
接下来,我们将按职位看一下前 10 名 ROI 玩家是谁:
投资回报率排名前十的守门员
按投资回报率排名的前 10 名防御者
投资回报率排名前十的中场球员
投资回报率排名前 10 的前锋
GW3 算法选择
提醒一下,我们的算法会考虑调整后的每队阵型的预算,并尝试最大化 11 名主力球员的每个位置的支出,然后让你的替补获得良好的 ROI 值。本周我们将打4–3–4阵型。根据当前的投资回报率得分,过滤掉任何在接下来的三场比赛中与 AVG 对手有困难(FDR ≥ 3.56)的球队,并从可用选择列表中删除受伤的球员,我们的算法选择了以下球队作为当前花费全部 1 亿美元预算的最佳球队:
看起来不错的球队,银行里还有整整 400 万美元,这主要是因为我们在我们的算法开始获得最高投资回报率之前,限制了我们的算法选择的高价球员的数量。也就是说我们使用这个建议作为指导方针,并且通常会做一些我们自己的自定义更改,因为我们不能做全部 9 个替换:)
下面是我们这个周末比赛的队伍:
我们选择本周不要巴恩斯和皮特,尽管算法推荐了他们,因为伯尼将对阵利物浦,预计他们可能表现不佳。如果算法仍然推荐它们作为值,下周将很可能得到其中一个。我们选择亚伯拉罕而不是巴恩斯,因为他上场时间更长,而且他的每 90 分钟得分非常好。我们因为恩多姆贝尔的受伤而换下了他,为了节省下周的开支,我们买下了道格拉斯·路易斯。
团队统计
查看最佳/最差防守和进攻可以有几种不同的用法——例如,如果一个最佳进攻队与一个最差防守队比赛,你可能想让你的进攻中场或前锋担任队长。此外,当你查看这些位置的算法建议时,你可能想优先考虑防守最好的球队的 DF 和 GK。
最佳五种防御
最差 5 项防御
最佳 5 次进攻
最严重的 5 种犯罪
观察这些的一个副作用是,如果狼队的进攻没有改善,我们将不得不从一个更成功的进攻团队中换来一个更有效的前锋吉梅内斯**(可能是普基或巴恩斯**)
累积团队投资回报统计
下面你可以看到球队,按累积玩家投资回报率排序。请注意,活跃玩家是指至少玩了总可能游戏时间的 25% 的任何玩家。例如,总可能分钟数=周数* 90 分钟= 4 * 90 = 360。所以,我们把所有在队中至少打满 90 分钟的球员都计算在内。
上表中值得注意的有趣事实——曼城、利物浦、水晶宫、切尔西和西汉姆(17!!!使用更多的替补,轮换不同的球员。这意味着我们必须小心,从长远来看,我们投资这些球队的哪些球员。尽管曼城有 15 名现役球员,他们的总成本为 1.13 亿美元,但他们仍然是 avg_pts_per_player 最高的球队,这意味着许多现役球员迄今为止表现良好,价格也不算过高。切尔西、阿森纳和马刺在 avg_player_roi 排名中意外地处于下半部分,所以看起来这些球队目前为止表现不佳与他们球员的成本相比(价格过高)。伯恩利、阿斯顿维拉和狼队是综合团队投资回报率排名前三的球队,因此看起来他们的许多球员价格偏低,目前很有价值,但当然,如果他们的核心球员不能保持良好的表现,这种情况在未来 3-4 周内可能会很快改变。
最终想法:
到目前为止,这不是我们最好的开始,但是我们都知道,在一场有如此多变数和未知的比赛中,运气是一个很大的因素,但是总的来说,我们对自己的选择很满意。在前三周,我们已经遭受了一些伤病、点球失误和门将失误,这让我们损失了很多分数,除此之外,没有了 Pukki,我们做得还不错。至少在接下来的 2-3 周比赛中,我们仍然有一张王牌和一支相当平衡的球队,所以让我们给统计数据一些时间来收敛,并在几周内重新评估我们的选择逻辑,并决定我们是否需要做出一些调整。
一如既往——感谢您的阅读,祝您周末好运!
EPL 幻想 GW4 重述和 GW5 算法精选
我们的钱球方法的幻想 EPL(队 _id: 2057677)
如果这是你第一次登陆我的幻想 EPL 博客,你可能想先看看第一部分、第二部分、第三部分、第四部分和第五部分,以熟悉我们的整体方法和我们随着时间的推移所做的改进。
本周有什么新消息?
现在我们已经有 4 场比赛了,我们开始加入一个新的统计数据——“pts _ per _ 90min”,这可以帮助我们发现高价值的球员,他们没有开始前几场比赛,但最近获得了更多的上场时间,并迅速攀升,例如凯文·德布鲁因,塔米·亚伯拉罕和塞尔吉奥·阿奎罗。
我们编写了一个算法,使用这个 pts_per_90min stat 而不是 ROI 来选择最佳团队。我们需要重新校准算法来获得更多的防守者,但为了时间的缘故,我将只发布当前的球队选择,让你们知道哪些球员可能是一个长期的好投资,如果他们保持接近 90 分钟的上场时间。
以下是 pts_per_90min 统计中每个位置排名前 10 的球员。一些有趣的名字开始在这里出现,以发现那些在 GW1-GW2 期间没有得到很多时间,但在过去几周内开始获得上场时间的球员——来自 GKs 的阿德里安、科伦钱伯斯、 DFs 的乔尔·马蒂普、亚瑟·马苏阿库、凯文·德布鲁因、亚历克斯·艾奥比和来自 MDs 的哈里·威尔逊我们可能会决定在这个 GW 投资其中一些玩家,即使他们的投资回报率还没有达到,因为没有足够的游戏时间,假设这些玩家在未来的大多数游戏中游戏时间将接近 90 分钟。
GK 前 10 名 pts_per_90min
前 10 名 DF pts_per_90min
前 10 名 MD pts _ per _ 90 分钟
每 90 分钟前 10 名
GW4 团队绩效总结和总体统计
上周我们又一次表现得比平均水平好,但也比 61 分好不了多少。我在考虑让亚伯拉罕代替斯特林做队长,这本来是一个好的选择,但是,唉…我们都知道在 EPL 的幻想中“本可以,本应该”的痛苦
GW4 整体统计数据为我们的 GW5 选择提供信息
首先,我们将查看 FDR_score(接下来 3 个对手的难度),以决定我们可能要从哪些球队中排除挑选球员:
因为在接下来的三场比赛中对手的平均实力很高,我们的算法将不会从以下球队中选择球员——沃特福德,莱斯特,谢菲尔德联队和诺维奇(抱歉普基球迷:P)。接下来三场比赛赛程相对轻松的好球队是——曼城和伯恩利。
接下来,我们将按职位来看一下投资回报率前 10 的玩家是谁:
投资回报率排名前十的守门员
投资回报率排名前 10 的防御者
投资回报率排名前十的中场球员
投资回报率排名前十的前锋
GW3 算法选择
提醒一下,我们的算法会考虑调整后的每队阵容预算,并尝试最大化 11 名主力球员的每个位置的支出,然后让你的替补获得良好的 ROI 值。本周我们将打 4-3-4 阵型。根据当前的投资回报率得分,过滤掉任何在接下来的三场比赛中与 AVG 对手有困难(FDR ≥ 3.56)的球队,并从可用选择列表中删除受伤的球员,我们的算法选择了以下球队作为当前花费全部 1 亿美元预算的最佳球队:
考虑到曼城接下来的赛程相当轻松,这个配置看起来一点也不差。我们考虑过使用我们的外卡,但是我们通常不喜欢在赛季早期使用,尤其是在国际比赛结束后,因为有时教练会让主要球员休息,他们回来时可能很累或者受了轻伤。
下面是我们下周的团队:
最终花了 8 分得到阿德里安、德布鲁因和阿尤,但我们认为考虑到阿德里安的便宜价格和曼城的轻松赛程,从长远来看这是值得的。我们真的很想得到阿圭罗,但只有一个完整的团队改造,包括通配符的使用将允许这一点。
团队统计
查看最佳/最差防守和进攻可以有几种不同的用法——例如,如果最佳进攻队与最差防守队比赛,你可能想让你的进攻中场或前锋担任队长。此外,当你查看这些位置的算法建议时,你可能想优先考虑防守最好的球队的 DF 和 GK。
最佳五种防御
最差的 5 种防御
最佳五大犯罪
最严重的 5 种犯罪
累积团队投资回报统计
下面你可以看到球队,按累积玩家投资回报率排序。请注意,活跃玩家是指任何至少玩了总可能游戏时间的 25% 的玩家。例如,总可能分钟数=周数* 90 分钟= 4 * 90 = 360。所以,我们把所有在队中至少打满 90 分钟的球员都计算在内。
作为一个整体球队**,切尔西、热刺和伯恩茅斯**的表现低于上赛季的预期,平均而言,他们的球员价格似乎过高。曼城、利物浦、莱斯特、埃弗顿、曼联按照目前的表现,到目前为止价格似乎还不错。伯恩利和狼队的平均投资回报率也很高,因为他们的球员成本更低。
最终想法:
第一次我们花了 8 分进行了 3 次转会,所以很好奇他们是否会在接下来的 2-3 周内得到回报。让我们的手指交叉为阿德里安更多的不失球和凯文·德布鲁因的许多行动。希望有一个进球或者助攻。
一如既往——感谢您的阅读,祝您周末好运!
EPL 幻想 GW5 重述和 GW6 算法精选
我们的钱球方法的幻想 EPL(队 _id: 2057677)
如果这是你第一次登陆我的幻想 EPL 博客,你可能想先看看第一部分、第二部分、第三部分、第四部分和第五部分,以熟悉我们的整体方法和我们随着时间的推移所做的改进。
因为我已经在以前的博客中详细解释了我们的整体方法和算法背后的逻辑,所以我现在将保持这篇博客更加简洁,只提供统计数据和快速评论。
GW5 团队绩效总结和总体统计
我们经历了有史以来最糟糕的一周,这让我们很受伤,因为我们决定在转会上花 8 分来得到更多失望的曼城球员。我们也摆脱了得分的拉什福德,得到了阿德里安,后者没有像我们预期的那样零失球。由于所有这些不幸的决定,我们得到了 39 分。
每 90 分钟点数统计
我们将利用这一统计数据在我们的最终团队中补充一些目前投资回报率较低的球员,但他们正在开始恢复状态,并在过去几周内接近 90 分钟的比赛。
GK 前 10 名 pts_per_90min
前 10 名 DF pts_per_90min
前 10 名 MD pts _ per _ 90 分钟
每 90 分钟前 10 名
GW4 整体统计数据为我们的 GW5 选择提供信息
首先,我们将查看 FDR_score(接下来 3 个对手的难度),以决定我们可能要从哪些球队中排除挑选球员:
由于在接下来的三场比赛中对手的平均实力很高,我们的算法将不会从以下球队中选择球员— 莱斯特,布莱顿和南安普顿。接下来三场比赛赛程相对轻松的好球队是:曼城马刺、诺维奇和伯恩利。
接下来,我们将按照职位来看一下投资回报率前 10 的玩家是谁:
投资回报率排名前十的守门员
按投资回报率排名的前 10 名防御者
投资回报率排名前十的中场球员
投资回报率排名前 10 的前锋
GW6 算法选择
提醒一下,我们的算法会考虑调整后的每队阵型的预算,并尝试最大化 11 名主力球员的每个位置的支出,然后让你的替补获得良好的 ROI 值。本周我们将打3–4–3阵型。根据当前的投资回报率得分,过滤掉任何在接下来的三场比赛中与 AVG 对手有困难(FDR ≥ 3.56)的球队,并从可用选择列表中删除受伤的球员,我们的算法选择了以下球队作为当前花费全部 1 亿美元预算的最佳球队:
本周,我们试图修改选择逻辑,将 pts_per_90min 统计中的一些顶级玩家纳入顶级 ROI 玩家组合中
如果你仍然有你的外卡,并且你有一群受伤的球员,这可能是一个很好的投资组合,鉴于城市,诺维奇和马刺预计在接下来的 3 场比赛中会有一个相对容易的赛程。我们可能会在下周结束使用我们的通配符,这取决于下周的伤病和整体表现,所以请继续关注下一篇博客。
鉴于我们上周花费了太多积分,无法承受太多新的转会,以下是我们下周的团队:
我们做的唯一一次转会是用坎特威尔换来坎特,因为坎特没有保险,坎特威尔的价格开始攀升,我们想在价格超过 500 万英镑之前投资。
团队统计
查看最佳/最差防守和进攻可以有几种不同的用法——例如,如果最佳进攻队与最差防守队比赛,你可能想让你的进攻中场或前锋担任队长。此外,当你查看这些位置的算法建议时,你可能想优先考虑防守最好的球队的 DF 和 GK。
最佳五种防御
最差的 5 种防御
最佳五大犯罪
最严重的 5 种犯罪
累积团队投资回报统计
下面你可以看到球队,按累积玩家投资回报率排序。请注意,活跃玩家是指已经玩了总可能游戏时间的至少 25% 的任何玩家。例如,总可能分钟数=周数* 90 分钟= 5* 90 = 450。所以,我们把所有在该队上场时间至少达到 450/4 = 112.5 分钟的球员都算在内。
一些有趣的名字开始出现在拥有不错 avg_player_ROI 的球队中——曼联、莱斯特、阿斯顿维拉、西汉姆、热刺和伯恩利与领头羊——利物浦和曼城一起进入前 8。在表现不佳的一方,我们有很多价格过高的球员——沃特福德,切尔西,水晶宫,伯恩茅斯和纽卡斯尔。
最终想法:
我们很想使用我们的通配符,选择文章开头分享的最佳球队,但我们决定等待,因为欧洲比赛和没有足够的时间来澄清哪些球员有更严重的伤病。此外,教练倾向于让关键球员在欧洲比赛中休息,所以我们不认为这是一个外卡的好时机。
一如既往——感谢您的阅读,祝您周末好运!
EPL 幻想 GW7 重述和 GW8 算法精选
我们的钱球方法的幻想 EPL(队 _id: 2057677)
如果这是你第一次登陆我的幻想 EPL 博客,你可能想先看看第一部分、第二部分、第三部分、第四部分和第五部分,以熟悉我们的整体方法和我们随着时间的推移所做的改进。
GW7 团队绩效总结和总体统计
你可能还记得,前一周我们的队长 KDB 真的收获了金牌,但本周我们的塔米·亚伯拉罕却收获了臭鸡蛋:(更令人沮丧的是,亚伯拉罕击中了门柱,并有三次一对一的机会,但却没有转化其中的一次,所以从技术上来说,我们的选择是好的,但球员就是没有兑现。这再次证明了选择一个合适的队长是多么重要。你可以在下面看到我们的分数— 只有 41 分,低于平均水平所以对我们来说这不是一个好的一周。
每 90 分钟点数统计
我们将利用这一统计数据在我们的最终团队中补充一些目前投资回报率较低的球员,但他们正在开始恢复状态,并在过去几周内接近 90 分钟的比赛。
Creswell,Yarmolenko,Chambers,Son 和丹尼·英斯是一些有趣的名字,如果我们假设他们将继续每场至少打 60 分钟,他们可能值得投资。
以下是 pts_per_90min 统计中每个位置排名前 10 的球员:
每 90 分钟 GK 前 10 名
90 分钟内前 10 名 DF 点数
90 分钟内前 10 名医学博士
每 90 分钟前 10 名
GW7 整体统计数据为我们的 GW8 选择提供信息
首先,我们将查看 FDR_score(接下来 3 个对手的难度),以决定我们可能要从哪些球队中排除挑选球员:
看起来很多球队都面临着艰难的赛程——曼联、水晶宫、利物浦、莱斯特、纽卡斯尔和狼队,所以我的算法在本周的选择非常有限。赛程比较轻松的球队有热刺、阿森纳、埃弗顿、曼城和西汉姆联(T21)。
接下来,我们将按职位看一下前 10 名 ROI 玩家是谁:
投资回报率排名前十的守门员
按投资回报率排名的前 10 名防御者
投资回报率排名前十的中场球员
投资回报率排名前十的前锋
GW8 算法精选
提醒一下,我们的算法会考虑到调整后的每支队伍的预算,并试图最大化 11 名主力队员在每个位置的花费,然后让你的替补获得良好的 ROI 值。本周我们将打 3–4–3 阵型。根据当前的投资回报率得分,过滤掉任何在接下来的三场比赛中与 AVG 对手有困难(FDR ≥ 3.56)的球队,并从可用选择列表中删除受伤的球员,我们的算法选择了以下球队作为当前花费全部 1 亿美元预算的最佳球队:
我们最终**决定使用我们的通配符!**考虑到最近的伤病,我们没有合适的球员配置来应对阿森纳、曼城和西汉姆联应该有的轻松赛程,以及利物浦接下来三场比赛有些困难的赛程,我们选择了它。
下面是我们的团队基于 ROI 统计和 pts_per_90min 统计得出的未来一周的数据:
你可以看到我们的一些选择与 Algo 的建议不同——在法比安斯基受伤后,我们得到了罗伯特,因为西汉姆有一个更轻松的赛程,并且在 7 大防守名单中。我们也选择了梅特兰-奈尔斯和奥巴姆扬-T21,因为阿森纳的赛程应该很轻松,但是我们对这个选择有点紧张,因为我们都知道阿森纳是多么不可预测。由于通配符整个星期都是活跃的,我们可能会在最后一刻改变主意,但现在这是我们的团队。
团队统计
看看最佳/最差防守和进攻可以有几种不同的用法——例如,如果一个最佳进攻队与一个最差防守队比赛,你可能想让你的进攻中场或前锋担任队长。此外,当你查看这些位置的算法建议时,你可能想优先考虑防守最好的球队的 DF 和 GK。
最佳 7 项防御
最差的 7 种防御
最佳 7 项犯罪
最糟糕的 7 项罪行
累积团队投资回报统计
下面你可以看到球队,按累积玩家投资回报率排序。请注意,活跃玩家是任何已经玩了总可能游戏时间的至少 25% 的玩家。例如,总可能分钟数=周数* 90 分钟= 7* 90 = 630。所以,我们把所有在该队至少打了 630/4 = 157.5 分钟的球员都算在内。
就的 avg_pts_per_player 而言,利物浦终于取代曼城成为第一球队,这是因为克洛普使用的轮换比瓜迪奥拉少得多——正如你所见,克洛普使用大约 12 名球员的核心,而瓜迪奥拉给了 16 名球员很多上场时间。其他球队似乎使用更少的轮换,从而给你更多的长期投资回报,是莱斯特,西汉姆,伯恩利,狼队,谢菲联曼联和马刺。在表现不佳的一方,我们有许多高价球员和球队轮换——沃特福德,切尔西,纽卡斯尔,布莱顿,水晶宫,诺维奇,埃弗顿,南安普顿和阿森纳。
最终想法:
我们正在开发一个令人兴奋的新功能,它将扫描世界上前 100 名玩家的球队,并将我们的算法预测与前 100 名 EPL 幻想用户最常挑选的球员进行比较。我们将尝试将这一点纳入决策过程,让我们的算法优先考虑在前 100 名球队中出现频率最高的球员。所以,请继续关注几周后即将发布的功能。
一如既往——感谢您的阅读,祝您周末好运!
EPL 幻想 GW6 重述和 GW7 算法精选
我们的钱球方法的幻想 EPL(队 _id: 2057677)
如果这是你第一次登陆我的幻想 EPL 博客,你可能想先看看第一部分、第二部分、第三部分、第四部分和第五部分,以熟悉我们的整体方法和我们随着时间的推移所做的改进。
因为我已经在以前的博客中详细解释了我们的整体方法和算法背后的逻辑,所以我现在将保持这篇博客更加简洁,只提供统计数据和快速评论。
GW6 团队绩效总结和总体统计
我们上周在只有 10 名球员的情况下做得相对较好,主要是因为我们真的在我们的队长 KDB 身上获得了金牌,这只是证明了从长远来看运气是这场比赛中的一个巨大因素,因为选择正确的队长真的可以决定你一周的成败。我们在用坎特换坎特威尔的问题上损失了很多分数,但是 EPL 的数据显示坎特受伤了,这误导了我们的算法:(所以受伤数据的准确性问题是另一个问题,从长远来看,这是一个很大的因素。
每 90 分钟点数统计
我们将利用这一统计数据在我们的最终团队中补充一些目前投资回报率较低的球员,但他们正在开始恢复状态,并在过去几周内接近 90 分钟的比赛。
我们可以看到一些有趣的名字出现在这里,例如:卡勒姆·钱伯斯、塞尔日·阿吉耶、阿隆·克雷斯维尔、尼古拉斯·奥塔门迪、安德烈·亚莫伦科、卢卡斯·托雷拉、神奇的纳坎巴等等。这些球员在过去的几场比赛中获得了更多的比赛时间和相当多的分数,可能值得投资。
以下是 pts_per_90min 统计中每个位置排名前 10 的球员:
每 90 分钟 GK 10 大得分
90 分钟内前 10 名 DF 点数
90 分钟内前 10 名医学博士
每 90 分钟前 10 名
GW6 整体统计数据为我们的 GW7 选择提供信息
首先,我们将查看 FDR_score(接下来 3 个对手的难度),以决定我们可能要从哪些球队中排除挑选球员:
看起来很多球队都有一个艰难的赛程——T2、曼联、水晶宫、埃弗顿、莱切斯特、纽卡、谢菲尔德和南安普顿——所以我的算法在本周的选择非常有限。赛程比较轻松的球队有马刺、诺维奇、切尔西、伯恩利和维拉。
接下来,我们将按职位来看一下投资回报率前 10 的玩家是谁:
投资回报率排名前十的守门员
投资回报率排名前 10 的防御者
投资回报率排名前十的中场球员
投资回报率排名前十的前锋
GW6 算法选择
提醒一下,我们的算法会考虑调整后的每队阵容预算,并尝试最大化 11 名主力球员的每个位置的支出,然后让你的替补获得良好的 ROI 值。本周我们将打 3–4–3 阵型。根据当前的投资回报率得分,过滤掉任何在接下来的三场比赛中与 AVG 对手有困难(FDR ≥ 3.56)的球队,并从可用选择列表中删除受伤的球员,我们的算法选择了以下球队作为当前花费全部 1 亿美元预算的最佳球队:
本周,我们试图修改选择逻辑,将 pts_per_90min 统计中的一些顶级玩家纳入顶级 ROI 玩家组合中,以增加期望值
我们决定不使用我们的通配符,因为我们觉得我们特别为这个星期有一个体面的配置,加上幻想数据团队总是在更新伤病方面很慢,所以我们期待一些最后一分钟的伤病消息可能会从周中的杯赛中出来,我们不想冒这个险。不过,我们正在考虑下周使用我们的通配符,所以请继续关注。
下面是我们下周的阵容,只有一名球员转会——迪奥普换切斯特防守。队长有几个不错的选择——亚伯拉罕、希门尼斯、萨拉赫、TAA,所以这是一个艰难的选择,但我们选择了塔米·亚伯拉罕,因为切尔西正在主场迎战布莱顿。
团队统计
查看最佳/最差防守和进攻可以有几种不同的用法——例如,如果一个最佳进攻队与一个最差防守队比赛,你可能想让你的进攻中场或前锋担任队长。此外,当你查看这些位置的算法建议时,你可能想优先考虑防守最好的球队的 DF 和 GK。
最佳 7 项防御
最差的 7 种防御
最佳 7 项犯罪
最糟糕的 7 项罪行
累积团队投资回报统计
下面你可以看到球队,按累积玩家投资回报率排序。请注意,活跃玩家是指已经玩了总可能游戏时间的至少 25% 的任何玩家。例如,总可能分钟数=周数* 90 分钟= 6* 90 = 540。因此,我们把所有在该队上场时间至少达到 450/4 = 135 分钟的球员都算作现役球员。
一些有趣的名字开始出现在拥有不错 avg_player_ROI 的球队中——伯恩利、莱斯特、西汉姆、马刺、谢菲尔德联队和维拉与领头羊——利物浦和曼城一起进入前 8。在表现不佳的一方,我们有很多价格过高的球员——沃特福德,切尔西,水晶宫,诺维奇,埃弗顿,南安普顿,狼队和阿森纳。
最终想法:
我现在对世界上的顶级球员做了一些挖掘,从长远来看,选择一个合适的队长是多么重要,这一点变得非常明显。不可思议的是,他们几乎总是选择得分最高的球员作为队长。这给了我一个想法,我应该开始考虑写一个队长推荐系统,看看我是否能提出一些可行的东西。如果你对我训练我的模型应该看的统计有任何想法/建议,请给我发消息。
一如既往——感谢您的阅读,祝您周末好运!
EPL 幻想 GW8 重述和 GW9 算法精选
我们的钱球方法的幻想 EPL(队 _id: 2057677)
如果这是你第一次登陆我的幻想 EPL 博客,你可能想先看看第一部分、第二部分、第三部分、第四部分和第五部分,以熟悉我们的整体方法和我们随着时间的推移所做的改进。我在这个项目中的犯罪搭档是 Andrew Sproul,他和我一样对数据科学、人工智能和幻想 EPL 充满热情。
这个星期有什么新闻?
我们很高兴地宣布,本周我们整合了三项新功能:
- EPL 100 强选手最佳混编团队
- 调整后的 FDR(夹具难度等级)
- 更准确的伤情更新
下面是每个新功能的简要介绍,以及我们的新算法产生的一些见解和发现的可视化。
100 强 EPL 选手最佳混编团队
我们使用 Selenium 编写了一个 web scraper,它扫描世界上排名前 100 位的球员的球队,并返回他们每周挑选的球队阵容以及他们选择的完整球队。长期的想法是每周跟踪他们的选择,并找出第 8 周前 100 名球员中的哪些人也将在赛季结束时进入前 100 名。这将帮助我们区分真正一致的幻想用户,并允许我们对他们的每周选择进行更完整的分析,帮助他们在整个赛季保持强劲的表现。
下面你可以看到目前前 100 名 Fantasy 用户对每个位置选择最多的玩家:
最佳守门员
大多数选定的捍卫者
最佳中场球员
入选最多的前锋
我们使用这些数据和当前的球员价格来创建下面的球队,这是由前 100 名中最受欢迎的球员组成的:
前 100 名 Fantasy 用户选择最多的团队
下面你可以看到上周顶尖选手挑选的阵型。似乎大多数顶级球员选择了3–4–3 阵型,很可能试图优化他们的进攻球员所获得的总积分,这些球员通常有更高的机会获得助攻、进球和总积分。
调整后的 FDR(夹具难度等级)
我们的第二个新功能的灵感来自于这样一个事实,即我们现在有足够的来自过去八个游戏周的数据,可以开始调整 EPL 幻想数据团队在赛季初根据他们自己对历史团队表现的计算提供的原始团队实力评级。下面是原始团队实力指数的样子:
正如你所看到的,这看起来有点太死板,而且在大部分中间分数中没有足够的细微差别。我们的目标是根据当前赛季的团队表现构建我们自己的团队实力指数,然后将其与上面的原始 FDR 指数相结合,这将为我们提供最终的动态调整团队实力分数,该分数将根据团队在整个赛季中每周的表现随时间而变化。
Team_Strength_Index =(总积分+进球数+进球数)
为了使数据正常化,我们使用了每个指标的百分位数,因此数据分布保持在 0-100 之间的标准化范围内。例如,利物浦现在有24 分,在这个指标的第 100 百分位,他们也有最好的防守,GA = 6,第二好的进攻,GF = 14,分别在第 100 和第 95 百分位。所以,他们当前赛季的总表现/实力得分= 100+ 100 + 95 = 295。您可以在下面看到所有其他团队的分数:
这个动态的分数允许我们在两端发现更多的异常值,并区分真正好的团队和真正差的团队。如你所见,沃特福德、诺维奇、埃弗顿、南安普顿和纽卡斯尔与其他球队相比都表现不佳。曼联、狼队和伯恩茅斯的平均得分为 152 分,只有五支球队超过了第 75 百分位——利物浦、曼城、阿森纳、莱斯特和伯恩利,切尔西和水晶宫紧随其后。
接下来我们要做的是应用一个最小最大值定标器,取上面这个分布的 z 分数,对它们求平方,得到一个类似的数据分布,但是在一定的范围内,我们可以将它与原始 FDR 分数混合:
最终的混合分数是我们的动态团队力量 z 分数和原始刚性 FDR 分数的 AVG(参见下面的新团队排名):
正如你所看到的,这看起来比最初的 FDR 表公平得多,最初的 FDR 表将团队放在严格的整数分数桶中,分数范围从 2-5,不允许任何细微差别。今后,我们将使用这种调整后的 _FDR 分布来通知我们的算法选择。话虽如此,让我们看看罗斯福本周的数据:
如你所见维拉、水晶宫、南安普顿、曼联和沃特福德在接下来的三场比赛中似乎有更难的特点,所以我们的算法会避免从这些球队中挑选球员。切尔西、伯恩茅斯、西汉姆、曼城、阿森纳和莱斯特似乎赛程相对轻松,所以从这些球队中挑选球员可能是一项不错的投资。
更准确的伤势更新
我们本周增加的最后一个新功能是抓取一个比幻想网站更新 EPL 受伤新闻更频繁和更准确的网站,所以我们可以将它纳入我们的算法,避免挑选没有在幻想网站上更新的受伤球员。我们从以下网站获取受伤数据:
西汉姆联队:铁锤帮确认罗伯特·斯诺德格拉斯退出了苏格兰 2020 年欧洲杯阵容…
www.premierinjuries.com](https://www.premierinjuries.com/)
至此,我们结束了我们的功能更新部分,并继续我们每周发布的幻想 EPL 博客的核心格式。
GW8 团队绩效总结和总体统计
嗯…GW8 是艰难的,我相信这也适用于我们的大多数读者:)大多数大球队和昂贵的球员失望,这导致了所有幻想用户的 AVG 总得分为每个幻想队 38 分,这是非常低的。我们实际上比 AVG 做得更好,有44 分,所以我们并不太沮丧,但是我们觉得我们的外卡的时机没有发挥作用并且再次**我们没有选择一个好的队长,**尽管如果奥巴在第 95 分钟进球的话事情会好一点。
GW8 整体统计数据为我们的 GW9 选秀权提供信息
让我们通过 ROI 和 pts_per_90min 统计数据来看看顶级球员:
投资回报率排名前十的守门员
90 分钟内排名前 10 的守门员
按投资回报率排名的前 10 名防御者
pts _ per _ 90min 排名前 10 的防守队员
投资回报率排名前十的中场球员
90 分钟 pts _ per _ 强中场
投资回报率排名前 10 的前锋
射手前 10 名由 pts_per_90min
GW9 算法选择
提醒一下,我们的算法会考虑调整后的每队阵型的预算,并尝试最大化 11 名主力球员的每个位置的支出,然后让你的替补获得良好的 ROI 值。大多数星期我们一直在玩3–4–3阵型,现在我们知道世界排名前 100 的球员大多选择相同的阵型,我们会更倾向于继续使用它。根据当前的投资回报率得分,在接下来的三场比赛中过滤掉任何具有 AVG 对手难度(FDR ≥ 3.21)的球队,并从可用选择列表中删除受伤的球员,我们的算法选择了以下球队作为当前花费全部 1 亿美元预算的最佳球队:
正如你所看到的,甚至还有 0.7%的预算可以使用,并为一些关键职位尝试不同的选择。由于我们上次使用了通配符,我们无法选择上面的完整配置。相反,我们进行了两次转移:
Pukki — OUT — Vardy — IN
英镑—出局— KDB —入局
鉴于莱切斯特相对轻松的赛程,我们的替补是由我们想要得到 Vardy 的愿望决定的,为了做到这一点,我们必须卖掉 Sterling,这很好,因为我们认为他的价格有点过高,如果他从伤病中恢复并持续比赛,KDB 比他更有价值,这是最新的伤病更新所说的。此外,斯特林本周只为英格兰踢了两场比赛,所以他很可能不会在本周末为曼城踢满 90 分钟。
对于队长,我们在塔米·亚伯拉罕和瓦迪之间犹豫了一下,但选择了塔米,因为到目前为止纽卡在最差的 5 个防守名单中,而伯恩利在最好的 5 个防守名单中,所以我们期待切尔西比莱斯特进更多的球。我们对希顿和克雷斯韦尔的受伤感到紧张,梅特兰-奈尔斯不会上场,但我们会看到…
团队统计
查看最佳/最差防守和进攻可以有几种不同的用法——例如,如果最佳进攻队与最差防守队比赛,你可能想让你的进攻中场或前锋担任队长。此外,当你查看这些位置的算法建议时,你可能想优先考虑防守最好的球队的 DF 和 GK。
最佳 7 项防御
最差的 7 种防御
最佳 7 项犯罪
最糟糕的 7 项罪行
累积团队投资回报统计
下面你可以看到球队,按累积玩家投资回报率排序。请注意,活跃玩家是指已经玩了总可能游戏时间的至少 25% 的任何玩家。例如,总可能分钟数=周数* 90 分钟= 8* 90 = 720。所以,我们把所有至少打了 720/4 =【T20 =】180 分钟的球员都算作该队现役球员。
统计数据现在开始很好地融合,我们可以开始注意到一些有用的见解。例如由于曼城的球员轮换率更高,他们的 avg_player_roi stat 显著下降,因为到目前为止,他们在比赛期间至少轮换了 16 名活跃球员,而其他大多数球队的活跃球员为 13-14 名。切尔西、热刺、曼联、埃弗顿和伯恩茅斯由于更高的球员轮换和许多高价球员,整体表现仍然不佳。
在 avg_pts_per_player 和 avg_player_ROI 统计数据的上半部分,我们可以发现伯恩利、莱斯特、西汉姆、狼队、谢菲尔德联队和阿斯顿维拉是使用更紧密的 13-14 岁现役球员核心的球队,这些球员也表现出色,价格偏低,这使得从这些球队购买球员成为一项良好的长期投资。当然,利物浦和曼城位居前两名,但是他们的大部分球员都相当昂贵,所以人们必须明智地从这两支球队购买球员,并寻求长期价值。
最终想法:
我们计划的下一个令人兴奋的功能是在即将到来的比赛中纳入来自体育博彩者的系数,因为大多数主要博彩公司都有数据科学家和分析师团队,他们使用大量数据来估计最佳系数,所以我们认为我们可以借鉴他们的工作,并使用这些系数以某种方式通知我们的算法选择,或者至少进一步调整我们的 FDR 分数。
一如既往——感谢您的阅读,祝您周末好运!
EPL 幻想 GW9 重述和 GW10 算法精选
我们的钱球方法的幻想 EPL(队 _id: 2057677)
如果这是你第一次登陆我的幻想 EPL 博客,你可能想先看看第一部分、第二部分、第三部分、第五部分和第九部分,以熟悉我们的整体方法和我们随着时间的推移所做的改进。我在这个项目中的犯罪搭档是 Andrew Sproul,他和我一样对数据科学、人工智能和幻想 EPL 充满热情。
这个星期有什么新闻?
在受到幻想之神又一周的惩罚后,我们决定引入一个新的安慰功能,主要是为了让像我和安德鲁这样的人对他们糟糕的 GW 统计数据感觉良好:)
十大奇幻用户统计——每周我们都会绘制出世界前 10 名玩家在那一周的表现,包括前 10 名玩家的 AVG、最小和最大得分。这可以用来衡量我们自己的表现,所以如果我们度过了糟糕的一周,但我们的分数仍然接近前 10 名,那么我们至少可以自我感觉更好:)请享受下面的第一份“安慰食物”……(你可以感谢我们的这一善举:P 通过给文章一些掌声和分享,它可以帮助将博客推向趋势部分,这有助于它获得更多的观众。提前感谢!)
GW9 世界排名前十的选手
因此,如果你本周得分接近 44 分,你实际上可以自我感觉良好,因为这是世界前 10 名球员的 AVG 得分。而如果你和我们一样得了 32 分:(,要知道 Top10 里还有一个球员得分比你少——25 分!
现在我们让你感觉温暖和模糊,是时候面对另一个艰难的 GW9 的音乐,看看所有其他有趣的数据。
EPL 100 强球员最佳混合团队
当我们谈论世界前 100 名球员的话题时,让我们看看谁是他们球队中按位置选择的前 10 名球员,以及 GW9 最喜欢的球队阵型。
前 100 名最佳守门员
前 100 名中最受欢迎的捍卫者
前 100 名最佳中场球员
前 100 名中入选最多的前锋
我们使用这些数据和当前的球员价格来创建下面的球队,这是由前 100 名中最受欢迎的球员组成的:
这是一个看起来不错的团队,银行里还有 210 万英镑可以用来玩和测试不同的配置。
前 100 名 Fantasy 用户选择最多的团队
下面你可以看到上周顶尖选手挑选的阵型。似乎大多数顶级球员选择了3–4–3 阵型,很可能试图优化他们的进攻球员所获得的总积分,这些球员通常有更高的机会获得助攻、进球和总积分。
GW9 团队绩效总结和总体统计
我们认为这不会比去年的 GW 更糟糕,但显然——它会……正如你在下面看到的,我们最终只得到 32 分——低于 AVG 本周的 37 分。我们实际上可以做得更好,但是5 名防守队员中有 4 名神秘受伤,所以我们最终只和 1 名防守队员,以及总共 9 名队员一起比赛。鉴于这一点,以及我们选择了一个糟糕的队长(再次!?),我们觉得自己做得还行。至少我们对 Vardy 的投资现在有了回报:)
GW8 整体统计数据为我们的 GW9 选秀权提供信息
下面让我们从调整后的未来三周的对手难度等级(FDR)开始:
看起来本周我们有很多球队的赛程都很艰难——维拉、南安普顿、利物浦、水晶宫和热刺。我们的算法是这样写的,它不会在本周推荐从这些球队购买球员。赛程相对轻松的球队(如果 EPL 有这种东西的话:P)有**伯恩茅斯、曼联、诺维奇、切尔西和西汉姆、**所以从这些球队得到球员可以在接下来的三场 2-3 比赛中得到回报。
最新伤情更新美国东部时间 10 月 24 日上午 11 点
以下数据来自一个独立网站,该网站更新最新受伤情况的频率比 Fantasy 网站高得多:
接下来,让我们通过 ROI 和 pts_per_90min 统计数据来看看顶级球员:
投资回报率排名前十的门将
90 分钟内排名前 10 的守门员
按投资回报率排名的前 10 名防守队员
由 pts_per_90min 统计的前 10 名防守队员
投资回报率排名前十的中场球员
90 分钟 pts _ per _ 强中场
投资回报率排名前 10 的前锋
投资回报率排名前 10 的前锋 pts_per_90min
GW9 算法选择
提醒一下,我们的算法会考虑调整后的每队阵型的预算,并尝试最大化 11 名主力球员的每个位置的支出,然后让你的替补获得良好的 ROI 值。大多数星期我们一直在玩3–4–3阵型,现在我们知道世界排名前 100 的球员大多选择相同的阵型,我们会更倾向于继续使用它。根据当前的投资回报率得分,在接下来的三场比赛中过滤掉任何具有 AVG 对手难度(FDR ≥ 3.15)的球队,并从可用选择列表中删除受伤的球员,我们的算法选择了以下球队作为当前花费全部 1 亿美元预算的最佳球队:
我们在那里插上了马内,尽管利物浦的 FDR 本周很高,因为我们有太多的剩余预算,不想留下太多的额外资金。如果你好奇的话,该算法最初的选择是阿达马·特劳雷的马内,剩余约 600 万美元。
就我们团队而言,考虑到本周晚些时候的欧洲比赛,我们决定等到周五再决定制造什么样的替补。上周我们已经因为 3-4 个意外的伤病焦头烂额,所以我们希望本周至少有 11 名健康的球员,而不是像上周那样只有 9 名。
团队统计
看看最佳/最差防守和进攻可以有几种不同的用法——例如,如果一个最佳进攻队与一个最差防守队比赛,你可能想让你的进攻中场或前锋担任队长。此外,当你查看这些位置的算法建议时,你可能想优先考虑防守最好的球队的 DF 和 GK。
最佳 7 项防御
最差的 7 种防御
最佳 7 项犯罪
最糟糕的 7 项罪行
累积团队投资回报统计
下面你可以看到球队,按累积玩家投资回报率排序。请注意,活跃玩家是指已经玩了总可能游戏时间的至少 25% 的任何玩家。例如,总可能分钟数=周数* 90 分钟= 9* 90 = 810。所以,我们把所有至少打了 810/4 = 202.5 分钟的球员都算作是该队的现役球员。
列斯特、谢菲尔德联队、狼队、伯恩利队、西汉姆联和维拉队的排名开始变得有趣起来。正如你所看到的,所有这些球队都只使用13-14 名核心球员,并且到目前为止表现超出预期,这使得从这些球队获得球员在长期预期 ROI 方面是一项很好的投资。
下半区有一些常见的嫌疑人,但也有一些球队,如热刺、埃弗顿、曼联、阿森纳和切尔西,主要是因为球员轮换率较高对 AVG 为 15-16,以及球队表现不佳,有许多价格过高的球员,这似乎不是一个好的投资。
最终想法:
今天我们将以“最后的祈祷”来结束,而不是“最后的想法”。我们向幻想之神祈祷,希望他们本周能给我们一些怜悯,保佑我们有一个由 11 名健康球员组成的完整阵容,这样我们至少可以最大化我们的期望,结束我们的糟糕表现。另外,如果他们本周祝福我们的队长有额外的速度、力量和投篮准确性,我们也不会不高兴:)
一如既往——感谢您的阅读,祝您周末好运!
EPL 幻想是一个星期了,我们的算法已经准备好了!
(团队编号:2057677)
我们击败 EPL 幻想游戏的摇钱树方法
这是我们去年文章的延续,我和我的朋友 Andrew Sproul 写了一些 Python 代码来创建一个球员推荐系统,用于每周根据球员成本、上场时间和每花一美元的总点数(ROI)来选择最佳的 EPL 梦幻队。
您可以在这里阅读完整的文章,其中详细解释了我们的分析和代码逻辑:
这个新博客将尝试每周跟踪我们球队的进展,并在每周转会窗口关闭前发布球队的建议。下面你可以看到我们的算法根据上赛季每个球员的赛季末总 ROI 统计数据为 EPL 2019-2020 赛季的开始推荐的球队。
游戏周 1 最佳投资回报率团队:
GK:
[(‘乔丹·皮克福德’,5.5),(‘卢卡什·法比安斯基’,5.0)]
DF:
[(‘维吉尔范迪克’,6.5),(‘安德鲁·罗伯特森’,7.0),(‘路易斯·切廷莫雷拉马里尼奥’,6.0),(‘埃梅里克·拉波尔特’,6.5),(‘塞萨尔·阿兹皮利奎塔’,6.0)
MD:【T8][(‘穆罕默德萨拉赫’,12.5),(‘拉希姆斯特林’,12.0),(‘瑞安弗雷泽’,7.5),('卢卡
注意:我们需要修复代码,因为正如你在上面看到的,算法只选择了 14 个球员,而不是 15 个,但我们将在未来几天内尝试修复这个问题。
我在 EPL 幻想中调整后的团队名称——“算法”
因为我们的推荐系统目前没有考虑每支球队面对的对手,所以我对算法推荐的实际球队做了一些定制调整。我仍然选择上个赛季投资回报率超过 20%的球员,而且只比最初推荐的球员低几个百分点。以下是我为游戏周 1 选择的配置:
最终注释:
正如你们大多数以前玩过 EPL 幻想游戏的人所知道的那样,运气仍然是游戏中的一个主要因素,因为伤病和选择哪些球员留在替补席上以及谁是你选择的队长,所以仍然有很多人工决策和随机噪音涉及到赛季结束时最终赢家的最终结果。也就是说,我们仍然很兴奋地测试我们能比普通玩家做得更好,只要遵循简单的钱球方法,并试图在赛季结束前优化总预算以获得最大投资回报。
我们还将在整个赛季中努力改进代码,使其更加动态,我将尽我所能在这里发布更新。
同时,祝所有玩家好运,如果有任何问题,请随时联系我们!
更新:
下面你可以看到我们团队在游戏周 1 中的表现:
链接到新博客,其中包含更新的算法规则和游戏周 2 的最佳 ROI 团队建议,如下所示:
Erlang/Elixir 解决方案:为质量而奋斗
今天,我们将讨论日志、量化指标以及如何观察它们,以提高团队反应速度,并在发生事故时减少系统等待时间。
Erlang/OTP 作为开发分布式系统的框架和思想,为我们提供了规范的开发方法、合适的工具和标准组件的实现。让我们假设我们已经开发了 OTP 的潜力,并且已经从原型一直到生产。我们的 Erlang 项目在生产服务器上感觉非常好。代码库在不断发展,新的需求和功能一起出现,新的人加入团队。一切都很好吗?然而,有时可能会出错,任何技术问题加上人为因素都会导致崩溃。
由于您无法涵盖所有基础并预见所有潜在的故障和问题危险,因此您必须通过适当的管理和软件解决方案来减少系统等待时间。
任何信息系统都存在不同性质的故障风险,例如:
- 硬件和电源故障
- 网络故障:配置错误以及固件损坏或过期
- 逻辑错误:从算法编码问题到出现在子系统和系统边界的架构相关问题
- 安全问题以及网络攻击和黑客攻击,包括内部伪造
首先,我们来划分一下责任。基础设施监测将涉及网络软件和数据传输网络。这种监测可以在 zabbix 的帮助下进行。关于它的设置已经写了很多,我们不打算重复。
从开发人员的角度来看,访问和质量问题与错误和性能问题的早期检测以及对它们的快速响应密切相关。为此,您需要特定的方法和评估工具。好吧,让我们试着找出量化指标。通过在项目开发和运行的不同阶段对它们进行分析,我们可以显著地提高其质量。
构建系统
让我们再次回顾一下,工程方法在测试和开发软件中是多么重要。Erlang/OTP 提供了两种测试框架:eunit 和 common test。
我们可以使用成功的或有问题的测试的数量、它们的运行时间和测试覆盖率作为对代码库及其动态的主要评估的度量。这两个框架都使我们能够在 Junit 中保存测试结果。例如,对于 rebar3 和 ct,您需要将以下内容添加到 rebar.config 中:
{cover_enabled,true}。
{cover_export_enabled,true}。
{ct_opts,[
{ct_hooks,[{cth_surefire,[{path," report . XML " }]} }
]}。
成功和失败测试的数量使得建立趋势图成为可能。
通过查看它,您可以评估团队的表现并测试回归。例如,你可以在 Jenkins 中使用测试结果分析器插件得到这样的图形。度量的使用允许您注意到并防止中断或减慢项目测试,并在发布之前修复问题
应用指标
除了操作系统指标,应用程序指标也应包括在监控中。它可能是每秒页面浏览量、支付次数和其他重要指标。
在我自己的项目中,我使用代码模板 a p p l i c a t i o n 。 {application}。 application。{metrics_type}。${name} 用于命名指标。这种命名有助于获得如下度量列表
messaging . systime _ subs . messages . delivered = 1654
messaging . systime _ subs . messages . proxied = 0
messaging . systime _ subs . messages . published = 1655
messaging . systime _ subs . messages . skipped = 3
我们拥有的指标越多,就越容易了解一个复杂系统中正在发生的事情。
Erlang 虚拟机指标
应该特别注意 Erlang 虚拟机监控。“让它崩溃”的思想真是太棒了,正确使用 OTP 肯定会帮助您恢复应用程序和进程。但是别忘了 Erlang VM 本身:虽然很难让它崩溃,但还是有可能的。所有潜在的情况都是基于资源耗尽。让我们列出最受欢迎的几个:
原子表溢出。
原子作为标识符,其主要目的是提高代码的可读性。一旦创建,它们将永远留在 Erlang VM 内存中,因为它们不会被垃圾收集器清除掉。这是为什么呢?垃圾收集器在每个进程中处理这些进程数据。反过来,原子可能分布在多个进程的数据结构中。默认情况下可以创建 1,048,576 个原子。在关于杀死 Erlang VM 的文章中,您可能会遇到类似的情况:
用[list _ to _ atom(integer _ to _ list(I))| | I
as an illustration of the above-mentioned effect. This problem looks quite artificial and unlikely to happen in real systems. There have been cases, though… For instance, in an an external API handler in queries analysis binary _ to _ atom/2代替binary _ to _ existing _ atom/2,或者用 list_to_atom/1 代替list _ to _ existing _ atom/1。
要监控原子状态,可以使用以下参数:
- Erlang:memory(atom _ used)—原子使用的内存
- Erlang:system _ info(atom _ count)—系统中创建的原子数量。
与 Erlang:system _ info(atom _ limit)一起,可以计算原子的利用率。
流程泄露。
值得一提的是,当达到 process_limit (+P 参数 erl)时,erlang vm 并没有崩溃,而是陷入了失修状态——在这种情况下,甚至连接到它似乎都是不可能的。最终,由于内存分配给泄漏进程而耗尽内存将导致 erlang vm 崩溃。
为了监控流程状态,让我们使用以下参数:
- Erlang:system _ info(process _ count)—本地节点上当前存在的进程数。与*Erlang:system _ info(process _ limit)*一起,您可以计算进程的使用情况。
- erlang:memory(processes)—当前为 Erlang 进程分配的内存总量。
- Erlang:memory(processes _ used)—Erlang 进程当前使用的内存总量。
邮箱溢出。
生产者流程在没有确认挂起的情况下向消费者流程发送消息就是一个很好的例子。与此同时,消费者流程中的 receive 由于丢失或错误的模式而忽略消息。因此,所有邮件都存储在邮箱中。如果处理器无法处理,Erlang 有一种机制可以减慢发送方的速度。然而,在可用内存耗尽后,虚拟机还是会崩溃。
在 etop 的帮助下,您可以了解您是否有任何邮箱溢出问题。
$ erl-name etop @ host-hidden-s etop-s Erlang halt-output text-node dest @ host-set cookie some _ cookie-tracing off-sort msg _ q-interval 1-lines 25
有问题流程的数量可以作为持续监控的衡量标准。为了识别这些过程,可以使用以下函数:
top_msq_q()->
[{P,RN,L,IC,ST} || P = 1000,[{,RN},{,IC},{_,ST}]
This list can also be logged. In this case, the analysis of the problem is simplified after getting a notification from monitoring.
二进制溢出。
大型(超过 64 字节)二进制文件的内存是在堆上分配的。分配的内存单元有一个引用计数器,显示可以访问它的进程的数量。重置计数器后,将执行清理。就这么简单,没错。然而,有一些小问题。例如,有可能出现一个进程会产生太多的垃圾,以至于系统没有足够的内存来进行清理。
*erlang:内存(二进制)*作为监控的指标。它显示了为二进制文件分配的内存。
总之,我们已经提到了所有导致虚拟机崩溃的案例。然而,继续监控其他同样重要的参数似乎是合理的,这些参数可能会直接或间接影响应用程序的正常运行:
- ETS 表内存: erlang:内存(ets) 。
- 编译模块的内存: erlang:内存(代码)。如果您的解决方案不使用动态代码编译,则可以排除此参数。
应该有一个具体的参考 erlydtl。如果您动态编译模板,beam 会被创建并加载到 vm 内存中。它还会导致内存泄漏。 - 系统内存:二郎:内存(系统)。显示了运行时 erlang 使用的内存。
- 总内存利用率: erlang:内存(总)。当前为 Erlang 进程分配的内存总量。
- 关于减少的信息: erlang:统计(减少)
- 准备执行的所有进程的计数:Erlang:statistics(run _ queue)
- Vm 正常运行时间:Erlang:statistics(runtime)—使您无需分析日志就能了解是否有重启
- 网络活动: erlang:统计(io)
向 zabbix 发送指标
让我们创建一个包含应用指标和 erlang vm 指标的文件。我们会在 N 秒内更新一次。对于每个 erlang 节点,指标文件必须包括所有应用程序指标和 erlang vm 指标。最终,我们应该有这样的东西:
messaging . systime _ subs . messages . delivered = 1654
messaging . systime _ subs . messages . proxied = 0
messaging . systime _ subs . messages . published = 1655
messaging . systime _ subs . messages . skipped = 3
….
erlang.io.input = 2205723664
erlang.io.output = 1665529234
erlang.memory.binary = 1911136
erlang.memory.ets = 1642416
Erlang . memory . processes = 23596432
Erlang . memory . processes _ used = 23598864
erlang.memory.system = 50883752
erlang.memory.total = 74446048
erlang.processes.count = 402
erlang.processes.run_queue = 0
erlang.reductions = 148412771
….
在zabbix _ sender的帮助下,我们将把这个文件发送到 zabbix,在那里可以使用图形表示,并且可以创建自动化和通知触发器。
现在,在我们的监控系统中,有了指标以及自动化和通知触发器,我们有机会避免失败和故障。这是因为我们能够提前对所有偏离全功能模式的危险做出反应。
中央日志收集
如果一个项目中只有几台服务器,那么没有集中的日志收集也是可行的。然而,当出现具有大量服务器、集群和环境的分布式系统时,就需要处理日志收集和查看。
为了在我的项目中执行日志记录,我使用 lager。在从原型到生产的过程中,项目会经历以下日志收集阶段:
- 最简单的日志记录是将日志下载到本地文件,甚至是 stdout (lager_file_backend)
- 集中日志收集,例如使用 syslogd 并将所有日志自动发送到收集器。对于这样的方案, lager_syslog 是最优的。但是,主要的缺点是,您必须访问日志收集器服务器,找到包含所需日志的文件,并以某种方式过滤事件,以搜索调试所需的事件。
- 集中日志收集,保存到带有过滤器和搜索机会的存储库中。
现在,是时候讨论使用后一种日志收集类型的优点、缺点和量化指标了。我们将通过某个实现的例子来实现它——lager _ click house,我在我的大多数项目中都使用它。关于 lager_clickhouse 有几件事要说。这是一个将事件保存到 clickhouse 的大型后端。到目前为止,这是一个内部项目,但有计划将其公开。在 lager_clickhouse 开发过程中,有必要绕过某些 clickhouse 特性。例如,使用事件缓冲是为了不要过于频繁地查询 clickhouse。努力得到了回报,工作稳定,表现良好。
这种保存到存储库的方法的主要缺点是创建了一个额外的实体——click house。在这种情况下,你必须编写保存事件的代码,以及搜索和分析事件的用户界面。此外,对于一些项目,使用 tcp 发送日志可能是至关重要的。
在我看来,优点超过了所有可能的缺点:
- 快速方便地搜索事件:
- 按日期过滤,而不必在包含各种事件的中央服务器上搜索一个或多个文件。
- 按环境过滤。来自不同子系统(通常来自不同集群)的日志被写入同一个存储。目前,有一种按标签划分的方式。每个节点都可以用一个或一组标签来标记,这些标签在节点的配置文件中定义。
- 按节点名过滤。
- 根据发送消息的模块名称进行过滤。
- 按事件类型过滤
- 文本搜索
下面的屏幕截图展示了日志查看器界面的一个示例:
2.完全自动化该过程的可能性。通过实现日志存储,可以获得关于错误数量、关键问题和系统性能的实时数据。实时分析这些数据并施加一些限制,我们可以为系统的非功能状态生成警告,并以自动模式处理它:执行脚本来管理问题并发送通知:
- 在严重错误的情况下
- 在爆发错误的情况下
- 某个度量标准是事件生成速度,因为日志中会出现许多新事件。您几乎总能知道单位时间内由 project 生成的日志的估计值。如果超过了,肯定是出问题了。
紧急事件自动化主题的进一步发展是 lua 脚本的实现。任何开发人员或管理员都可以编写脚本来处理日志和指标。脚本带来了灵活性,使您能够创建自动化和通知的个人场景。
结果
指标和日志,以及分析它们的适当工具,对于了解系统内的流程和调查事件至关重要。我们对系统的了解越多,就越容易分析其行为并在早期阶段解决问题。如果我们的措施没有很好地发挥作用,我们总是有图表和详细的日志供我们使用。
您如何利用 Erlang/Elixir 解决方案?在生产中遇到过什么有趣的案例吗?
神经网络中的误差分析
误差分析是对误差的分析。呵呵!你不必告诉我这些。事实上,整个错误分析都是直观的。但是,在实际项目中,人们往往会忽略一些要点。我们可以把这看作是一种复习,当挫折让我们忘记了基本知识时,我们可以检查一下。
有了 Pytorch 和 Tensorflow 等丰富的库,现在大多数机器学习算法都是现成的——只需实例化一个对象,并用你拥有的数据训练它。你已经准备好了!
这可以解决琐碎的教科书问题,比如读取 MNIST 数字。我们可以尝试一些配置,很快就能达到接近 100%的准确率。但是生活并不是那么简单。当我们试图解决“真正的”问题时,事情变得越来越复杂。
开发一个神经网络模型不仅仅是实例化一个 Python 对象。当我意识到我的模型不像我希望的那样准确时,我该怎么办?该不该加层?我应该修剪模型吗?我应该改变一些超参数吗?这就是错误分析的用处。
什么是错误分析
从形式上来说,错误分析指的是检查被您的算法错误分类的 dev 集合示例的过程,以便我们可以理解错误的潜在原因。这可以帮助我们优先考虑哪个问题值得关注以及关注的程度。它为我们处理错误提供了方向。
错误分析不仅仅是最后的补救操作。应该是主流发展的一部分。通常,我们从一个小模型开始,这必然会有低精度(高误差)。然后我们可以开始评估这个模型并分析误差。当我们分析并修正这些错误时,我们可以随着模型一起成长。
常见的误差来源
我们会遇到几个误差源。每个模型都有自己独特的误差。我们需要分别看待它们。但是,典型的原因是:
标签错误的数据
大部分的数据标注都追溯到人类。我们可以从网络、调查或各种其他来源提取数据。基本的输入来自人类。人类很容易出错。因此,我们应该承认,我们所有的训练/开发/测试数据都有一些错误标记的记录。如果我们的模型构建良好,训练得当,那么它应该能够克服这样的错误。
模糊的分界线
当正面和负面明显分开时,分类算法工作良好。例如,如果我们试图对一只蚂蚁和一个人的图像进行分类;分界很清楚,这应该有助于加快训练过程。
但是,如果我们要在男性和女性照片之间进行分类,就没那么简单了。我们非常了解极端情况。但是,界限并不那么清楚。这种分类自然容易出错。在这种情况下,我们必须在这条模糊的分界线附近进行更好的训练——也许在这条线附近提供更多的数据。
尺寸过拟合或欠拟合
让我们考虑一个简单的例子来理解这个概念。假设我们正在研究一个图像分类器来区分乌鸦和鹦鹉。除了大小,喙,尾巴,翅膀…最明显的区别是颜色。但是有可能这个模型不知道这种区别。因此,将小乌鸦归类为鹦鹉。
这意味着,模型无法从可用数据中学习维度。当我们注意到这一点时,我们应该尝试收集更多的数据,这些数据可以训练网络基于颜色而不是其他参数进行分类。
类似地,模型可能会过度拟合某个特定维度。假设在一个猫/狗分类器中,我们在错误记录中注意到许多深色狗被分类为猫,而浅色猫被分类为狗。这意味着,训练数据没有足够的记录来针对这种错误分类训练模型。
许多其他人
这些只是几种误差源。可能还有更多——可以通过分析错误集来发现。让我们不要“过度适应”我们的理解,将我们的分析局限于这些类型的错误。
每个错误分析都会向我们展示一组新的问题来源。但是正确的方法是识别欠拟合或过拟合的任何倾向-作为一个整体或在一个特定特征或一组特征上或在一些输入特征的特定值附近。
眼球装置
现在我们知道我们的模型有误差,并且可能有几个误差源。但是,我们如何识别哪一个呢?我们在训练集中有数百万条记录,在开发集中至少有几千条。测试集还没有出现。
我们无法评估训练集中的每条记录。我们也不能评估 dev 集中的每个记录。为了识别我们的模型产生的错误类型,我们将 dev 集分成两部分——眼球集和黑盒集。
眼球集是我们实际评估的样本集。我们可以手动检查这些记录,猜测错误的来源。因此眼球集应该足够小,以便我们可以手动工作,并且足够大,以便获得整个 dev 集的统计表示。
在分析眼球集合中的误差时,我们可以识别不同的误差源以及每个误差源的贡献。有了这些信息,我们就可以开始研究主要的误差源。当我们进行适当的修复时,我们可以继续挖掘更多的错误来源。
请注意,分析应仅基于眼球集。如果我们使用整个开发集进行分析,我们将会过度适应开发集。但是如果 dev 集不够大,我们必须使用它的全部。在这种情况下,我们应该注意到我们有过度适应开发集的高风险——并相应地计划其余部分。(也许我们可以使用一个循环开发集——每次尝试时,我们从训练集中挑选一个新的开发集。)
偏差和方差
当我们进行误差分析时,我们识别一个特定的参数或问题区域;或者我们注意到误差相当一致。我们从这里怎么走?我能得到更多的数据吗?这听起来可能合乎逻辑。但并不总是如此。更多的数据可能并不总是有所帮助——超过某一点,任何更多的数据都可能是多余的。我需要更丰富的模型吗?通过过度拟合,仅仅丰富模型就可以极大地改善数字。这也不对!那么我们如何决定方向呢?
偏差和方差让我们对此有了很好的了解。简而言之,如果训练集和开发集的误差都很大,那么我们就有很大的偏差。而如果训练集是好的,但开发集是坏的,我们有很高的方差。偏差本质上意味着输出对所有数据都是坏的。方差意味着输出对某些数据是好的,对其余的是坏的。
如果我们的模型在训练集上有 60%的准确率。我们自然称之为高偏差。有了这种准确性,我们甚至可能不想检查 dev 集。但是,如果训练集误差比我们的目标好得多,留下 dev 集,我们可以称之为高方差。这是因为,模型的行为在可用数据上变化很大。
人们可以直观地说,如果我们有一个高偏差,这意味着我们不适合。这可能是因为某个特定的特征没有被正确处理,或者模型本身不够丰富。基于此,我们可以更新解决方案以提高性能——通过增强特定的功能或模型本身。
另一方面,高方差意味着我们没有对它进行足够的训练。我们需要更多的数据,或者对现有数据进行更好的处理。有了这个,我们也许能训练出一个更好的模型。
减少偏差
机器学习模型只能从它可用的数据中学习。输入数据中有些错误是不可避免的。这不是人类的错误,而是对模型进行分类或测试的人类的真正局限性。例如,如果我不能区分一对同卵双胞胎,我就没有办法生成标记数据并教机器去做!
这种限制被称为不可避免的偏见。剩下的是可以避免的偏见——我们需要关注这一点。因此,当我们进行错误分析,当我们试图找出错误的主要原因时,我们应该考虑可避免的偏差,而不是作为一个整体的偏差。
如果我们的误差分析告诉我们,可避免的偏差是误差的主要来源,我们可以尝试以下步骤
增加模型尺寸
高偏差意味着模型不能从可用的数据中学习到它能学到的所有东西。当模型没有足够的学习能力时,就会发生这种情况。如果模型只有两个参数,那么它只能知道这两个参数。除此之外,任何新的训练数据都将覆盖它从以前的记录中学习到的内容。该模型应该有足够的参数来学习,只有这样它才能保存完成所需工作所需的信息。
因此,解决高偏差的主要方法是建立一个更丰富的模型。
允许更多功能
我们数据清理的一个主要步骤是减少所有冗余特征。事实上,没有一个功能是真正多余的。但是有些没有其他的有意义。特征约简实质上丢弃了价值较低的特征,从而丢弃了一些低价值的信息。
这是一个好的开始。但是,当我们注意到我们拥有的特征不能携带所需的信息时,我们必须重新进行特征减少步骤,并允许更多的特征通过。这可以使模型更丰富,并给它更多的信息来学习。
减少模型正则化
所有的正则化技术本质上都保持模型参数接近于零。即防止每个参数“学习过多”。这是确保模型保持平衡的好方法。但是,当我们意识到模型无法学习足够的知识时,我们应该降低正则化级别,以便网络上的每个节点都能够从可用于训练的数据中学习更多的知识。
避免局部最小值
局部最小值是高偏差的另一个常见来源。我们可能有丰富的模型和大量的数据。但是,如果梯度下降停留在局部最小值,偏差将不会减少。有不同的方法来避免局部最小值——随机开始(用不同的初始值反复训练它)。由于每个都采用不同的路径,因此避免了局部最小值)。或者,我们可以给梯度下降增加动量,这也可以防止下降过程中出现浅最小值。
更好的网络架构
仅仅增加神经元和层数并不一定能改善模型。使用适当的网络体系结构可以确保新的层确实为 it 增加了价值。
研究人员在过去已经面对并解决了这些问题,并为我们提供了良好的模型架构,可以用来在偏差和方差之间进行更好的权衡——例如 AlexNet 、 ResNet 、 GoogleNet 和更多。与这样的架构保持一致可以帮助我们避免很多问题。
减少方差
如果误差分析指出误差的主要原因是高方差,我们可以使用这些技术之一来减少它。
添加更多培训数据
这是首要的解决方案。当我们没有足够的数据来训练网络达到最佳性能时,就会产生差异。所以主要的行动点应该是寻找更多的数据。但这有其局限性,因为数据并不总是可用的。
添加正则化
L1 或 L2 正则化被证明是减少过度拟合问题的技术,从而避免高方差。本质上,它们使每个参数更接近于 0。这意味着,不允许任何参数学习太多。如果单个参数包含大量信息,模型就会不平衡,导致过度拟合和高方差。
L1 和 L2 正则化技术有助于防止这样的问题。L1 正则化更快并且计算更简单。它生成稀疏模型。自然,L2 更精确,因为它处理更精细的细节。
提前停止
当我们用可用的训练数据训练模型时,每一次迭代都会使模型对可用的数据更好一点。但是,这种迭代次数过多会导致过度拟合。人们必须为此找到中庸之道。最好的方法是尽早停止——而不是意识到我们已经超越了极限。
减少功能
特征数量越少,模型就越轻,因此过度拟合的范围就越小。我们有几个特征选择算法,如 PCA,可以帮助我们确定一个最小和正交的特征集,可以提供一种更简单的方法来训练模型。
领域知识还可以帮助我们减少功能的数量。我们还可以使用从错误分析中获得的见解来确定应该如何改变特性集,以便获得更好的性能。
减小模型尺寸
高方差或过度拟合通常意味着我们有太多的参数需要训练。如果我们没有足够的数据来训练这些参数中的每一个,初始化值的随机性会保留在参数中,从而导致不正确的结果。
缩小模型大小对它有直接影响。
使用稀疏模型
有时,我们知道模型的大小是必要的,减小大小只会减少功能。在这种情况下,我们可以考虑训练一个稀疏模型。这给出了更好的模型和更小的方差的良好组合。
模型架构
与减少偏差类似,方差也是由模型架构决定的。研究人员为我们提供了良好的模型架构,可以用来在偏差和方差之间进行更好的权衡。与这样的架构保持一致可以帮助我们避免很多问题。
摘要
我们看到,在我们训练的模型中可能有许多错误的原因。每个模型都有一组独特的误差和误差源。但是,如果我们遵循这种分析的正式方法,我们可以避免每次都重新发明轮子。
逃离实验室
“生物信息学最有趣最重要的部分是……”
蛋白质组学。这就是我们的模块负责人(以及之前的生物信息学课程主任】李·拉科姆在我们专注于蛋白质信息学的一开始就试图说服我们的。从 1950 年 Pehr Edman 的工作到两次获得诺贝尔奖的弗雷德里克·桑格的努力,再到蛋白质芯片和微阵列的最新高通量技术,这个领域在短时间内取得了很大的进步。
尽管进展如此迅速,蛋白质表达的实验验证的进展却明显缓慢。我们了解了两种主要方法,其主要特征是是否涉及抗体。埃德曼开发了后者的第一个例子,此后被质谱盖过。在更受欢迎的免疫测定法中,特异性抗体通过与蛋白质结合来检测和确认蛋白质的存在。这两种方法都可以产生非常精确的结果,但是成本差异很大。不幸的是,更便宜的免疫检测依赖于从动物身上提取的抗体,这些抗体不能存活。此外,这些抗体的很大一部分没有通过验证测试(,在某些情况下,包括所有的),并且无论如何都没有被使用。
Basic concept of ELISA: an immunoassay technique for detecting proteins (Sigma-Aldrich)
随着研究蛋白质变得越来越容易,开发抗生素替代品的紧迫性也随之增加。抗微生物肽、抗细菌单克隆抗体等正逐步走向对抗抗生素耐药性的最前沿。放大来看,在更大范围内进行药物开发的计算机模拟方法正在帮助医药、商业和伦理领域的两个宿敌改善关系。将实验从物理实验室转移到计算环境中可以节省时间和成本,并且在抗体生产方面有额外的好处,即从药物研究的早期阶段完全去除该过程。
An example of just how skewed the costs of drug development are (Next Phase)
随着模块的继续,我们了解到 TeSS 、 ELIXIR 的培训电子支持系统,该系统专为浏览和学习各种生命科学资源而构建。特别是对我们来说,这是一个参与结构生物信息学工作流程并了解如何从获得蛋白质结构(或模拟预测版本)到识别功能域和探索突变影响的机会。人们很快发现,无需进入实验室,就可以为最昂贵的药物开发、发现和临床前试验阶段做出贡献。
我们被分配了一种药物,并被要求就我们的发现制作一份适合行业的一页报告,作为使用出色的免费在线分发工具所能完成的工作的例子。你可以在下面看到我的努力。
这用了不到一周的时间,一分钱也没花。显然这只是一个起点,但是它给出了一个更好的概念,即使用当今可用的开源和开放访问资源可以快速收集和整理多少信息。
用于语义分段的 ESPNetv2
如今,许多现实世界的应用,如自动驾驶汽车,都涉及到视觉场景理解。语义分割是为视觉场景理解开辟道路的主要任务之一。然而,这是计算机视觉中计算量最大的任务之一。本文概述了在 ESPNetv2 论文中使用的高效语义分割网络。
**ESPNet vs ESPNet v2:**ESPNet v2(在 CVPR 19 上被接受)是一个通用架构,可以用于建模可视化和顺序数据。 ESPNetv2 用深度扩展的可分离卷积扩展了 ESPNet (在 ECCV’18 接受)并将其推广到不同的任务,包括图像分类、对象检测、语义分割、和语言建模。
**源代码:我们的源代码以及不同数据集上的预训练模型可在Github上获得。
语义分割
语义分割是一个细粒度的推理任务,它预测图像中每个像素的标签。前景-背景和全场景分割任务示例如下。
**
Figure 1: Top row visualizes a foreground-background segmentation task (e.g. The PASCAL VOC dateset) while the bottom row visualizes a full scene segmentation task (e.g. The Cityscapes dataset).
编码器-解码器网络概述
大部分高效的分割网络,包括 ENet 和 U-Net ,都采用了编解码结构。简而言之,编码器-解码器结构包括两个组件:(1)编码器和(2)解码器。编码器将 RGB 图像作为输入,并通过执行卷积和下采样操作来学习多尺度的表示。作为下采样操作的结果,空间分辨率和精细细节丢失了。解码器通过执行上采样和卷积运算来逆转这种损失。下图显示了一个普通的编码器-解码器网络。
Figure 2: A vanilla encoder-decoder network. The green boxes in encoder and the decoder represents convolutional layers while the red and orange boxes represent down-sampling and up-sampling layers respectively.
按照惯例,编码器和解码器使用跳跃连接共享信息。这些跳跃连接已经被证明非常有效。更多详情见 U-Net 。
ESPNetv2 中的分段架构
像 ESPNet 一样,ESPNetv2 也使用编码器-解码器架构来进行语义分段,但是,它使用更强大和高效的编码和解码块:(1)用于编码器的极其高效的扩展卷积空间金字塔(EESP)模块,以及(2)用于解码器的高效金字塔池(EPP)模块。
编码器的 EESP 模块:为了提高计算效率,EESP 模块用高效的深度扩展卷积替换了 ESP 模块中计算量大的标准卷积层。图 3 比较了电潜泵和 e ESP 模块。有关这些区块的更多详细信息,请参阅我们的论文 ESPNetv2。
Figure 3: Comparison between the ESP module and the EESP module. Each convolutional layer (Conv-n: n×n standard convolution, GConv-n:n×n group convolution, DConv-n: n×n dilated convolution, DDConv-n: n×n depth-wise dilated convolution) is denoted by (# input channels, # output channels, and dilation rate). HFF denotes hierarchical feature fusion. See ESPNet and ESPNetv2 papers for more details.
解码器的 EPP 模块:**子采样允许学习尺度不变表示。这些操作非常有效,是不同(和流行的)计算机视觉算法的关键组件,包括 SIFT 和卷积神经网络。为了让 ESPNetv2 能够有效地学习比例不变表示,我们引入了一个有效的金字塔池(EPP)模块,如图 4 所示。为了高效和有效,EPP 将 N 维特征映射到低维空间,比如说 M 维(N>M),然后使用深度卷积学习和不同尺度和*的表示。让我们假设我们有 b 分支。我们连接这些 b 分支的输出,以产生一个 bM 维空间的输出。为了便于学习更丰富的尺度间表示,我们首先打乱这些 bM 维特征图,然后使用组卷积将它们融合。然后应用逐点卷积来学习在组卷积之后获得的特征图之间的线性组合。*
请注意,EESP 和 EPP 中的基本操作是相同的,即重新采样。在 EESP 中,使用扩张卷积来实现重采样,而在 EPP 中,使用上采样和下采样操作来实现重采样。
Figure 4: EPP module allows to learn scale-invariant representations efficiently. Point-wise, depth-wise, and group-wise convolutions are represented in blue, green, and purple respectively.
ESPNet 和 ESPNetv2 之间的比较
表 1 给出了使用两个广泛使用的数据集(Cityscapes 和 PASCAL VOC 2012)的在线服务器对 私有测试集 进行的定性性能比较。我们可以清楚地看到,ESPNetv2 比 ESPNet 更高效、更准确。
请注意,ESPNetv2 在图像大小为 384x384 的情况下获得了 68 的显著平均交集(mIOU)分数;为许多深度和重量级细分架构提供了具有竞争力的性能(更多详细信息,请参见PASCAL VOC 2012 排行榜)。PASCAL 数据集上广泛使用的图像大小是 512x512(或 500x500)。
Table 1: The performance of the ESPNet and the ESPNetv2 is compared in terms of FLOPs and the accuracy (in terms of mean intersection over union) on the private test set of two widely used datasets.
浓缩咖啡过滤器:分析
我有几台浓缩咖啡机,我决定更深入地了解浓缩咖啡过滤器本身。我已经为我的金特快买了 VST 过滤器,它们绝对让我的浓缩咖啡变得更好,就像白天和黑夜一样。它们是按照严格的规格设计的;证据就在浓缩咖啡里。不摆弄机器,我怎么能确定它的过滤器是否有价值呢?我决定调查一下。
这项调查的一部分是因为购买了一台非常旧的意大利 Enrico 咖啡机。我一时兴起买了这个,因为我本来打算买一个便宜的商业 Gaggia,但它很可能是偷来的。我发现这台 Enrico 机器很便宜,然后我出发去旧金山南部,从一艘又旧又脏的船上的一个老人那里买下它。幸运的是,我没有被谋杀和吃掉。
Enrico 没有配备过滤篮,但我想我会找到一个简单的。我错了;这对恩里科来说是一个常见的问题。我确实在另一个篮子里找到了一个解决方案,一个朋友打磨了它的边缘,这样它就能适合了。我还必须添加 3D 打印件来保持它在 portafilter 中的设置。在这种迷雾中,我决定如果我继续我买咖啡机的坏习惯,我至少应该知道它们值不值。
杠杆式浓缩咖啡机由三个主要部件组成:一个煮水器、杠杆和过滤器。在恩里科号的情况下,锅炉状况良好,所以我不太担心。浓缩咖啡需要一个好的拉杆,但一个好的工匠可以从一个垃圾机器中拉出好的镜头。在我以前的办公室里,有一个咖啡先生,我从那个垃圾里拍出了好照片。过滤器通常可以更换,但有时在旧机器中,过滤器的尺寸很奇怪,所以这很棘手。
概观
对于数据,我有一些机器或访问一些,我想到了一个测量过滤器属性的好方法是通过图像处理。我的目标是测量以下内容:
- 孔大小
- 孔径变化
- 空穴分布
- 空穴分布的方差
- 到最近洞的距离分布
- 过滤器的总开口面积
我用 iPad 以最大亮度背光照明每个滤镜,然后用蓝色圆圈标注每个滤镜,以便更容易找到滤镜。
处理
我首先用多个滤镜拍摄了一张图像,但后来,我发现滤镜位于图像中心和 iPad 上的单个图像在准确性和比较方面更好。然而,这第一个图像作为一个伟大的平台,展示了图像处理完成,能够衡量我想要的。像素之间的距离是用 iPad 的长度估算的。
处理图像
缩放和注释
滤镜提取轮廓
填充并标记的过滤器轮廓
仅过滤
滤孔提取
放大的单个过滤器:
有一个奇怪的模式,几乎就像过滤器是在一个辊和展平。这种模式只有在像素保持在某个阈值以上时才会出现。
数据分析
1。孔径
首先,我们将查看每个过滤器的孔尺寸。最初,孔洞大小是通过确定每个孔洞阈值以上的像素面积并确定直径来计算的。然而,结果并没有显示我正在寻找的细节,因为它是基于整个像素。
对于不熟悉盒图的人来说,这是一个图例:
下面是仅由阈值(th)以上的像素确定的孔直径的方框图。正如你所看到的,一些过滤器没有显示出任何大小的变化,仅仅是因为该方法在分辨率方面无效。
取而代之的是,我确定了一个面积,这个面积是由穿过这个洞的光的强度来加权的。如果一个像素完全是白色,它的权重为 1。这允许对孔径进行亚像素估计。彩色图是与盒状图相同的数据,其中方案是喷射颜色方案,所以红色是分布中的最大计数,深蓝色接近零。
最终的清单扩展到我所有的机器和一些额外的。差异很大,我的标准是 VST 滤波器。他们声称过滤器上的孔径存在+/-0.02 毫米的差异。根据这些测量结果,他们肯定能做到这一点。
让我们调整图表,专门查看分布情况,不要担心具体的孔直径。这张图表显示了为什么我的金快速过滤器是可怕的相比,VST 的。然而, Odea Giro 却相当令人印象深刻。我没想到会有这么多。 Kompresso 和 Flair 也表现非常出色,这是对优质机器的赞美。
2。孔分布
对于孔分布,我计算了所有孔的所有质心之间的 Delaunay 三角剖分,然后查看连接过滤孔的所有边的距离。人们可以假设相似的距离将允许咖啡均匀地流过过滤器。
下面左边是一个 VST 过滤器从每个洞的三角测量。唯一的问题是有两种不同的边长:正方形和对角线。右边的图是点与点之间的距离分布,这种双峰分布并不能提供一个可用的度量标准。我对每个模态的标准差更感兴趣。
让我们看看是否可以使用一些颜色分布来理解同一个图形上的比较和多个分布。左边的方框图具有欺骗性,因为许多滤波器明显是双峰的。在右边,我们可以清楚地看到分布的差异。正方形网格过滤器都是双峰的,但 Flair 和炉顶过滤器(陆丹蓝和 Keleidos)。
3.到最近洞的距离
这个指标背后的想法是,浓缩咖啡是关于液体流量的。水进来,浓咖啡出来;浓缩咖啡流出的每一条路径都是一个洞。因此,如果水通过圆盘的任何部分并到达底部,人们会希望到最近的孔的距离在过滤器上是均匀的。
让我们用一个滤镜来想象一下:VST 替身
1.在左侧处,是过滤器上所有孔的图像,按照 jet 配色方案中的相对孔尺寸进行着色,其中红色较大,蓝色较小。
2.中间的和左边的是同一个图像,但是为了便于观察,所有的孔都被放大了。
3.在右侧是到 jet 配色方案中最近的孔的距离的图像,其中蓝色更近,红色更远。
这个指标应该提供一个表面上更容易理解的分布,如下图所示,带有一个箱线图和一个彩色分布。有趣的是,Flair 的最近距离如此之低,而 Kim Single/Double 的差异要大得多,这可能解释了这些过滤器中最好的浓缩咖啡比 VST 过滤器差。
从更高的角度来看,我们可以看到一些不同之处。首先,在所选择的差异度量中,什么是好的浓缩咖啡过滤器有很大的差异。第二,到最近的孔的距离以及孔的直径为机器的好坏提供了特别的洞察力。最后,一杯浓缩咖啡的客观质量很难通过这些机器以一种公平的方式来确定,但在我看来这是一个好的开始。
总的来说,意式浓缩咖啡机比看起来有更多的不同。过滤器是我制作始终如一的浓缩咖啡的关键之一。敬请期待:我计划如上所述发布颜色表示中的所有滤镜。
如果你愿意,可以在 Twitter 和 YouTube 上关注我,我会在那里发布不同机器上的浓缩咖啡照片和浓缩咖啡相关的视频。你也可以在 LinkedIn 上找到我。
我的进一步阅读:
Python 中的基本概率:排列和组合
概率论并不难,至少在数据科学入门所需的水平上是如此。自从你最后一次接触这个话题可能已经有一段时间了,如果你觉得生疏了,这篇文章可能只是一个回到正轨的方法。
Photo by Brett Jordan on Unsplash
如果你刚开始学习数据科学,快速的谷歌搜索会发现整个领域基于的 4 个主要数学主题:
- 线性代数
- 结石
- 统计数字
- 可能性
最近我讲了线性代数和微积分,所以如果你对这个话题生疏了,也可以随意阅读这些文章。然而,今天我想介绍概率论中的两个重要概念:组合和排列。
让我们从概率本身的基本定义开始:
概率是对事件发生的可能性进行量化的度量。概率量化为一个介于 0 和 1 之间的数字,粗略地说,0 表示不可能,1 表示确定。事件发生的概率越高,事件发生的可能性就越大。[1]
整个概率领域都很重要,因为不确定性和随机性几乎出现在你生活的每个方面,因此对概率有很好的了解将有助于你做出更明智的决定,也有助于理解不确定性。
在深入排列和组合之前,有一个重要的术语需要讨论一下——阶乘。
什么是阶乘?
好问题。根据维基百科:
正整数 n 的阶乘,用 n 表示! 是所有小于等于 n[2]的正整数的乘积
您可以使用以下公式计算阶乘:
这里有一个快速动手的例子:
现在你可能想知道如何在 Python 中计算阶乘。虽然我确信各种库中存在现成的函数,但是定义自己的函数真的很容易,这正是我们要做的。
这里有一个简单的递归函数可以完成这项工作:
现在我们可以用这个函数来验证上面的例子:
好吧,那太好了,但是在现实世界中你什么时候会用到阶乘呢?
假设在某场比赛中有 5 个人,你想知道这 5 个人有多少种方式可以获得第一、第二和第三名。你可以抓起一张纸,写下每一种可能的结果,但是为什么呢?如果有 100 个人呢?
下面是如何使用阶乘来解决前面的任务:
简而言之,这叫做排列。
排列
让我们再次从定义开始,好吗:
在数学中,排列是将一个集合的成员排列成一个序列或顺序的行为,或者,如果该集合已经排序,则重新排列(重新排序)其元素。[3]
有两种主要的方法来计算排列,你是否允许重复会有所不同。让我们用一个例子来解决这个问题。
你有一个用户可以注册的网站。他们需要提供一个长度正好为 8 个字符的密码,并且字符不能重复。我们首先需要确定英语字母表中有多少个字符和数字:
- 字母数量:26
- 位数:10
总共有 36 个。所以 n = 36 。 r 则为 8 ,因为密码需要 8 个字符长。一旦我们知道了这一点,就很容易计算出唯一密码的数量,给出以下公式:
如果你继续手动计算:
或者甚至在 Python 中,这真的是一个微不足道的任务:
好吧,酷,但是我想允许我的用户重复字符。 没问题,在这种情况下,我们谈论的是重复排列,公式甚至更简单:
你已经知道什么是n(36),什么是r(8),那么下面是解决方法:
同样,Python 中的实现很简单:
有很多密码选项。继续大声读出这个数字,我谅你也不敢。
组合
接下来的日常日程是组合。你可能想知道这些是什么,它们和排列有什么不同。让我们一步一步来。首先,这里有一个定义:
组合是从一个集合中选择项目,这样(不同于排列)选择的顺序是无关紧要的[4]
要把重点说清楚,可以考虑下面这句话:入选一个团队的一群人是同一个组,顺序无所谓。这就是组合背后的全部理念。如果你为这个团队选择了 5 名成员,你可以按名字、身高或其他因素对他们进行排序,但本质上你仍然是同一个团队——排序无关紧要。
所以,让我们用一个公式来形式化这个想法。一次取的一组 n 对象的组合 C 的数量计算如下:
现在你可以用这个等式来解决下面的问题:有多少种方法可以从 10 个人中选出 5 个人组成一个足球队?
无论排序如何,组都是相同的。那么我们来看看, n 会等于 10 , r 会是 5 :
使用 Python 也可以轻松做到这一点:
太好了!但是现在你可能想知道是否存在一种允许重复的组合。答案是肯定的。我现在解释一下。
想象一下,你正在做一个三明治,由于某种原因,你只能使用 10 种原料中的 4 种。然而,配料不必是独特的,例如,你可以放三次奶酪和一次意大利腊肠。很好,见鬼,我也是一个喜欢奶酪的人,所以向你致敬。
但是你如何将这个想法形式化,并以数学的方式表达出来呢? 答案再一次变得相当简单:
让我们用公式算出上面的例子。 n 将再次成为 10 ( 因为有 10 种不同的配料),并且将成为 4 ( 因为你只能选择 4 个)😗*
同样,您可以使用 Python 进行验证:
干净利落。这对于一篇文章来说已经足够了。
在你走之前
虽然组合和排列在数学上很简单,但诀窍在于以这种方式来表示现实世界的问题。换句话说,在日常生活中提取 n 和 r 有时会很棘手。
虽然我在这方面帮不了你,但我希望这篇文章能让你知道,一旦获得了*【n】和【r】*,你能做些什么。
感谢您的阅读,一如既往,请不要犹豫,在评论区留下您的想法。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
** [## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)**
资源
[1]https://en.wikipedia.org/wiki/Probability
[2]https://en.wikipedia.org/wiki/Factorial
[3]https://en.wikipedia.org/wiki/Permutation
[4]https://en.wikipedia.org/wiki/Combination
初级概率和统计
基本问题 4 毫升
期望值、方差、标准差、协方差、相关、协方差矩阵和相关矩阵介绍
为了获得有用的结果,数据科学家/ML 工程师必须分析数据并应用正确的模型。概率和统计是可以提高这种技能的两个研究领域。因此,我决定强调这一点,并就 Essential probNstats 4 ML 项目撰写我的第一篇文章。它的内容是基本的概率或统计概念,每个数据科学家和 ML 工程师都应该知道。
预期值
随机变量的期望值是该变量的平均值。例如,给定变量 X = [1,2,3,4,5,6],它表示一个六面骰子,其中每一面出现的概率完全相同,当掷骰数接近无穷大时,其期望值为 E[X] = 1 ⅙ + 2 ⅙ + 3 ⅙ + 4 ⅙ + 5 ⅙ + 6 ⅙ = 3.5。期望值的等式是:
其中 x 是一个随机变量,具有分别以概率(p₁,p₂,…,pₖ)出现的有限数量的有限结果(x₁,x₂,…,xₖ)。如果所有的概率都相等(p₁ = p₂ = … = pₖ),就像六面骰子的情况一样,那么期望值就等于简单平均值(或算术平均值)。此外,因为概率之和等于 1,所以期望值可以被认为是加权平均值,概率就是权重。
方差和标准差
方差给定一组(随机)数字,测量这些数字与其平均值相差多远。更正式地说,是随机变量(本例中为 X )与其期望值的方差的期望值,通常表示为 σ 、 s 或 Var(X) 。
通过“拆开”外部期望值和(i=1,…,n)的 X=xᵢ,其中 n 是 x 的总体大小,我们得到:
如果所有的概率都相等(p₁ = p₂ = … = pₙ),那么方差可以写成:
这也被称为总体方差,因为我们使用 X 的所有数字(总体)进行计算。
相比之下,我们可以用一个变量总体的样本来计算方差。这被称为样本方差,用于人口太大而无法计算的情况。如果我们选择这种技术,公式是不同的:
ȳ是样本 y 的平均值(期望值), n 是该样本的总体规模。请注意,n 减去 1,这使得方差无偏。我不会详细讨论这种偏见,但是你可以在这里阅读它的来源。
找到方差后,我们可以计算该变量的标准差,即其方差的平方根。
它也由 σ 符号表示。标准差衡量一组数字的变化量。高值表示这些数字可能远离平均值。
但是为什么要计算随机变量与其算术平均值的平方,而不仅仅是简单的偏差呢?
假设以下示例中的数字是数字与其平均值的偏差的输出。
outputs of deviations of numbers from their mean
在第一个例子中,平均值是(4+4–4–4)/4 = 0,因此标准差也是 0。这显然不是这些数字变化量的指标。如果我们计算绝对值的平均值,(|4|+|4|+|-4|+|-4|)/4=4,我们得到的不是 0。这看起来是一个很好的指标,但是如果我们在第二个例子中计算平均值呢?(|1|+|-6|+|7|+|-2|)/4=4 该值与第一个值相同,即使数字分布得更远。通过对数字求平方并计算其标准差,两种情况下的输出分别为√((4 +4 +4 +4 )/4)=4 和√((7 +1 +6 +2 )/4)=4.74…这看起来不错,因为第二种情况有更大的标准差。
协方差和相关系数
协方差是两个随机变量联合概率的度量。它显示了这些变量的相似性,这意味着如果一个变量的较大值和较小值主要对应于第二个变量的值,则协方差为正。如果情况相反,那么协方差就是负的。如果它近似等于零,则变量彼此独立。对于两个变量 x 和 y,它通常表示为 **cov(X,y)**或 σ(X,Y) 并且它的正式定义是:它们与它们各自的期望值(算术平均值)的偏差的乘积的期望值。
通过“拆开”外部期望值,但是对于(i = 1,…,n ),x=xᵢ和 Y=yᵢ之间的 pᵢ具有相等的概率,我们得到:
更普遍的是:
以上是人口协方差。我们可以使用适用于样本方差的相同规则来计算样本协方差。我们只是使用无偏版本:从每个变量中取相同数量的大小为(n)的观测值,计算它们的期望值并用 1/(n-1)代替 1/n。
协方差的一个特例是当两个变量相同时(一个变量与其自身的协方差)。在这种情况下,它等于该变量的方差。
现在,如果我们将两个变量的协方差除以它们的标准差的乘积,我们将获得皮尔逊相关系数。它是协方差的归一化,因此它具有+1 和-1 之间的值,并且用于使量值可解释。
协方差和相关矩阵
它是一个方阵,描述了两个或多个变量之间的协方差。随机向量 X 的协方差矩阵通常由 Kxx 或**σ表示。**例如,如果我们想计算三个变量(X,Y,Z)之间的协方差,我们必须如下构造矩阵:
每个单元格都是行变量与其对应的列变量之间的协方差。你可能已经注意到,矩阵的对角线包含了协方差的特殊情况(一个变量与其自身的协方差),因此代表了该变量的方差。你可能观察到的另一件事是,矩阵是对称的,对角线下的协方差值与对角线上的相同。
使用相同的逻辑,可以构建皮尔逊相关系数矩阵,其中每个协方差除以其对应变量的标准偏差的乘积。在这种情况下,对角线总是等于 1,这表示总的正线性相关。
摘要
我们看到了一些基本概念,如期望值、方差、标准差、协方差、相关性、协方差矩阵和相关矩阵。这些构成了研究更复杂的概率或统计概念的基础,并且是许多重要算法(如 PCA)的构建模块。
参考
布朗利,J. (2019)。机器学习的线性代数基础:探索 Python 中数据的数学语言。(1.7 版)。
皮尔斯罗德。(2019 年 10 月 10 日)。“标准差和方差”。数学很有趣。于 2019 年 12 月 10 日从http://www.mathsisfun.com/data/standard-deviation.html检索
维基百科贡献者。(2019 年 12 月 10 日)。预期值。在维基百科,免费百科。检索于 2019 年 12 月 11 日 12:08,来自https://en.wikipedia.org/w/index.php?title=Expected_value&oldid = 930177129
维基百科贡献者。(2019 年 12 月 9 日)。方差。在维基百科,免费百科。检索时间:2019 . 12 . 11 12:09,发自【https://en.wikipedia.org/w/index.php?title=Variance】T2&oldid = 929926047
维基百科贡献者。(2019 年 12 月 2 日)。标准差。在维基百科,免费百科。检索到 2019 年 12 月 11 日 12:09,来自https://en.wikipedia.org/w/index.php?title =标准差& oldid=928934524
维基百科贡献者。(2019 年 12 月 7 日)。协方差。在维基百科,免费百科。检索时间:2019 年 12 月 11 日 12:10,来自https://en.wikipedia.org/w/index.php?title=Covariance&oldid = 929639677
维基百科贡献者。(2019 年 10 月 21 日)。皮尔逊相关系数。在维基百科,免费百科。检索时间 2019 年 12 月 11 日 12 点 11 分,来自https://en.wikipedia.org/w/index.php?title = Pearson _ correlation _ coefficient&oldid = 922293481
假设检验的要点和要避免的错误
[## 想在数据科学方面变得更好吗?
当我在我发布独家帖子的媒体和个人网站上发布新内容时,请单击此处获得通知。](https://bobbywlindsey.ck.page/5dca5d4310)
假设检验是科学方法的基石,也是科学进步的基石。它允许你调查你感兴趣的事情,并告诉你你应该对结果感到多么惊讶。侦探会告诉你是否应该继续调查你的理论,或者把精力转移到其他地方。你吃的减肥药真的有效吗?你到底需要多少睡眠?人力资源部要求的团队建设练习真的有助于加强你和同事之间的关系吗?
社交媒体和新闻充斥着“研究表明这一点”和“研究表明那一点”,但是你怎么知道这些研究是否有效呢?对他们来说有效意味着什么?虽然研究肯定会受到数据收集过程的影响,但本文的大部分内容将专注于实际的假设检验本身,以及为什么熟悉它的过程将为您提供一套必要的技能,来执行可重复、可靠和可操作的检验,从而使您更接近真相,并对研究提出质疑。
在任何假设检验中,你都有一个默认假设(零假设)和你感兴趣的理论(替代假设)。无效假设是假设你正在研究的任何干预/理论都没有效果。例如,如果你正在测试一种药物是否有效,无效假设会表明该药物没有效果,而另一个假设会假定它有效果。或者你可能想知道公司网站的重新设计是否真的对销售产生了影响——零假设是重新设计对销售没有影响,另一个假设是有影响。
假设检验有点像和朋友唱反调,但你们两个都出去收集数据,进行可重复的测试,并确定你们中的哪一个更有可能是正确的,而不是只是兜圈子。本质上,拥有一个零假设确保你正在研究的数据不仅与你的任何理论一致,而且与你的理论的否定不一致(即零假设)。
假设检验的工作原理
一旦确定了你的无效假设和替代假设,你需要进行测试。跳过一堆数学公式,大概是这样的:
- 进行一次实验(这是你收集数据的地方)。
- 假设零假设为真,让 p 值成为得到至少和你得到的结果一样极端的结果的概率。
- 如果 p 值相当小(即< 5%), your results are statistically significant which gives you evidence to reject the null hypothesis; otherwise, the null hypothesis can’t be ruled out just yet.
You might be wondering why a p-value of 5% could mean that your results are statistically significant. Let’s say your null hypothesis is that condoms don’t have an effect on STD transmission and you assume this to be true. You run your experiment, collect some data, and turns out you get some results that were very unlikely to get (meaning the probability of getting those results was really small). This might cause you to doubt the assumption you made about condoms having no effect. Why? Because you got results that were very rare to get, meaning your results were significant enough to cast doubt on your assumption that the null hypothesis was true.
Just like with most things in life, you want to minimize your probability of being wrong, including when performing a hypothesis test. So consider the ways you could be wrong when interpreting the results of a hypothesis test: you can either reject the null hypothesis when it’s actually true (a Type I error), or fail to reject it when it’s actually false (a Type II error).
Since you can’t decrease the chance of both types of errors without raising the sample size and you can’t control for the Type II error, then you require that a Type I error be equal to 5% which is a way of requiring that any statistically significant results you get can only have a 5% chance of being a coincidence. It’s damage control to make sure you don’t make an utter fool of yourself and this restriction leaves you with a 95% confidence when claiming statistically significant results and a 5% margin of error.
The statistically significant results in the above condom example could have been a fluke, just coincidence, but it’s only 5% likely. Even though there’s sound reason for having a small p-value, the actually threshold of 5% happens to be a convention created by Ronald Fisher, considered to be the father of modern statistics. This convention exists so that when a scientist talks about how they achieved statistically significant results, other scientists know that the results in question were significant enough to only be coincidence at most 5% of the time.
A Fuzzy Contradiction
For the mathematically literate, the null hypothesis test might resemble a fuzzy version of the scaffolding for a proof by contradiction whose steps are as such:
- Suppose hypothesis, H ,则为真。
- 既然 H 为真,那么有些事实 F 不可能为真。
- 但是 F 是真的。
- 因此, H 为假。
与假设检验的步骤相比:
- 假设零假设, H 而非为真。
- 既然 H not 为真,那么接下来某个结果 O 是非常不可能的。
- 但是 O 确实被观测到了。
- 所以, H 不的可能性很小。
矛盾证明和假设检验步骤的区别?绝对数学确定性与可能性。你可能会认为统计学和数学一样具有确定性,但事实并非如此。统计学是一个推理框架,因此,它依赖于可能不完整或被篡改的数据;更不用说这些数据可能来自一个设置不当的实验,为过多的混淆变量留下了足够的空间。这个领域充满了不确定性,任何统计学家能够给出的最佳答案都是可能性,而不是确定性。
实际上在做假设检验
现在谈谈假设检验的技术细节。尽管统计学课程总会想办法把水搅浑,但幸运的是,测试本身并不太复杂。一旦你理解了这些细节,你就可以让计算机为你进行计算。为简单起见,假设您正在通过查看样本均值对干预对总体的影响进行假设检验。但是请记住,这个过程与其他测试非常相似。
首先,在没有干预的情况下,从你选择的人群中收集足够的数据(最好至少 30 个样本),并计算其平均值 μ而不是。这被称为样本均值,代表总体均值,因为中心极限定理告诉你,随着样本越来越大,样本均值越来越接近总体均值。由于样本均值是一个统计量,它属于一个特殊的抽样分布,即中心极限定理所说的正态分布。
接下来,计算 μ而非的标准差,它等于 σ/sqrt(n) 其中 σ 是总体标准差, n 是样本的大小。但是既然你不知道 σ 到底是什么,你可以用样本标准差 S 来估计它,这个标准差是从有干预的人群的数据中找到的。因此,使用干预从您的群体中收集 30 多个样本,并计算其平均值 μ 和样本标准差 S 。
现在假设零假设为真,问自己,得到 μ 的概率是多少?另一种说法是, μ 距离 μ而非有多少标准差,得到结果至少距离 μ而非那么多标准差的概率是多少?如前所述,这种概率称为 p 值。
嗯,要计算 μ not 离 μ 有多少标准差,你从 μ 中减去 μ not ,除以 μ not 的标准差。结果称为标准分数或 Z 分数。
(μ-μ not)/(S/sqrt(n))
现在,得到一个至少和你得到的一样极端的标准分数的概率是多少?这与询问至少 (μ-μ not)/(S/sqrt(n)) 偏离 μ not 的概率是多少是一样的。这取决于你的替代假设的形式。
如果你的替代假设是μ≦μnot,那么标准分数的概率就是一减去正态分布的概率密度函数(pdf)的 -(μ-μ not)/(S/sqrt(n)) 到 (μ-μ not)/(S/sqrt(n)) 的积分。举个例子,如果 (μ-μ not)/(S/sqrt(n)) = 2 ,那么“1 减去上面的积分”就会求出曲线下阴影区域的面积(这就是你要找的概率):
如果你的替代假设是 μ > μ not ,那么标准分数的概率就是正态分布的 pdf 从*(μ-μnot)/(S/sqrt(n)*到 ∞ 的积分。假设标准分数为 2,如上例所示,这相当于试图在下图中找到面积:
同样,如果你的替代假设是 μ < μ而不是,那么标准分数的概率就是正态分布的 pdf 的 -∞ 到 (μ-μ not)/(S/sqrt(n)) 的积分。就像上面的例子一样,这一次你试图找到以下区域:
现在你已经找到了结果的概率(通过标准分数),你可以用这个概率来决定是否拒绝零假设。假设这个概率是 3%。因此,在假设零假设为真的情况下,你在干预措施实施后从人群中收集的数据有 3%的概率发生。但它还是发生了!所以也许零假设终究不是真的。你不确定,但证据似乎表明你可以拒绝。
调整显微镜
如前所述,假设检验是一种有一定精确度的科学工具,因此,你必须仔细决定给定实验所需的精确度。一个不足的假设测试不足以检测你试图观察的任何效果。这就好比用放大镜来观察你的一个脸颊细胞。但是放大镜太弱了,无法观察这么小的东西,你还不如根本不去做这个测试。通常情况下,当研究一个小群体时,如果群体差异产生的影响刚好大到足以超过 5%的 p 值阈值,那么测试就不够有力。
乔丹·艾伦伯格在他的书《如何不犯错》中给出了一个动力不足测试的很好的例子。他提到《T4 心理科学》杂志上的一篇文章,文章发现处于排卵期的已婚女性更有可能投票给总统候选人米特罗姆尼。共有 228 名妇女接受了调查;在生育高峰期接受调查的女性中,40.4%的人表示支持罗姆尼,而在其他不排卵的已婚女性中,只有 23.4%的人表示支持罗姆尼。在如此小的人口规模下,两组女性之间的差异大到足以通过 p 值测试并拒绝零假设(即已婚女性的排卵对支持米特罗姆尼没有影响)。艾伦伯格在第 149 页继续说道:
差别太大。在喜欢米特罗姆尼的已婚女性中,有近一半每月花大量时间支持巴拉克奥巴马,这真的有可能吗?没人会注意到吗?如果一旦排卵期开始,真的会有政治上的右倾,那看起来可能会小很多。但这项研究的规模相对较小,这意味着一个更现实的效应强度评估可能会被 p 值过滤器拒绝,这是自相矛盾的。
过度研究存在相反的问题。假设进行了这样一项过度研究(即一项大规模人群研究),它表明服用一种新的降压药会使患中风的几率增加一倍。现在有些人可能会因为害怕中风而选择停止服用降压药;毕竟你有两倍的可能性。但是,如果中风的可能性最初是 8000 分之一,一个非常接近于零的数字,那么这个数字翻一番,8000 分之 2,难道还是真的接近于零吗?两次一个很小的数字还是很小的数字。
这就是标题——一项被过度压制的研究对微小的影响非常敏感,这些影响可能被认为具有统计学意义,但可能并不重要。如果一名心脏病患者在阅读了“中风几率增加一倍”的标题后,决定停止服用降压药,从而导致心肌梗塞,该怎么办?被压倒的研究拿着显微镜观察一个高尔夫球,从树木中漏掉了森林。阅读或听到此类标题时必须小心,必须提出问题。也就是说,在现实世界中,一项强有力的研究比一项弱有力的研究更受欢迎。如果测试有重要的结果,你只需要确保你以实际的方式解释这些结果。
可复制研究的重要性
在这篇文章的开头,你看到了如果零假设是真的,你仍然有 5%的可能拒绝它而选择另一个。这就是为什么你只能说你对你得到的结果有 95%的信心,因为 20 次中有 1 次,你的结果实际上根本不重要,而是由于随机的机会。而这正是上面漫画所指的。测试 20 种不同的软糖与痤疮的联系,毫不奇怪,20 种中有 1 种显示有联系。
这应该会让人们深刻认识到可复制研究的重要性,可复制研究需要遵循相同的研究步骤,但使用新的数据。用新数据重复你的研究有助于确保你不是那种只做了一次研究就发现绿色软糖对痤疮有显著统计学效果的幸运科学家。
结束语
假设检验是科学研究中的天赐之物。它允许将精力集中在更有前途的研究领域,并提供了挑战普遍持有的信念和防御有害行为的机会。既然你已经知道了如何进行假设检验,并意识到了其中的陷阱,我希望它不仅能提升你的职业价值,还能提升你的个人生活价值。
如果你喜欢我在这里写的东西,一定要看看我的 个人博客 ,在那里我有在媒体上看不到的文章。
原载于 2019 年 2 月 19 日bobbywlindsey.com。
从小的随机样本中进行估计——理解潜在的概率!
假设你被要求证明一个特性有多有用。比方说,你必须估计你的平台上有多少用户会从你的产品的某个特性或变化中受益。
Sampling from a population
你从 1%的用户中挑选一个“随机统一样本”。他们现在可以看到该功能。在一周的时间里,你已经计算出有 1000 个用户在积极地使用这个特性。
现在是时候让这个特性在整个流量中推广了。现在,您必须回答管理层提出的问题,即有多少用户可能从该功能中受益。
你会说 100,000,因为在 1%的随机统一样本中,有 1000 人喜欢它。听起来合理吗?
我就在这里停下来,问这个问题。
假设真的有 10 万人会喜欢这个功能并从中受益。你从这 1%的样本中得到 1000 这个数字的机会(或概率)是多少?
我认为这是人们容易感到困惑的地方。我听过回答说百分百确定。理由是这是一个完全随机的样本,或者准确地说,是随机的均匀样本!
你可以暂停阅读这篇文章,看看上面是否有道理,并找出其中的谬误。
解决这个问题的方法如下:我们需要找到以下条件概率
P(n=1000|N=100000)
其中 N=对这 1%样本感兴趣的人数,N =总体感兴趣的人数。
P(n|N)实际上是一个二项分布。让我们看看如何。
感兴趣的用户落入该样本的机会是(1 / 100)或样本百分比 *s,*假定它是随机均匀分布。结果是下面的公式:
代入 n = 1000 和 N = 100000 以及 s = 0.01 的值,我们得到
换句话说,期望值 1000 只有 1.2%的机会
再回忆一下,二项分布的均值是:
所以期望值确实是 1000,但是概率相当低!
我认为理解这一点很重要。我知道对 1%的随机流量样本进行测试看起来没有多大意义。让我们继续探索,看看吧!
因此,让我们尝试将样本量增加到 10%。预期值为 10,000。让我们计算同样的概率。
换句话说,尽管样本量更大,概率还是下降到了 0.4%。
另一方面,让我们尝试一个非常非常小的样本量 0.01%。
得到“期望值”10 的概率现在已经上升到接近 12.5%。
正如我们所预期的,样本量越大,我们应该能够以更高的概率获得真实值,但似乎发生了相反的情况。这里的谬误是什么?
在这一点上,重要的是不仅要看个体概率,还要看概率的分布。
Probability Distribution of “n”, given sample size = 1% and N = 10000
这表明“n”的值将主要在 900 到 1100 之间。假设我们得到 N 是 1050,我们对 N = 1050 * 100 = 105,000 的估计不是 100000。这是一个 5%的误差,人们可能会认为这不符合标准。
Probability distribution of ’n’, given sample size = 10% and N = 100000
Probability distribution of ’n’, given sample size = 0.01% and N = 100000
从上面的分布图可以看出,如果采样的“N”结果是 5,那么 N 的估计值将是 50,000,这是 50%的误差!
这就把我们带到了一个我们到目前为止还没有谈到的重要统计数据——方差。让我们看看不同样本量下的方差。
让我们看看不同 s 值的标准差。
随着样本量的增加,标准偏差急剧减小。即使样本量为 1%,标准偏差也只是平均值的 3%。
这个标准差如何帮助我对误差可控有信心?我来介绍一个概念,叫切比雪夫不等式。不要被公式弄得不知所措——我会马上解释的。
这仅仅意味着一个值偏离均值 k 个标准差的几率小于(1 / k)!
应用切比雪夫不等式,我们知道一个值距离平均值至少 3 个标准偏差的概率是 1/(3*3)小于 1/9 或大约 10%。
因此,在我们的具体示例中,如果您选择 1%的采样率,您至少可以 90%确定您获得的值与平均值的偏差不超过 10%!
我认为 90%的置信度,不超过 10%的误差,对于实际应用来说应该足够了!
PS:对于更善于观察的人来说,有一个固有的假设,即我们在此之前知道 N。这是一个稍微高级一点的话题,但是只要 N 足够大,比如说大于 5000,1%的采样率就足够了。这表明可能需要 N 的某种先验知识——至少是 N 所在的范围。
概括地说,这些教训是:
a)从样本中收集的值不会成为您想要的精确测量值,并且会与精确测量值有偏差。重要的是要了解精确测量存在多少偏差或误差。
b)选择较大的样本量可最大限度地减少偏差。在大多数情况下,1%的采样率就足够了。
这篇文章也出现在 印度分析杂志上。
估计 R 中的非线性相关性
在本帖中,我们将学习在 r 中使用非线性相关估计函数。我们还将看几个例子。
背景
相关估计通常用于各种数据挖掘应用中。根据我的经验,非线性相关在各种过程中相当普遍。由于这个原因,非线性模型,例如 SVM,被用于回归、分类等。然而,估计两个变量之间非线性相关性的方法并不多。
通常估计线性相关性。然而,数据可能具有非线性相关性,但几乎没有线性相关性。在这种情况下,非线性相关变量有时会在高维数据的数据探索或变量选择过程中被忽略。
我们开发了一种新的非线性相关估计量nlcor
。该估计器在数据探索和非线性预测模型(如 SVM)的变量选择中非常有用。
安装nlcor
要在 R 中安装nlcor
,请遵循以下步骤:
> install.packages("devtools")
2.加载 devtools 包。
> library(devtools)
3.通过在 R 控制台中键入以下命令,从 GitHub 库中安装nlcor
。
> install_github("ProcessMiner/nlcor")
非线性相关估计量
在这个包中,我们提供了一个在nlcor
中使用自适应局部线性相关计算的非线性相关估计方法的实现。函数nlcor
返回非线性相关估计值、相应的调整后 p 值以及可视化非线性关系的可选图。
相关估计将在 0 和 1 之间。该值越高,非线性相关性越强。与线性相关不同,负值在这里是无效的。由于多个局部相关计算,相关估计的净 p 值被调整(以避免假阳性)。该图显示了局部线性相关性。
下面,我们将通过几个例子来展示它的用法。在给出的例子中,x
和y
之间的线性相关性很小,然而,它们之间存在可见的非线性相关性。该包包含这些示例的数据,可用于测试该包。
nlcor
包有几个样本x
和y
向量,在下面的例子中演示。
首先,我们将加载包。
> library(nlcor)
例 1。具有循环非线性相关性的数据。
> plot(x1, y1)
数据的线性相关性是,
> cor(x1, y1)
[1] 0.008001837
正如所料,相关性接近于零。我们使用nlcor
来估计非线性
相关性。
> c <- nlcor(x1, y1, plt = T)
> c$cor.estimate
[1] 0.8688784
> c$adjusted.p.value
[1] 0
> print(c$cor.plot)
该图显示了数据中存在的分段线性相关性。
例 2。具有非均匀分段线性相关性的数据。
> plot(x2, y2)
数据的线性相关性是,
> cor(x2, y2)
[1] 0.828596
这一数据的线性相关性相当高。然而,数据中存在
显著且更高的非线性相关性。该
数据模拟了一个点之后相关性改变其方向
的场景。**有时,变化点位于中间,导致
线性相关性接近于零。**此处我们展示了一个
变化点偏离中心的例子,以表明该实施在
非均匀情况下有效。
我们使用nlcor
来估计非线性相关性。
> c <- nlcor(x2, y2, plt = T)
> c$cor.estimate
[1] 0.897205
> c$adjusted.p.value
[1] 0
> print(c$cor.plot)
从图中可以看出,nlcor
可以估计非均匀场景中的分段相关性。此外,非线性相关性高于线性相关性。
例 3。具有更高和多个频率变化的数据。
> plot(x3, y3)
数据的线性相关性是,
> cor(x3, y3)
[1] -0.1337304
线性相关性预期很小,尽管由于某种线性
而不接近零。
这里我们展示了我们可以细化相关性
计算的粒度。
默认设置下,nlcor
的输出为:
> c <- nlcor(x3, y3, plt = T)
> c$cor.estimate
[1] 0.7090148
> c$adjusted.p.value
[1] 0
> print(c$cor.plot)
从图中可以看出,nlcor
忽略了一些地方关系。我们可以通过改变refine
参数来改进相关估计。refine
的默认值设置为 0.5。可以设置为0
和1
之间的任意值。值越大,细化程度越高。
但是,更高的细化会对 p 值产生不利影响。也就是说,得到的相关性估计在统计上可能是不重要的(类似于过度拟合)。因此,建议避免过度细化。
对于该数据,我们使用refine = 0.9
重新运行相关性估计。
> c <- nlcor(x3, y3, refine = 0.9, plt = T)
> c$cor.estimate
[1] 0.8534956
> c$adjusted.p.value
[1] 2.531456e-06
> print(c$cor.plot)
Warning: Removed 148 rows containing missing values (geom_path).
如图所示,nlcor
可以识别粒度分段相关性。在该数据中,p 值仍然非常小——相关性具有统计显著性。
摘要
这个包提供了一种有效的启发式算法来计算数值向量之间的非线性相关性。启发式算法通过自适应地识别多个线性相关的局部区域来估计整体非线性相关。这里用几个例子来说明它的用法。
引用
- 打包‘nlcor’:计算非线性相关性
@文章 {ranjan2020packagenlcor,
title = { Package ’ nlcor ':Compute Nonlinear Correlations },
作者={Ranjan,Chitta and Najari,Vahab},
期刊={Research Gate},
年份={2020},
doi = { 10.13140/rg . 2 . 2 . 33716 . 68480 }
}
Chitta Ranjan 和 Vahab Najari。“软件包‘nlcor’:计算非线性相关性”。在:研究门(2020)。doi:10.13140/rg . 2 . 2 . 33716.68480
- nlcor:非线性相关
@ article{ ran Jan 2019 nlcor,
title={nlcor:非线性相关},
author={Ranjan,Chitta and Najari,Vahab},
journal={Research Gate},
year={2019},
doi = { 10.13140/rg . 2 . 2 . 10123 . 72488 }
}
Chitta Ranjan 和 Vahab Najari。“nlcor:非线性相关”。In:研究门(2019)。doi:10.13140/RG
使用 R 中的阿尔法形状算法估计 3D 图像的体积
在这篇文章中,我将描述一种估计 3D 图像中物体体积的方法。我在这里展示的方法——阿尔法形状算法——最近在黑客马拉松 Hacktaferme 上获得了三等奖。
本文概述:
1.解释估计 3D 点云的体积的困难以及由阿尔法形状/凹面外壳算法提出的解决方案。
2.展示如何导入和可视化。R 中的 obj 图像并访问数据点矩阵。
3.将 alpha shape 算法应用于。obj 图像来估计体积和理解 alpha 参数的效果。
4.结论和替代解决方案
1.1.为什么我们需要一种算法来估算 3D 形状的体积?
起初,估计点云的体积似乎很简单。如果我们有一个如下所示的 3D 立方体,那么我们可以使用我们在物理课上学过的公式。
Usual 3D Cube that we work with
Usual Formula for Estimating 3D Volume
如果我们有一个不同的形状,我们可以用已知的体积公式,用立方体或其他几何形状来填充它,这些的总和就是总体积,对吗?
Estimating volume on a complicated 2D shape by cutting the area in pieces.
但是在现实生活中,我们没有立方体。还有,我们没有形状。我们实际上有一个点云,这是实际的困难:找到点云的形状,这样我们可以把它切成几块,并计算每块的体积。
In an image, we have a point cloud, not a pre-defined shape. This is because of the functioning of a 3D camera which takes many points on a surface rather than complete shapes.
绘制点云轮廓有两种方法:凸形和凹形。凸形意味着一个形状不会向内弯曲,或者我们可以说不可能通过穿过形状的外部来连接形状内部的两个点。凹面是相反的:它向内弯曲,我们可以在它里面的两点之间画一个点,这个点穿过它的外面。
Concave shape (left) vs a convex shape (right).
凸轮廓是一个相对容易的问题:以最小的体积(或 2D 的表面)在所有点周围取凸的形状。但是凹轮廓估计是困难的。困难在于同一个点云可能有多个凹轮廓,并且没有数学方法来定义哪个轮廓是最好的!
The convex contour has a fixed solution, the concave contour has not.
由于凹轮廓允许向内的线,最小凹轮廓形状可以在该点云中找到几乎为 0 表面的形状,这将是一个巨大的低估。另一方面,我们看到凸轮廓是一个严重的高估。
我们需要调整凹度的大小,我在这里给出的解决方案是阿尔法形状算法。
1.2.阿尔法形状算法是如何工作的?
为了计算点云的 alpha 形状,我们需要定义一个 alpha。alpha 为 1 将导致凸包。那么α越接近零,我们形状的轮廓就越灵活。
步骤 1:使用 Delauney 三角测量法寻找凸包
在这些点之间绘制三角形,以便这些三角形之间没有重叠(这就是所谓的 Delauney 三角剖分)。这给了我们凸包(迄今为止,凸包是我称之为轮廓的官方术语)。
步骤 2:使用一个半径为 alpha 的圆过滤这个结果
那些三角形的边都有一定的长度。我们知道凸包太大了,所以我们需要删除一些三角形边界来制作一个更好的凸包。
准确的选择标准是:围绕三角形的每条边画一个尽可能大的圆。如果
1,选择边框。这个圆不包含另一个点
2。这个圆的半径小于α
Finding the alpha shape for the shape on the left (already applied Delauney Triangulation) using a large alpha (middle) and a small alpha (right). The large alpha has resulted here in the convex solution (middle) and the smaller alpha has given a concave hull (right). Another (small) alpha could have given a different concave hull.
2.在 R 中导入、可视化和访问. obj 3D 图像
为了在实践中应用凹壳算法,我们需要将 3D 图像导入到我们的编程环境中。在这个例子中,我将使用现有的 R 库。
要导入图像文件,可以使用 readobj 包中的 read.obj 函数,如左图所示。
Executing this code on a 3D image will open a viewer window to inspect your 3D object.
然后使用 rgl 库来获得可视化效果。首先,使用函数 tinyobj2shapelist3d 将您的 obj 对象转换为 shapelist ,然后使用函数 shade3d 生成一个 3d 查看器窗口,您可以使用鼠标来旋转和扭曲图像。
The viewer in R gives this interactive representation of the .obj 3D image. In my example it were 3D pictures of cows.
来访问您的。将 obj 文件导入 R 后,执行以下命令:
现在我们有了数据点的矩阵(3D 点云),我们可以开始使用 Alpha Shape 算法来估计它周围的凹面外壳,并从那里计算体积。
3.应用 alpha 形状算法并理解 alpha 参数
为了估计凹面外壳及其体积,我们使用 R 包 alphashape3d ,它有一个函数 ashape3d 在给定 xyz 矩阵和 alpha 值的情况下创建 alpha 形状,此外,还有一个 plot 函数显示发生了什么,还有一个 vvolume _ ashape3d给我们估计的体积。
完整代码如下所示,alpha 值为 0.35:
Two concave hulls of a .obj 3D image using the alpha shape algorithm with on the left alpha = 0.05 and on the right alpha = 0.35.
现在,您可以调整 alpha 参数,以制作出您需要的形状。一种方法是看形状,看哪一个最合适。另一种方法是使用验证数据来校准 alpha 形状算法:测试不同的 alpha 值,看看哪个值给出了最正确的体积估计。
你甚至可以考虑使用网格搜索来优化 alpha,这就是我们在黑客马拉松中所做的。我们的目标是从 3D 图像开始估计一头奶牛的体重,因此我们对总共 74 张图像进行了从 0 到 1、步长为 0.05 的阿尔法网格搜索,以选择与观察到的奶牛体重相关性最大的阿尔法。这导致了 0.35 的 alpha,这并没有导致体积的最佳估计,但它确实给了我们一个有用的变量,用于进一步的机器学习。
4.结论和替代解决方案
在本文中,我解释了 alpha shape 算法,并展示了如何使用它从点云中估算 3D 对象的体积。这种方法的最大优点是它允许凹形,而凸形方法是不可能的。
阿尔法形状必须校准,我已经提出了几个想法来做到这一点,即使没有校准数据。尽管校准 alpha 需要一些时间,但这种方法对于建模 3D 形状来说是一个很大的附加值,并且是 3D 图像处理的一个很好的切入点。祝你好运!
估计机器学习模型中的不确定性—第 1 部分
作者:Dhruv Nair,数据科学家,Comet.ml
“我们要求严格界定怀疑和不确定的领域!”
——道格拉斯·亚当斯,《银河系漫游指南》
为什么不确定性很重要?
让我们想象一下,我们正在为建筑公司 ABC 建筑公司建造一个计算机视觉模型。该公司对其空中现场监控流程的自动化感兴趣,并希望我们的算法能在他们的无人机上运行。
我们愉快地开始工作,将我们的算法部署到他们的无人机舰队上,回家后认为这个项目取得了巨大的成功。一周后,我们接到 ABC 建筑公司的电话,说无人机不断撞上他们停在所有工地上的白色卡车。你冲到其中一个站点检查视觉模型,并意识到它错误地预测白色卡车的一侧只是明亮的天空。鉴于这一预测,无人机会径直飞向卡车,以为那里什么也没有。
对现实世界中的数据进行预测时,最好对模型的预测可信度进行评估。如果需要模型来做出对人们生活有实际影响的决策,这一点尤其正确。在自动驾驶汽车、医疗保健、保险等应用中,不确定性测量有助于防止严重事故的发生。
不确定性的来源
当对任何过程建模时,我们主要关心两种类型的不确定性。
随机不确定性:这是我们试图解释的过程中固有的不确定性。例如,由于与周围空气的复杂相互作用,从桌子上方的相同位置落下的乒乓球每次都会落在稍微不同的点上。这一类的不确定性在实践中往往是不可减少的。
认知不确定性:这种不确定性归因于对最适合解释数据的模型的知识不足。这种不确定性是可以减少的,因为对手头的问题有了更多的了解。例如,通过向模型添加更多参数、收集更多数据等来减少这种不确定性。
那么我们如何估计不确定性呢?
让我们考虑这样一个例子,一家面包店试图根据进入面包店的顾客数量来估计它在一个给定的月内将出售的蛋糕数量。我们将尝试使用一个简单的线性回归模型来模拟这个问题。然后,我们将尝试从我们现有的可用数据中估计该模型中不同类型的认知不确定性。
Equation for Linear Regression
这个模型的系数受制于采样不确定性,我们不太可能从样本数据中确定模型的真实参数。因此,提供这些系数的一组可能值的估计将告知我们当前模型能够如何恰当地解释这些数据。
首先,让我们生成一些数据。我们将从经过缩放和移位的单位正态分布中对我们的 x 值进行采样。我们的 y 值只是这些 x 值的扰动。
import numpy as npfrom numpy.random import randn, randint
from numpy.random import seed# random number seed
seed(1)# Number of samples
size = 100x = 20 * (2.5 + randn(size))
y = x + (10 * randn(size) + 50)
我们得到的数据最终看起来像这样
Distribution of Sample Data
我们将从使用 bootstrap 抽样估计模型参数的不确定性开始。Bootstrap 采样是一种通过采样替换原始数据集来构建新数据集的技术。它生成我们数据集的变体,并能给我们一些直观的参数范围来描述数据。
在下面的代码中,我们运行 1000 次 bootstrap 采样迭代,将线性回归模型拟合到每个样本数据集,并记录系数,以及每次迭代时模型的截距。
from sklearn.utils import resamplecoefficients = []
intercepts = []for _ in range(1000):
idx = randint(0, size, size)
x_train = x[idx]
y_train = y[idx]
model = LinearRegression().fit(x_train, y_train)
coefficients.append(model.coef_.item())
intercepts.append(model.intercept_)
最后,我们从记录的系数中提取 97.5,2.5 个百分点。这给了我们系数和截距的 95%置信区间。使用百分位数来确定区间还有一个额外的优点,就是不需要对系数的抽样分布进行假设。
upper_coefficient = np.percentile(coefficients, 97.5)
upper_intercept = np.percentile(intercepts, 97.5)lower_coefficient = np.percentile(coefficients, 2.5)
lower_intercept = np.percentile(intercepts, 2.5)
我们现在可以使用这些系数来绘制能够描述数据的曲线族的 95%置信区间。
Confidence Interval for Model Parameters
现在让我们估计模型预测的不确定性。我们的线性回归模型预测蛋糕的平均销售数量,假设有 x 名顾客来到商店。我们预计不同的 x 值会在y 中产生不同的均值响应,我们将假设对于一个固定的 x ,响应 y 是正态分布的。
Visualizing the conditional mean
基于这一假设,我们可以使用来自我们预测的残差来近似以为条件的 y 中的方差。有了这个方差,我们就可以计算平均响应的标准误差,并使用它来建立平均响应的置信区间。这是我们对 y 的真实平均响应的近似程度的度量。这个值越小越好。**
****
Confidence Intervals of the Mean from the Standard Error of the Model
条件均值的方差取决于系数和截距的方差。标准误差就是这个方差的平方根。由于条件均值的标准误差与 x 的值与均值的偏差成正比,所以我们可以看到,随着它越来越接近 x 的均值,它会变得越来越窄。
有了置信区间,面包店就能够确定给定数量的顾客将出售的蛋糕的平均数量的区间,然而,他们仍然不知道给定数量的顾客他们可能出售的蛋糕的可能数量的区间。
置信区间仅说明 y 的平均响应的漂移。对于给定的 x 值,不提供 y 所有可能值的区间。为了做到这一点,我们需要使用一个预测区间。
预测区间以与置信区间相似的方式导出。唯一不同的是,我们在计算标准误时,包含了我们因变量 y 的方差,导致区间更宽。
Prediction Interval for the Model Predictions
结论
在评估不确定性系列的第一部分中,我们研究了在一个简单的回归模型中评估认知不确定性来源的方法。当然,当数据和模型的规模和复杂性增加时,这些评估会变得更加困难。
当我们处理大型神经网络时,自举技术不起作用,并且通过标准误差估计置信区间和预测区间仅在对模型残差和参数的采样分布进行正态假设时才起作用。当这些假设被违反时,我们如何衡量不确定性?
在本系列的下一部分,我们将着眼于在更复杂的模型中量化不确定性的方法。
作者:Dhruv Nair,数据科学家,Comet.ml
估计机器学习模型中的不确定性—第 3 部分
作者:Dhruv Nair,数据科学家,Comet.ml
在关于不确定性估计的系列文章的最后一部分中,我们讨论了大型模型的自举等方法的局限性,并展示了如何使用 MC Dropout 来估计神经网络预测的不确定性。
到目前为止,我们研究的方法包括在数据集或模型参数中创建变量来估计不确定性。这里的主要缺点是,它要求我们要么训练多个模型,要么进行多次预测,以便计算出我们的模型预测的方差。
在有延迟约束的情况下,诸如 MC 丢弃之类的技术可能不适合用于估计预测间隔。我们能做些什么来减少估计区间所需的预测次数?
用极大似然法估计区间
在本系列的第 1 部分中,我们假设因变量 μ(y|x) 、的平均响应呈正态分布。
MLE 方法包括建立两个模型,一个用于估计条件平均响应 μ(y|x) ,另一个用于估计预测响应中的方差 σ 。
首先,我们将训练数据分成两半。前半部分模型 mμ 使用前半部分数据作为常规回归模型进行训练。然后,该模型用于对数据的后半部分进行预测。
第二个模型, mσ 使用数据的后半部分进行训练,并将 mμ 的残差平方作为因变量。
****
最终预测区间可以用以下方式表示
这里 α 是根据高斯分布的期望置信水平。
让我们试一试
我们将再次使用自动 MPG 数据集。请注意,在最后一步中,训练数据是如何再次拆分的。
****Mean Variance Estimation Method**dataset_path = keras.utils.get_file("auto-mpg.data", "[http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data](http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data)")column_names =
['MPG','Cylinders','Displacement','Horsepower','Weight',
'Acceleration', 'Model Year', 'Origin']
raw_dataset = pd.read_csv(dataset_path, names=column_names,
na_values = "?", comment='\t',
sep=" ", skipinitialspace=True)dataset = raw_dataset.copy()
dataset = dataset.dropna()origin = dataset.pop('Origin')dataset['USA'] = (origin == 1)*1.0
dataset['Europe'] = (origin == 2)*1.0
dataset['Japan'] = (origin == 3)*1.0train_dataset = dataset.sample(frac=0.8,random_state=0)
test_dataset = dataset.drop(train_dataset.index)mean_dataset = train_dataset.sample(frac=0.5 , random_state=0)
var_dataset = train_dataset.drop(mean_dataset.index)**
接下来,我们将创建两个模型来估计数据的均值和方差
**import kerasfrom keras.models import Model
from keras.layers import Input, Dense, Dropout
dropout_rate = 0.5def model_fn():
inputs = Input(shape=(9,))
x = Dense(64, activation='relu')(inputs)
x = Dropout(dropout_rate)(x)
x = Dense(64, activation='relu')(x)
x = Dropout(dropout_rate)(x)
outputs = Dense(1)(x)
model = Model(inputs, outputs)
return modelmean_model = model_fn()
mean_model.compile(loss="mean_squared_error", optimizer='adam')var_model = model_fn()
var_model.compile(loss="mean_squared_error", optimizer='adam')**
最后,我们将标准化我们的数据,并开始训练
**train_stats = train_dataset.describe()
train_stats.pop("MPG")
train_stats.transpose()def norm(x):
return (x - train_stats.loc['mean'])/ train_stats.loc['std']normed_train_data = norm(train_dataset)
normed_mean_data = norm(mean_dataset)
normed_var_data = norm(var_dataset)
normed_test_data = norm(test_dataset)train_labels = train_dataset.pop('MPG')
mean_labels = mean_dataset.pop('MPG')
var_labels = var_dataset.pop('MPG')
test_labels = test_dataset.pop('MPG')**
训练好均值模型后,我们可以使用它对数据集的后一半进行预测,并计算残差的平方。
**EPOCHS = 100mean_model.fit(normed_mean_data, mean_labels, epochs=EPOCHS, validation_split=0.2, verbose=0)mean_predictions = mean_model.predict(normed_var_data)
squared_residuals = (var_labels.values.reshape(-1,1) - mean_predictions) ** 2var_model.fit(normed_var_data, squared_residuals, epochs=EPOCHS, validation_split=0.2, verbose=0)**
让我们来看看这种方法产生的音程。
你会注意到高度不准确的预测在平均值附近有更大的间隔。
使用分位数回归估计区间
如果我们不想对我们的响应变量的分布作出假设,而想直接估计我们的目标变量的上限和下限,该怎么办?
分位数损失可以帮助我们估计目标百分位数反应,而不是平均反应。也就是说,预测我们目标的 0.25 分位数值将告诉我们,给定我们当前的一组特征,我们期望 25%的目标值等于或小于我们的预测。
如果我们训练两个独立的回归模型,一个用于 0.025 百分位,另一个用于 0.9725 百分位,我们实际上是说我们预期 95%的目标值落在这个区间内,即95%的预测区间****
让我们试一试
Keras 没有默认的分位数损失,所以我们将使用来自 Sachin Abeywardana 的跟随实现
**import keras.backend as Kdef tilted_loss(q,y,f):
e = (y-f)
return K.mean(K.maximum(q*e, (q-1)*e), axis=-1)model = model_fn()
model.compile(loss=lambda y,f: tilted_loss(0.5,y,f), optimizer='adam')lowerq_model = model_fn()
lowerq_model.compile(loss=lambda y,f: tilted_loss(0.025,y,f), optimizer='adam')upperq_model = model_fn()
upperq_model.compile(loss=lambda y,f: tilted_loss(0.9725,y,f), optimizer='adam')**
由此产生的预测如下所示
这种方法的一个缺点是它倾向于产生非常宽的间隔。您还会注意到,间隔并不是关于中间估计值(蓝点)对称的。
评估预测间隔
在上一篇文章中,我们引入了两个指标来评估我们区间预测的质量,PICP 和 MPIW。下表比较了我们用来估计神经网络中不确定性的最后三种方法的这些度量。
神经网络中不确定性估计技术的比较
我们看到,均值-方差估计方法产生最小宽度的区间,这导致其 PICP 分数的降低。MC 下降和分位数回归产生非常宽的区间,导致完美的 PICP 分数。
MPIW 和 PICP 之间的平衡是一个开放性的问题,完全取决于模型的应用方式。理想情况下,我们希望我们的区间尽可能紧凑,具有较低的平均宽度,并且在大多数情况下还包括我们的目标值。
结论
这些技术可以很容易地在您现有的模型上实现,只需很少的更改,并且为您的预测提供不确定性估计,使它们更值得信赖。
我希望你喜欢我们关于不确定性的系列。请继续关注此空间,了解更多精彩内容!!